frida-gadget 连接——和 frida-server 类似,进程名不同
和 frida-server 的差异
frida-gadget 模式下,目标应用的 APK 里已经内置了 frida-gadget 配置。gadget 进程作为独立进程运行,电脑端连接它的方式和 frida-server 类似,但有几点不同。
端口
frida-gadget 监听的端口取决于 gadget 的配置文件(通常在 APK 内部)。默认端口也是 28042,但可能被改过。
连接步骤
ADB 端口转发
adb forward tcp:28042 tcp:28042
attach 模式
frida -H 127.0.0.1:28042 Gadget -l test.js
注意进程名是 Gadget(不是目标应用的包名)——gadget 作为一个独立进程存在。
spawn 模式
frida-gadget 一般不支持 spawn 模式(gadget 进程由目标应用启动时拉起来),通常只有 attach 模式。
怎么确认 gadget 进程名
adb shell ps | grep gadget
或者:
frida-ps -H 127.0.0.1:28042
列出 gadget 进程的实际名字,对着写就行。
典型场景:免 root 路线
免 root 路线(LSPatch 修补目标 APK)出来的修补包,通常用的就是 frida-gadget。操作链路:
- LSPatch 修补 APK → 加 frida-gadget → 重新签名
- 安装修补后的 APK
- 手机上开 JsHook 免 ROOT 模式
- 电脑上连接 gadget 进程调试
这时候电脑端看到的进程名是 Gadget(或类似 gadget 相关的名字),不是目标应用的包名。
和 fridainject 的区别
| 方面 | fridainject | frida-gadget |
|---|---|---|
| 谁启动 frida-server | JsHook | 目标应用内置的 gadget |
| 进程名 | 目标应用包名 | 通常是 Gadget |
| 端口 | 固定 28042/28043 | 配置文件决定 |
| 需要 root | 是(frida-server 启动) | 否(gadget 在应用内) |
| 适合场景 | 有 root 的标准开发 | 免 root 路线或特殊 patch |
常见问题
连接被拒绝
gadget 只有在目标应用运行时才启动。先打开修补后的目标应用,让它完全跑起来,再开电脑端 frida 连接。
gadget 端口不是 28042
有些 patch 工具会改 gadget 的默认端口。在 APK 内部找 gadget 配置文件(通常是 .so 旁边的 .json),看看端口号是多少。
# 解压 APK 后找 gadget 配置
unzip target.apk -d target_dir
grep -r "2804" target_dir/lib/
进程名不是 Gadget
某些 gadget 配置会指定进程名。用 frida-ps -H 127.0.0.1:28042 列出来看。