🛫 系列文章导航
- 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950
- 【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446
- 【Frida】【Android】03_RPC https://blog.csdn.net/kinghzking/article/details/137050967
- 【Frida】【Android】04_Objection安装和使用 https://blog.csdn.net/kinghzking/article/details/137071768
- 【Frida】【Android】05_Objection实战 https://blog.csdn.net/kinghzking/article/details/137071826
▒ 目录 ▒
- 🛫 系列文章导航
- 🛫 导读
- 开发环境
- 1️⃣ 安装
- python环境
- 启动ZenTracer
- ZenTracer更改说明
- 2️⃣ 使用
- 设置匹配模板
- `Action`→`Start`
- 验证hook效果
- 🛬 文章小结
- 📖 参考资料
🛫 导读
开发环境
版本号 | 描述 | |
---|---|---|
文章日期 | 2024-03-24 | |
操作系统 | Win11 - 22H2 | 22621.2715 |
node -v | v20.10.0 | |
npm -v | 10.2.3 | |
夜神模拟器 | 7.0.5.8 | |
Android | 9 | |
python | 3.9.9 | |
frida | 16.2.1 | |
frida-tools | 12.3.0 | |
objection | 1.11.0 | |
1️⃣ 安装
通过《【Frida】【Android】01_手把手教你环境搭建》系列文章,我们已经了解了objection的强大,优点是hook准确、粒度细。
今天再推荐个好友自己写的批量hook查看调用轨迹的工具ZenTracer,可以更大范围地hook,帮助读者辅助分析。该工具是Android逆向大佬葫芦娃
随手写的工具,19年10月停止了更新。
python环境
环境安装如下命令(含注释)
REM # 安装python(3.9.9为例)
REM # 安装frida-tools(objection自带最新frida-tools 16.2.1)
pip install objection
REM # 安装界面库
pip install PyQt5
这里需要注意一点:android环境中的frida-server版本一定得是
16.2.1
版本,否则会报错。
启动ZenTracer
这里小编使用的frida16,接口变更导致部分代码失效,修复了该代码,并上传了gitcode上。
最终启动如下界面:
REM # 下载源码(改)
REM # git clone https://github.com/hluwa/ZenTracer
git clone https://gitcode.com/android8/ZenTracer
REM # python运行!!!
cd /d J:\_ALL\CODE\gitcode.com\android8\ZenTracer
python ZenTracer.py
ZenTracer更改说明
- frida.get_usb_device
该接口需要传递等待时长,默认为0,一运行就会报下面错误:
保证足够时间获取到设备列表,这里小编等待了5秒
- device.enumerate_processes
该接口返回对象中的name不再是identifier,所以target改为name即可(否则程序一直没有反应,这个其实就是调试的时候一步步跟出来的):
2️⃣ 使用
ZenTracer操作很简单,只需要下面几步即可:
- 选择
Action
→Match RegEx
- 输入
E:java.io.File
,点击add
,然后关闭窗口- 点击
Action
→Start
- 点击APP,观察运行结果
设置匹配模板
点击Action之后,会出现匹配模板(Match RegEx)和过滤模板(Black RegEx)。匹配就是包含的关键词,过滤就是不包含的关键词,见下图:
我们以
java.io.File
为例,选择Match RegEx
菜单,再弹出对话框中,新增java.io.File
这里,增加的规则支持完全匹配和模糊匹配:
- E:java.io.File(完全匹配)
- M:java.io.File(模糊匹配)
如果不指定类型(M、E),则为模糊匹配。逻辑代码如下:
Action
→Start
执行菜单
Action
→Start
,ZenTracer开始Hook满足条件的类,如下图,hook了包含java.io.File
的所有类。
验证hook效果
我们以https://download.csdn.net/download/kinghzking/89036983中的app为例,点击《测试》按钮,发现显示了两个拦截内容,可见hook成功了。
🛬 文章小结
ZenTracer作为一个工具,大大的提高了逆向效率。但也存在一些问题:
- 不支持选择进程,只能针对顶部进程进行逆向。(对应没有界面的进程,请直接改源码)
- 崩溃率还是有,这种方式 trace 多了 APP 容易崩
- 无法打印调用栈
- 无法hook构造函数
📖 参考资料
- ZenTracer原git地址: https://github.com/hluwa/ZenTracer
- ZenTracer支持frida16的最新git地址: https://gitcode.com/android8/ZenTracer
- 重复造轮子-用 FRIDA 打造 MethodTracer https://wiki.hluwa.cn/s/01f7fac2-81e4-4468-85d8-f710e17da12d/doc/frida-methodtracer-ZdXqg6xeoX
- Frida进阶:Objection内存漫游、hook anywhere、抓包 https://www.cnblogs.com/lxh2cwl/p/14842544.html
ps: 文章中内容仅用于技术交流,请勿用于违规违法行为。