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); // } }
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; }
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; }