Android逆向11-Frida进阶
Android逆向11-Frida进阶
来自吾爱破解-正己
https://www.52pojie.cn/thread-1701353-1-1.html
Frida写数据
1 | //一般写在app的私有目录里,不然会报错:failed to open file (Permission denied)(实际上就是权限不足) |
Frida_inlineHook与读写汇编
什么是inlinehook?
Inline hook(内联钩子)是一种在程序运行时修改函数执行流程的技术。它通过修改函数的原始代码,将目标函数的执行路径重定向到自定义的代码段,从而实现对目标函数的拦截和修改。
简单来说就是可以对任意地址的指令进行hook读写操作
常见inlinehook框架:
PS:Frida的inlinehook不是太稳定,崩溃是基操,另外新版的frida兼容性会比较好
1 | function inline_hook() { |
将地址的指令解析成汇编
1 | var soAddr = Module.findBaseAddress("lib52pojie.so"); |
Frida Api
1 | var soAddr = Module.findBaseAddress("lib52pojie.so"); |
主动调用
数据类型 | 描述 |
---|---|
void | 无返回值 |
pointer | 指针 |
int | 整数 |
long | 长整数 |
char | 字符 |
float | 浮点数 |
double | 双精度浮点数 |
bool | 布尔值 |
1 | var funcAddr = Module.findBaseAddress("lib52pojie.so").add(0x1054C); |
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 |
PS:这次介绍的几款工具都是基础用法,更深入的还需要大家去看看源码学习
frida-trace
frida-trace 可以一次性监控一堆函数地址。还能打印出比较漂亮的树状图,不仅可以显示调用流程,还能显示调用层次。并且贴心的把不同线程调用结果用不同的颜色区分开了。
大佬整理的文档:
1 | D:\> frida-trace.exe --help |
-i
/-a
: 跟踪 C 函数或 so 库中的函数。
PS:-a 包含模块+偏移跟踪,一般用于追踪未导出函数,例子:-a “lib52pojie.so!0x4793c”
包含/排除模块或函数:
-I
: 包含指定模块。-X
: 排除指定模块。
Java 方法跟踪:
-j JAVA_METHOD
: 包含 Java 方法。-J JAVA_METHOD
: 排除 Java 方法。
附加方式:
-f
:通过 spwan 方式启动-F
:通过 attach 方式附加当前进程
日志输出:
-o
:日志输出到文件
1 | frida-trace -U -F -I "lib52pojie.so" -i "Java_" #附加当前进程并追踪lib52pojie.so里的所有Java_开头的jni导出函数 |
jnitrace
1 | pip install jnitrace==3.3.0 |
1 | jnitrace -m attach -l lib52pojie.so com.zj.wuaipojie -o trace.json //attach模式附加52pojie.so并输出日志 |
-l libnative-lib.so
- 用于指定要跟踪的库
-m <spawn|attach>
- 用于指定要使用的 Frida 附加机制
-i <regex>
- 用于指定应跟踪的方法名称,例如,-i Get -i RegisterNatives
将仅包含名称中包含 Get 或 RegisterNatives 的 JNI 方法
-e <regex>
- 用于指定跟踪中应忽略的方法名称,例如,-e ^Find -e GetEnv
将从结果中排除所有以 Find 开头或包含 GetEnv 的 JNI 方法名称
-I <string>
- 用于指定应跟踪的库的导出
-E <string>
用于指定不应跟踪的库的导出
-o path/output.json
- 用于指定jnitrace
存储所有跟踪数据的输出路径
sktrace
1 | python sktrace.py -m attach -l lib52pojie.so -i 0x103B4 com.zj.wuaipojie |
控制流混淆对抗[new]
JEB Decompiler 5.5.0.202311022109 mod by CXV
PS:注意jdk的版本要高于17,不然打不开
恐怖如斯的效果对比图:
PS:珍惜表哥说dexlib2也能混淆对抗,效果比jeb的还强大