第1章 安装与架构
1.1 Frida 17.9.11 新特性
发布日期: 2026-05-23
当前版本亮点 (17.9.11)
- Darwin 安全加固: 在硬化 Darwin 任务上启用异常处理,通过匿名页面实现 agent laundering 机制以避免携带代码签名状态
- arm64e 异常处理改进: 实现 long-jump trampolines,改进 scope 恢复,绕过 XNU sigreturn 验证
- PAC 修复: 修复读取 arm64e 系统 dyld 元数据时的 Pointer Authentication Code 处理
- arm32 relocator 修复: 修复分支指令重定位时的条件码保留
17.9.0 重要特性 (2026-03-26)
- eBPF spawn gating: Linux 新增基于 eBPF 的 spawn 拦截实现
- Control-endpoint 选项: Fruity/Droidy 后端支持自定义控制端点,默认
tcp:27042,Droidy 支持localabstract:/my-frida-server - Android 优化: 64 位设备跳过 32 位 helper,避免浪费时间
- Linux: 支持注入 group-stopped PIDs
17.8.0 重要特性 (2026-03-09)
- frida-strace: 新增系统调用追踪工具,可识别检测机制和 RASP 检查
- Android: 在进程内加载 ART/Dalvik VM 并运行 frida-helper.dex,减少兼容性问题
- 非调试应用支持: LLDB 启动不可行时回退到 ProcessControlService
- GumJS API: 新增 SQLite column metadata
17.7.0 重要特性 (2026-02-13)
- eBPF SyscallTracer: 新增基于 eBPF 的系统调用追踪服务
- Droidy 服务增强: 支持消费远程服务和本地服务实现
- Android: 修正新版系统上 spawn 包名逻辑
17.6.0 重要特性 (2026-01-18) — 里程碑版本
- 轻量级 Zygote hooking: 通过
/proc/$pid/mem内存修补替代 ptrace 注入,920 字节 arm64 “zymbiote” 载荷拦截setArgV0Native() - 消除 system_server 注入: 通用化 frida-helper.dex 方案,frida-core 不再依赖 frida-java-bridge
- SELinux 用户空间库重构: 基于上游新版代码重构,支持现代二进制策略格式,保持 Android M 兼容
- USB 竞争条件修复: 解决启动/关闭时序竞争
17.5.0 重要特性 (2025-11-04)
- 编译器增强:
CompilerOptions新增platform和externals选项 - Darwin 共享缓存: 重写为直接解析 dyld 头部,消除 VM 区域猜测
- Swift 绑定现代化: 迁移至 async/await + AsyncStream 模式
1.2 安装方法
方法一: pip 安装(推荐)
# 安装 Python 绑定 + CLI 工具(版本必须匹配 server)
pip install frida==17.9.11 frida-tools==14.8.2
# 仅安装绑定(不含 CLI)
pip install frida==17.9.11
# 验证安装
frida --version
# 输出: 17.9.11注意: frida-tools 14.8.2 要求 frida >= 17.9.0,与 17.8.x 及更早版本不兼容。
方法二: 预编译二进制
从 GitHub Releases 下载: https://github.com/frida/frida/releases/tag/17.9.11
该版本包含 225 个资源文件,覆盖:
- frida-server (各平台)
- frida-gadget (各平台)
- frida-inject
- frida-core-devkit / frida-gum-devkit / frida-gumjs-devkit
方法三: 源码编译
# 依赖 (Ubuntu)
sudo apt-get install build-essential git lib32stdc++-9-dev libc6-dev-i386 nodejs npm
# Node.js 18+ 必需
# 克隆并构建
git clone https://github.com/frida/frida.git
cd frida
git checkout 17.9.11
# 本地构建
make && make install
# 交叉编译 Android arm64
./configure --host=android-arm64
makeLinux 后续配置:
sudo sysctl kernel.yama.ptrace_scope=01.3 架构概述
核心组件
| 组件 | 角色 |
|---|---|
| Gum | 底层 C 语言 instrumentation 引擎(基础层) |
| GumJS | 封装 Gum 能力的 JavaScript 运行时 |
| frida-core | 物流层:注入、IPC、设备枚举、进程管理 |
| frida-server | 目标设备上的守护进程,通过 TCP (端口 27042) 暴露 frida-core |
| frida-gadget | 可嵌入的共享库,用于无法注入的场景 |
| Stalker | 动态代码追踪引擎(指令/块/调用级别) |
架构图
[主机 (PC)] [目标设备 (Android)]
frida-tools (Python CLI) <--> frida-server (端口 27042)
frida Python bindings <--> |
自定义脚本 <--> +-- 注入的 agent (GumJS)
+-- 目标进程
通信通过 USB (adb forward) 或 TCP 进行。Server 处理进程枚举、spawn、attach,并在 client 和注入 agent 之间中继消息。
三种运行模式
1. 注入模式 (Injected) — 主要模式
- Client spawn/attach 到目标进程
- frida-core 将 GumJS 作为共享库注入目标
- Client 与注入 agent 之间双向通信
- frida-server 在端口 27042 提供远程设备访问
- 17.6.0+: Android 上通过
/proc/$pid/mem进行内存修补,不再使用 ptrace 注入 Zygote
2. 嵌入模式 (Embedded)
- frida-gadget 链接/加载到目标 app 中
- 适用于无法注入的场景(非 root iOS、加固 Android)
- 支持 Listen、Connect、Script、ScriptDirectory 交互模式
- 17.8.0+: 非调试应用可回退到 ProcessControlService
3. 预加载模式 (Preloaded)
- frida-gadget 通过
LD_PRELOAD/DYLD_INSERT_LIBRARIES加载 - 从文件系统自主执行脚本
1.4 平台支持矩阵
| 平台 | 架构 | 可用组件 |
|---|---|---|
| Android | arm, arm64, x86, x86_64 | server, gadget(.so), inject, devkits |
| iOS | arm64, arm64e, simulator | gadget(.dylib), devkits |
| macOS | arm64, arm64e, x86_64, universal | server, gadget, inject, devkits |
| Windows | x86, x86_64, arm64 | server(.exe), gadget(.dll), inject, devkits |
| Linux | x86, x86_64, arm64, armhf, mips 等 | server, gadget(.so), inject, devkits |
| FreeBSD | x86_64 | server, gadget(.so), inject, devkits |
| QNX | armeabi | server, gadget(.so), inject, devkits |
Python 客户端支持平台
- macOS: x86_64 (10.13+), arm64 (11.0+)
- Linux: i686, x86_64, aarch64, armv7l (manylinux)
- Windows: x86, x86_64, arm64
1.5 版本兼容性
Client-Server 版本匹配(严格要求)
| Client (pip) | Server | 兼容? |
|---|---|---|
| frida 17.9.11 | frida-server 17.9.11 | ✅ |
| frida 17.9.11 | frida-server 17.9.10 | ❌ (可能工作但不保证) |
| frida 17.9.11 | frida-server 17.8.x | ❌ |
| frida 17.8.0 | frida-server 17.9.11 | ❌ |
frida-tools 兼容性
| frida-tools | 要求的 frida 版本 | 与 17.9.11 兼容? |
|---|---|---|
| 14.8.2 | >=17.9.0, <18.0.0 | ✅ |
| 14.7.0 | >=17.9.0, <18.0.0 | ✅ |
| 14.6.0 | >=17.7.3, <18.0.0 | ✅ (兼容但推荐用最新) |
| 14.5.0 | >=17.5.0, <18.0.0 | ✅ (兼容但推荐用最新) |
| 14.4.6 | >=17.2.8, <18.0.0 | ✅ (兼容但推荐用最新) |
推荐安装组合
pip install frida==17.9.11 frida-tools==14.8.2关键规则:
- Client 和 Server 版本必须完全一致 — 小版本间的协议变更会破坏通信
- frida-gadget 也必须匹配 client 版本
- 升级时必须同时更新 client 和 server