3.6 KiB
3.6 KiB
Hook 脚本运行与捕获约定(强制遵守)
适用范围:本仓库所有
scripts/hook_*.py/probe_*.py/scan_*.py的创建、修改与运行。 原则:脚本挂上 hooks 后,用后台任务运行;数据实时写日志;目标数据一命中,立刻主动停止任务。绝不用 bash 前台sleep等超时结束再看结果。
1. 运行方式(必须)
- 启动:一律
bash工具的run_in_background: true,例如:脚本内部必须cd /Users/yml/codes/Reverse-Engineering-Agent-Universal-v3.0 && \ .venv/bin/python -u scripts/hook_xxx.py > /tmp/hook_xxx.log 2>&1 &print(..., flush=True)(或-u),保证日志实时落盘。 - 观察:用
bash前台tail -f /tmp/hook_xxx.log(或grep关键字)实时查看日志,不要sleep 120后一次性读。 - 停止:一旦日志中出现目标数据(
[hit]/[wire]/[FOUND]等命中标记),立即:保存pkill -f hook_xxx.py # 或 job_kill 对应后台任务evidence/*.json后即可分析。不需要等脚本自身的超时窗口走完。 - 配套交互:需要用户在手机上操作(退出登录→重新登录)时,脚本打印提示后立即进入等待,hook 数据实时刷日志;用户操作完成后我们随时
tail查看,命中即杀。
2. 脚本自身结构(必须)
- 主循环用
time.sleep(5)轮询,但每条捕获都立即send(),on_message里print(flush=True)。 - 超时窗口(如 150s)只是兜底,不是等待方式:数据命中即可提前退出(
pkill/job_kill)。 - 捕获结果写
evidence/下 JSON:script.on('message')全程收集事件,退出前统一落盘;但如果提前被杀,落盘逻辑可能不执行 —— 因此命中即打印+写入:on_message里命中类型直接OUT文件追加写入,保证被杀前数据已持久化。 - 统一模块:
RE = Path("/Users/yml/codes/Reverse-Engineering-Agent-Universal-v3.0")(frida 环境 + bypass 脚本在此)。 - 设备连接:
frida.get_device_manager().add_remote_device("127.0.0.1:31877")(设备上 frida-server 14.2.18 监听 0.0.0.0:31877,macOS 侧adb forward tcp:31877 tcp:31877)。 - spawn 流程(稳定版,参考
hook_genbiz.py):device.spawn(["com.duowan.kiwi"])- 加载
bypass_msaoaid_maps_art_callsite.js - 加载
mask_frida_maps_only.js device.resume(pid),sleep 11- 加载
patch_guard_block_termination.js - 再
create_script主 hook JS
- 注意:不要直接 attach 运行中的 kiwi 进程(App 有 msaoaid 反调试,attach 会被杀/闪退);必须 spawn + 三件套 bypass。
- 注意:脚本里的 JS 若在
resume前load(),目标 so 尚未加载,hook 会落空 —— 模块相关枚举/attach 用setInterval轮询或放在 resume+11s 之后。
3. 常见坑
frida-ps -U正常但 remote spawn 报TransportError:检查adb forward --list,必须tcp:31877 -> tcp:31877。- 设备上会同时存在多个 kiwi 进程(主进程 + cloudpatch/logcat 子进程);hook 必须挂在我们 spawn 的主进程 pid 上,用户手动操作的若为旧实例,hook 会空转(日志 0 命中)。操作前先
am force-stop com.duowan.kiwi清掉旧实例。 - datadiv 导出名是
.datadiv_decode...(带点前缀),匹配用name.indexOf('datadiv') >= 0,不要用=== 0。 libhydeviceid.so业务符号全部混淆/内部化(只导出hy_*syscall 包装 + JNI_OnLoad),dfpReport 加密体生成函数不在导出表;静态搜不到魔数571882cf664bb39401ee属正常(运行时拼装)。