Example #1
0
extern void __attribute__ ((visibility ("hidden"))) HookNativeMethod(JNIEnv* env, jstring oldSoName, jstring newSoName, jstring oldSymbol, jstring newSymbol) {
    jboolean isCopy = JNI_TRUE;
    char* old_so_name = env->GetStringUTFChars(oldSoName, &isCopy);
    if (old_so_name == NULL) {
        return;
    }
    char* new_so_name = env->GetStringUTFChars(newSoName, &isCopy);
    if (new_so_name == NULL) {
        return;
    }
    char* old_symbol = env->GetStringUTFChars(oldSymbol, &isCopy);
    if (old_symbol == NULL) {
        return;
    }
    char* new_symbol = env->GetStringUTFChars(newSymbol, &isCopy);
    if (new_symbol == NULL) {
        return;
    }


    void* oldHandle = dlopen(old_so_name, RTLD_NOW);
    if (oldHandle == NULL) {
        return;
    }
    void* newHandle = dlopen(new_so_name, RTLD_NOW);
    if (newHandle == NULL) {
        return;
    }


    void* oldMethod = dvmDlsym(oldHandle, old_symbol);
    if (oldMethod == NULL) {
        return;
    }
    void* pluginNativeMethod = dvmDlsym(newHandle, new_symbol);
    if (pluginNativeMethod == NULL) {
        return;
    }

    void* OldFunc = NULL;

    if (registerInlineHook(oldMethod, pluginNativeMethod, (uint32_t **)&OldFunc) == INLINE_HOOK_OK) {
        LOGD("registerInlineHook  Ok");
    }
    if (inlineHook(oldMethod) == INLINE_HOOK_OK ) {
        LOGD("inlineHook Ok");
    }

    //TK_InlineHookFunction(oldMethod, pluginNativeMethod, &OldFunc);


//    if (newHandle) {
//        void* pluginNativeMethod = dvmDlsym(newHandle, new_symbol);
//        LOGD("the new so method addr is %p", pluginNativeMethod);
//        addElfHook(old_so_name, old_symbol, pluginNativeMethod);
//        void* oldHandle = elfLoadLibrary(old_so_name);
//        elfHookSymbol(oldHandle, old_symbol, (void**)&pluginNativeMethod);
//    }

}
Example #2
0
int hook()
{
    LOGD("[*] start inline Hook ~ \r\n");

    if (registerInlineHook((uint32_t) pread, (uint32_t) new_pread, (uint32_t **) &old_pread) != ELE7EN_OK)
        return -1;

    if (inlineHook((uint32_t) pread) != ELE7EN_OK)
        return -1;

    LOGD("[*] Old read = %p\n", pread); 
    LOGD("[*] New read = %p\n", new_pread); 

    return 0;
}
Example #3
0
int hook()
{
    LOGD("[*] start inline Hook ~ \r\n");

    if (registerInlineHook((uint32_t) strncmp, (uint32_t) new_strncmp, (uint32_t **) &old_strncmp) != ELE7EN_OK)
        return -1;

    if (inlineHook((uint32_t) strncmp) != ELE7EN_OK)
        return -1;

    LOGD("[*] Old strncpy = %p\n", strncmp); 
    LOGD("[*] New strncpy = %p\n", new_strncmp); 

    return 0;
}