jshook 中文文档 下载 App

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。操作链路:

  1. LSPatch 修补 APK → 加 frida-gadget → 重新签名
  2. 安装修补后的 APK
  3. 手机上开 JsHook 免 ROOT 模式
  4. 电脑上连接 gadget 进程调试

这时候电脑端看到的进程名是 Gadget(或类似 gadget 相关的名字),不是目标应用的包名。

和 fridainject 的区别

方面fridainjectfrida-gadget
谁启动 frida-serverJsHook目标应用内置的 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 列出来看。