第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 新增 platformexternals 选项
  • 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
make

Linux 后续配置:

sudo sysctl kernel.yama.ptrace_scope=0

1.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 平台支持矩阵

平台架构可用组件
Androidarm, arm64, x86, x86_64server, gadget(.so), inject, devkits
iOSarm64, arm64e, simulatorgadget(.dylib), devkits
macOSarm64, arm64e, x86_64, universalserver, gadget, inject, devkits
Windowsx86, x86_64, arm64server(.exe), gadget(.dll), inject, devkits
Linuxx86, x86_64, arm64, armhf, mips 等server, gadget(.so), inject, devkits
FreeBSDx86_64server, gadget(.so), inject, devkits
QNXarmeabiserver, 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.11frida-server 17.9.11
frida 17.9.11frida-server 17.9.10❌ (可能工作但不保证)
frida 17.9.11frida-server 17.8.x
frida 17.8.0frida-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

关键规则:

  1. Client 和 Server 版本必须完全一致 — 小版本间的协议变更会破坏通信
  2. frida-gadget 也必须匹配 client 版本
  3. 升级时必须同时更新 client 和 server