首页
社区
课程
招聘
[求助]VirtualApp可以hook libart.so 中的方法么?
发表于: 2018-3-2 12:01 5659

[求助]VirtualApp可以hook libart.so 中的方法么?

2018-3-2 12:01
5659
我通过如下方式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吗?

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 9
活跃值: (82)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
楼主,我想请教Hook技术,我是白的不能再白的小白,请问您方便教我下吗?
2018-4-10 20:08
0
雪    币: 5
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼主你后来解决了么? 是什么原因导致hook不到的呢?
2018-8-17 14:41
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
楼主你后来解决了吗?我现在也在研究这一块。
2018-8-24 16:30
0
雪    币: 5
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
地址问题
2018-8-25 12:41
0
雪    币: 525
活跃值: (941)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
最后于 2018-9-6 09:10 被ycdear编辑 ,原因:
2018-9-5 21:12
0
游客
登录 | 注册 方可回帖
返回