突破检测封锁:如何构建你自己的“隐身”版Frida

admin 2026-03-03 07:20:48 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: Phantom-Frida是一个开源项目,通过源码级补丁、针对性补丁、构建后补丁和二进制补丁四个阶段,深度修改标准Frida源码,重命名关键标识符、禁用特定钩子、清除残留字符串,以覆盖多达16种常见Frida检测向量,构建具备强大反检测能力的Frida服务器。项目支持手动构建和每周自动构建的隐身版本,提供自定义名称、端口和扩展隐身模式选项,适用于移动安全研究、逆向工程和渗透测试中提升隐蔽性。使用标准frida-tools客户端即可连接,但需注意法律道德限制和已知技术限制。 综合评分: 85 文章分类: 移动安全,逆向分析,安全工具,二进制安全,渗透测试


cover_image

突破检测封锁:如何构建你自己的“隐身”版Frida

柠檬赏金猎人

2026年2月23日 10:00 广东

概述

Phantom-Frida 是一个开源项目,旨在从源码层面构建具备强大反检测能力的 Frida 服务器。它通过应用约90个补丁,覆盖了多达16种常见的Frida检测向量,能够有效规避安全应用和反调试机制的扫描。项目不仅支持手动构建,还提供了每周自动构建的“隐身”版本,是移动安全研究、逆向工程和渗透测试中提升隐蔽性的利器。

技术/功能

Phantom-Frida 通过四个阶段的补丁对标准 Frida 源码进行深度修改,以实现反检测:

  1. 源码级补丁:在整个 Frida 源码树中进行全局字符串替换,重命名所有如 frida-agentfrida-serverre.frida.* 等关键标识符,并重建 Android Helper 的 DEX 文件以重命名 Java 包。
  2. 针对性补丁:修改构建系统文件(如 meson.build)、内存文件描述符(memfd)名称、禁用特定的 libc 钩子(如 exitsignal)以及 SELinux 标签。
  3. 构建后补丁:在首次编译后,重命名由 Vala 编译器生成的 frida_agent_main 符号,该符号仅存在于构建输出中,然后进行第二次增量构建。
  4. 二进制补丁:在编译后的二进制文件上进行十六进制级别的替换,修改线程名称(如 gmaingdbus),并可选择性地清除二进制中残留的 “frida”/“Frida” 字符串。

核心反检测向量覆盖:

| 向量编号 | 检测方法 | 基础模式 | 扩展模式 (--extended) | | — | — | — | — | | 1 | 进程名 (/proc/*/cmdline, ps) | 已重命名 | 已重命名 | | 2 | 内存映射中的 libfrida-agent.so (/proc/self/maps) | 已重命名 | 已重命名 | | 3 | 线程名 (/proc/self/task/*/comm) | 已重命名 | 已重命名 | | 4 | memfd 名称 (/proc/self/fd/readlink) | jit-cache | jit-cache | | 5 | frida_agent_main 符号 (dlsym / 内存扫描) | 已重命名 | 已重命名 | | 6 | SELinux 标签 (frida_file) | 已重命名 | 已重命名 | | 7 | libc 钩子 (exit, signal) | 已禁用 | 已禁用 | | 8 | D-Bus 服务 (re.frida.server) | 已重命名 | 已重命名 | | 9 | 默认端口 (27042) | – | 支持 --port 自定义 | | 10 | D-Bus 接口 | – | 已重命名 | | 11 | 内部 C 符号 | – | 已重命名 | | 12 | GType 名称 (FridaServer) | – | 已重命名 | | 13 | 临时文件路径 (.frida, frida-) | – | 已重命名 | | 14 | 二进制字符串残留 | – | 已清除 | | 15 | 构建配置宏定义 | – | 已重命名 | | 16 | 资源目录路径 (libdir/frida) | – | 已重命名 |

构建选项:

  • --version, -v: 指定要构建的 Frida 版本(必需)。
  • --name, -n: 替换“frida”的自定义名称(默认:ajeossida;使用 random 可生成随机名以增强隐蔽性)。
  • --arch, -a: 目标架构(默认:android-arm64)。
  • --port, -p: 自定义监听端口(默认:27042)。
  • --extended, -e: 启用扩展反检测功能(覆盖向量9-16)。
  • --verify: 扫描输出文件,检查是否残留“frida”字符串。
  • --skip-build: 仅应用补丁,不进行编译(用于检查修改)。
  • --skip-clone: 使用工作目录中已存在的源码。

使用示例

1. 通过 GitHub Actions 构建(推荐,无需本地环境) 这是最简单快捷的方式,尤其适合不熟悉 Linux 编译环境的用户。

  1. Fork 本项目仓库到你的 GitHub 账户。
  2. 进入你 Fork 后的仓库,点击 Actions 选项卡。
  3. 在左侧工作流列表中选择 Build Custom Frida
  4. 点击 Run workflow,在弹出表单中填写或选择参数:
  • frida_version: 例如 17.7.2
  • custom_name: 自定义服务器名称,或留空使用随机名
  • custom_port: 自定义端口
  • enable_extended: 勾选以启用扩展隐身模式
  • target_arch: 选择目标架构,如 android-arm64
  1. 点击 Run workflow。等待约8-35分钟(取决于缓存)后,即可在运行完成的作业页面下载构建好的二进制文件。

2. 在本地 WSL (Ubuntu) 环境中构建 确保你的 Windows 系统已安装并配置好 WSL 2 及 Ubuntu 发行版。

  • 使用辅助脚本(最简单)
  # 在 PowerShell 或 CMD 中执行
  wsl -d Ubuntu bash build-wsl.sh
  # 或带参数执行
  $env:FRIDA_VERSION="17.7.2"
  $env:CUSTOM_NAME="myghost"
  $env:CUSTOM_PORT="27142"
  $env:EXTENDED="1"
  wsl -d Ubuntu bash build-wsl.sh
  • 直接使用 Python 构建脚本(更灵活)
  # 在 WSL 的 Ubuntu 终端中执行
  # 安装基础依赖
  sudo apt update && sudo apt install -y python3 python3-pip git curl unzip make
  # 运行构建脚本
  python3 build.py --version 17.7.2
  # 完整选项示例:构建一个高度隐身的版本
  python3 build.py --version 17.7.2 --name random --port 27142 --extended --verify
  # 仅打补丁,查看修改内容
  python3 build.py --version 17.7.2 --skip-build

3. 部署与使用 构建完成后,二进制文件位于 output/ 目录下。

# 1. 推送服务器到 Android 设备
adb push output/myghost-server-17.7.2-android-arm64 /data/local/tmp/myghost-server
adb shell chmod 755 /data/local/tmp/myghost-server

# 2. 启动服务器(使用默认端口 27042 或自定义端口)
# 方式A:使用默认端口(如果构建时未指定 --port)
adb shell /data/local/tmp/myghost-server -D &
frida -U -f com.example.targetapp

# 方式B:使用自定义端口(例如 27142)
adb shell /data/local/tmp/myghost-server -D &
adb forward tcp:27142 tcp:27142
frida -H 127.0.0.1:27142 -f com.example.targetapp

关键点:即使服务器端被深度修改,你仍然可以使用标准的 frida-tools 客户端进行连接,客户端-服务器协议保持不变。

注意事项

  1. 法律与道德:请仅在你有合法授权或属于自己完全所有的设备上进行测试。严禁用于非法入侵或破坏活动。
  2. 已知限制
  • ARM32 应用(如 Chrome):存在一个上游 Frida 的已知问题(issue #2878),在 _patchCode 中会产生无效指令。这并非 Phantom-Frida 导致的问题。
  • D-Bus 接口名:在基础模式(未使用 --extended)下,像 re.frida.HostSession17 这样的协议接口名不会被重命名。因为这是客户端-服务器通信协议的一部分,仅重命名服务器端会导致标准 Frida 客户端无法连接。这通常不被视为检测向量,因为它们仅在 USB/TCP 通信通道上可见。
  1. 环境要求:本地构建需要 Ubuntu 22.04+ 环境(WSL 可用),约 20 GB 可用磁盘空间。Android NDK r25c 会自动下载。
  2. 版本支持:完全支持 Frida 17.x 版本;16.x 版本兼容(脚本会自动检测 API 差异)。
  3. 每周自动构建:项目配置了每周日自动运行的工作流,会检测最新的 Frida 版本,用随机生成的名称和端口构建一个扩展隐身版本,并发布到 GitHub Releases 中,方便直接下载使用。

参考链接

  • https://github.com/TheQmaks/phantom-frida
  • https://frida.re/
  • https://github.com/hackcatml/ajeossida

仅限交流学习使用,如您在使用本工具或代码的过程中存在任何非法行为,您需自行承担相应后果,我们将不承担任何法律及连带责任。“如侵权请私聊公众号删文”。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:柠檬赏金猎人 《突破检测封锁:如何构建你自己的“隐身”版Frida》

归途有我,安全相伴 网络安全文章

归途有我,安全相伴

文章总结: 该文档是公安部网安局发布的春运返程网络安全防骗手册,旨在提醒公众警惕春运期间高发的购票诈骗陷阱。核心内容列举了五大高发骗局,包括低价票陷阱、山寨购票
评论:0   参与:  0