实验环境
windows 10
vscode
frida 16.2.1
jadx-gui
jeb
实验
1.Frida写数据
1 | //一般写在app的私有目录里,不然会报错:failed to open file (Permission denied)(实际上就是权限不足) |
2.Frida_inlineHook与读写汇编
1 | function inline_hook() { |
- 将地址的指令解析成汇编
1 | var soAddr = Module.findBaseAddress("lib52pojie.so"); |
- Frida Api
直接改写汇编,改机器码
1 | function patchCode(){ |
3.普通函数与jni函数的主动调用
frida关于nativefunction的文档:https://frida.re/docs/javascript-api/#nativefunction
支持的参数类型如下:
1 | void |
1 | var funcAddr = Module.findBaseAddress("lib52pojie.so").add(0x1054C); |
jni函数还是原来那一套,比如下面输出返回值,并修改返回值为true
1 | function hooktest(){ |
4.Trace
工具名称 | 描述 | 链接 |
---|---|---|
jnitrace | 老牌,经典,信息全,携带方便 | jnitrace |
jnitrace-engine | 基于jnitrace,可定制化 | jnitrace-engine |
jtrace | 定制方便,信息全面,直接在_agent.js或者_agent_stable.js 里面加自己的逻辑就行 | jtrace |
hook_art.js | 可提供jni trace,可以灵活的增加你需要hook的函数 | hook_art.js |
JNI-Frida-Hook | 函数名已定义,方便定位 | JNI-Frida-Hook |
findhash | ida插件,可用于检测加解密函数,也可作为Native Trace库 | findhash |
Stalker | frida官方提供的代码跟踪引擎,可以在Native层方法级别,块级别,指令级别实现代码修改,代码跟踪 | Stalker |
sktrace | 类似 ida 指令 trace 功能 | sktrace |
frida-qbdi-tracer | 速度比frida stalker快,免补环境 | frida-qbdi-tracer |
### 4.1 frida-trace | ||
Frida-Trace 是 Frida 框架提供的一个功能强大的工具,用于追踪和监视目标应用程序中的函数调用。通过 Frida-Trace,用户可以轻松地跟踪函数的调用、参数和返回值,并实时查看这些信息。以下是 Frida-Trace 的一些主要特点和用法介绍: |
主要特点:
动态追踪:Frida-Trace 可以实时监视目标应用程序中的函数调用,无需重启应用或重新编译代码。
灵活性:用户可以根据需要选择要追踪的函数,包括系统库函数和自定义函数。
函数参数和返回值:除了函数调用,Frida-Trace 还可以显示函数的参数和返回值,帮助用户更好地理解函数的执行过程。
易用性:Frida-Trace 提供了简洁的命令行接口,用户可以通过命令轻松设置和启动函数追踪。
1 | - `-i` / `-a`: 跟踪 C 函数或 so 库中的函数。 |
使用案例:
注意下面需要打开相应的app保持在屏幕上
1 | #附加当前进程并追踪lib52pojie.so里的所有Java_开头的jni导出函数 |
4.2 jnitrace
安装
1 | pip install jnitrace==3.3.0 |
使用
1 | //attach模式附加52pojie.so并输出日志,其中wuaipojie是进程名,可以通过frida-ps -U查看 |
1 | `-l libnative-lib.so`- 用于指定要跟踪的库 |
4.3 sktrace
地址:https://github.com/bmax121/sktrace.git
这个类似 ida 指令 trace 功能,显示每个执行的汇编的寄存器的值
1 | python sktrace.py -m attach -l lib52pojie.so -i 0x103B4 wuaipojie |