MASTG-TECH-0035: JNI 追踪
正如 查看反汇编的本机代码 中详细描述的那样,传递给每个 JNI 函数的第一个参数是一个 JNI 接口指针。 此指针包含一个函数表,允许本机代码访问 Android 运行时。 识别对这些函数的调用有助于理解库功能,例如创建哪些字符串或调用哪些 Java 方法。
jnitrace 是一个基于 Frida 的工具,类似于 frida-trace,专门针对本机库对 Android 的 JNI API 的使用,提供了一种方便的方式来获取 JNI 方法跟踪,包括参数和返回值。
您可以通过运行 pip install jnitrace
轻松安装它,并按如下方式立即运行它
jnitrace -l libnative-lib.so sg.vantagepoint.helloworldjni
可以多次提供
-l
选项来跟踪多个库,或者可以提供*
来跟踪所有库。 但是,这可能会提供大量输出。
在输出中,您可以看到从本机代码发出的对 NewStringUTF
的调用的跟踪(其返回值然后返回给 Java 代码,请参阅 查看反汇编的本机代码 了解更多详情)。 请注意,与 frida-trace 类似,输出是彩色的,有助于直观地区分不同的线程。
跟踪 JNI API 调用时,您可以在顶部看到线程 ID,后跟 JNI 方法调用,包括方法名称、输入参数和返回值。 如果是从本机代码调用 Java 方法,则还会提供 Java 方法参数。 最后,jnitrace 将尝试使用 Frida 回溯库来显示 JNI 调用是从哪里发出的。
要了解有关高级用法的所有选项的更多信息,请查看 jnitrace GitHub 页面上的文档。