frida-server是什么
frida-server 是 Frida 框架中的核心服务端组件,用于在目标设备上提供“动态插桩(Dynamic Instrumentation)”能力。
运行在:
- Android
- iOS
- Linux
- macOS
- Windows
上的一个 Agent/Daemon它允许外部客户端:
- 注入代码
- Hook函数
- 修改参数
- 修改返回值
- dump内存
- 绕过安全检测
- 动态分析运行时行为
而不需要修改原始程序二进制。
1.Frida整体架构
graph TD A[frida-tools 客户端] --> B[frida-core] B --> C[USB/TCP通信] C --> D[frida-server] D --> E[目标进程] E --> F[Java Hook] E --> G[Native Hook] E --> H[内存读写] E --> I[SSL Pinning Bypass]
2.Frida组成
Frida主要由几部分构成:
| 组件 | 作用 |
|---|---|
| frida-tools | Python命令行工具 |
| frida-core | 核心通信库 |
| frida-server | 目标设备上的服务端 |
| frida-gadget | 无Root注入方案 |
| Gum Engine | 动态插桩引擎 |
| JavaScript Runtime | Hook脚本执行环境 |
3.frida-server工作原理
3.1 本质
frida-server 本质是:
- 一个运行在目标设备上的 RPC Server
- 提供进程注入能力
- 提供 Hook API
- 提供 JS Runtime
客户端通过 USB/TCP 与其通信。
3.2 Hook流程
sequenceDiagram participant PC participant frida-server participant TargetApp PC->>frida-server: attach/spawn frida-server->>TargetApp: 注入Agent TargetApp->>TargetApp: 加载JS Runtime PC->>TargetApp: 下发Hook脚本 TargetApp->>PC: 返回Hook结果
4.支持的平台
| 平台 | 支持情况 |
|---|---|
| Android | 最常用 |
| iOS | 越狱环境常见 |
| Windows | 支持 |
| Linux | 支持 |
| macOS | 支持 |
| QNX | 支持 |
Frida官方明确支持跨平台动态插桩。
5.Android部署流程
5.1 查看CPU架构
1 | adb shell getprop ro.product.cpu.abilist |
常见:
| 架构 | frida-server版本 |
|---|---|
| arm64-v8a | android-arm64 |
| armeabi-v7a | android-arm |
| x86_64 | android-x86_64 |
5.2 下载
官方发布页:
5.3 推送
1 | adb push frida-server /data/local/tmp/ |
5.4 授权
1 | adb shell chmod 755 /data/local/tmp/frida-server |
5.5 启动
1 | adb shell su -c /data/local/tmp/frida-server |
或者:
1 | adb shell |
官方文档也使用类似方式。
6.frida-server常见命令及端口
查看设备
1 | frida-ls-devices |
查看进程
1 | frida-ps -U |
附加进程
1 | frida -U -n com.demo.app |
Spawn模式
1 | frida -U -f com.demo.app |
加载JS
1 | frida -U -f com.demo.app -l hook.js |
默认监听端口
1 | netstat -anp | grep frida |
7.frida-server检测与对抗
很多App会主动检测Frida。
常见检测:
| 检测方式 | 原理 |
|---|---|
| 端口检测 | 27042 |
| 进程名检测 | frida-server |
| maps检测 | /proc/self/maps |
| ptrace检测 | 调试状态 |
| inline hook检测 | 指令校验 |
| thread检测 | GumJS线程 |
Frida Handbook 中专门提到:
/data/local/tmp/frida-server/proc/self/maps
等典型检测点。
绕过检测方案
改名
1 | mv frida-server fs64 |
换路径
1 | /dev/fs64 |
修改端口
1 | frida-server -l 0.0.0.0:6666 |
8.frida-server典型用途
| 场景 | 用途 |
|---|---|
| Android逆向 | Hook Java/native |
| APP安全测试 | SSL Pinning绕过 |
| 风控分析 | 参数还原 |
| 游戏修改 | 内存修改 |
| 恶意代码分析 | 动态行为分析 |
| 漏洞研究 | Runtime fuzz |
| API分析 | 请求签名逆向 |