-
-
[原创]利用ArtMethod,Frida Attach获取已注册的JNI Native方法地址
-
发表于:
2025-6-23 13:08
3726
-
[原创]利用ArtMethod,Frida Attach获取已注册的JNI Native方法地址
在实际脱壳中,经常遇到应用程序无法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 的实现
传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!