版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/
jnitrace
jnitrace 可以动态跟踪 Java 层通过 JNI 接口调用 native 层(C/C++)代码的过程。它会记录并显示每一个 JNI 函数的调用,包括方法签名、参数、返回值等详细信息。
项目地址:https://github.com/chame1eon/jnitrace
安装 jnitrace
jnitrace 的使用依赖于 Frida。在使用 jnitrace 之前,需要确保 Frida 和 Python 环境已安装。可以参考下面两篇文章:
通过下面的命令安装 jnitrace
pip install jnitrace
解决 frida.NotSupportedError
运行 jnitrace 报错如下
jnitrace -l libnative-lib.so com.cyrus.exammple
Traceback (most recent call last):
File "D:\App\Miniconda3\envs\anti-app\lib\runpy.py", line 194, in _run_module_as_main
return _run_code(code, main_globals, None,
File "D:\App\Miniconda3\envs\anti-app\lib\runpy.py", line 87, in _run_code
exec(code, run_globals)
File "D:\App\Miniconda3\envs\anti-app\Scripts\jnitrace.exe\__main__.py", line 7, in \<module>
File "D:\App\Miniconda3\envs\anti-app\lib\site-packages\jnitrace\jnitrace.py", line 584, in main
pid = device.spawn([args.target], **aux_kwargs)
File "D:\App\Miniconda3\envs\anti-app\lib\site-packages\frida\core.py", line 26, in wrapper
return f(*args, **kwargs)
File "D:\App\Miniconda3\envs\anti-app\lib\site-packages\frida\core.py", line 140, in spawn
return self._impl.spawn(program, argv, envp, env, cwd, stdio, aux_options)
frida.NotSupportedError: need Gadget to attach on jailed Android; its default location is: C:\Users\cyurs\AppData\Local\Microsoft\Windows\INetCache\frida\gadget-android-arm64.so
看报错信息是缺少 gadget-android-arm64.so 文件导致的,去 frida releases 中下载对应 frida 版本的 gadget 文件。
下载完成后解压到 C:\Users\cyurs\AppData\Local\Microsoft\Windows\INetCache\frida\gadget-android-arm64.so 就解决了。
使用 jnitrace 进行 JNI 跟踪
注意:在使用 jnitrace 之前需要先启动 frida-server。