首页
社区
课程
招聘
[原创]利用ArtMethod,Frida Attach获取已注册的JNI Native方法地址
发表于: 2025-6-23 13:08 3726

[原创]利用ArtMethod,Frida Attach获取已注册的JNI Native方法地址

2025-6-23 13:08
3726

在实际脱壳中,经常遇到应用程序无法Frida Spawn,只能Frida Attach进行分析的情况。大部分的安卓壳都会在App启动阶段加入Hook检测和反调试,而在App启动后Attach可以很好地避免被检测到。


但跳过App启动阶段,导致我们无法采用常见的Hook ArtMethod::RegisterNative方法来获得动态绑定的Native方法地址。本文以360加固为例,讨论一种获取正在运行中的App的Native方法地址的方法。

360加固的APP(包含Native方法 + exports隐藏 + JNI_OnLoad动态绑定)

Android 9 Pie

Frida v16

关于Native方法的动态绑定,论坛上已经有很多文章了,不过为了方便参考,此处便再次进行赘述。


当App调用 System.loadLibrary 加载 包含 JNI 的 .so 时,首先会像加载一个常规 .so 一样,调用 dlopen。这之后,如果发现该 .so 包含 JNI_OnLoad 方法,则会立即调用。大部分的动态绑定就是在这一阶段进行的(也有可能在之后进行,JNI允许更换绑定)。


动态绑定需要调用这样的方法:

在Android平台上,JNI的RegisterNatives方法由Dalvik (Android 5之前) 或者 ART (Android 5或者更新) 实现。此处我们以Android 9为例,找到ART这部分的源代码


runtime/jni_internal.cc:

继续查看 ArtMethod::RegisterNative 的实现


传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 8
支持
分享
最新回复 (3)
雪    币: 156
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
大佬您好,我想问一下frida hook这个prettymetod有什么用处,看它hook的时候也没用到啊
2025-6-23 21:56
0
雪    币: 232
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
mb_cfjwplfo 大佬您好,我想问一下frida hook这个prettymetod有什么用处,看它hook的时候也没用到啊
这个函数好像是可以打印出  class+方法签名,方便查看是哪个类的哪个方法正在注册
2025-6-24 00:57
0
雪    币: 34
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
清风QingFeng 这个函数好像是可以打印出 class+方法签名,方便查看是哪个类的哪个方法正在注册

嗯,对的。ArtMethod::PrettyMethod当传入True的时候,返回带函数签名的方法名,类似这样: 

"java.lang.String com.demo.MyClass.myMethod(java.lang.Object, java.lang.String)"

传入False的时候,就只返回方法名:

"com.demo.MyClass.myMethod"


2025-6-24 12:27
1
游客
登录 | 注册 方可回帖
返回