-
-
[求助]VirtualApp可以hook libart.so 中的方法么?
-
-
[求助]VirtualApp可以hook libart.so 中的方法么?
我通过如下方式hook art::JNI::RegisterNatives这个方法
__BEGIN_DECLS
//jint art_JNI_RegisterNatives(JNIEnv*, jclass, const JNINativeMethod*, jint);
HOOK_DEF(jint, art_JNI_RegisterNatives, JNIEnv *env, jclass clazz, const JNINativeMethod *methods, jint mNum) {
jint res;
ALOGD("art_JNI_RegisterNatives: %d", mNum);
for (int i = 0 ; i < mNum; ++i) {
ALOGD("art_JNI_RegisterNatives: %s %s", clazz, *(methods + i));
}
res = orig_art_JNI_RegisterNatives(env, clazz, methods, mNum);
return res;
}
__END_DECLS
void onSoLoaded(const char *name, void *handle) {
//hook art_JNI_RegisterNatives
if (orig_art_JNI_RegisterNatives == NULL && strstr(name, "libart.so")) {
void *symbol = NULL;
if (findSymbol("_ZN3art3JNI15RegisterNativesEP7_JNIEnvP7_jclassPK15JNINativeMethodi",
"libart.so", (unsigned long *) &symbol) == 0) {
ALOGD("hook art_JNI_RegisterNatives");
MSHookFunction(symbol, (void *) new_art_JNI_RegisterNatives, (void **) &orig_art_JNI_RegisterNatives);
}
}
}
在输出日志中可以看到
hook art_JNI_RegisterNatives
但是没有其他hook方法中的日志输出
VirtualApp源码中以同样的方式hook /system/bin/linker 中的 do_dlopen 成功了
我以同样的方式hook自己编写的so中的方法也成功了
难道是 libart.so 中的方法无法hook吗?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课