TheQmaks/phantom-frida

GitHub: TheQmaks/phantom-frida

从源码构建反检测Frida服务器的自动化工具,通过多层补丁覆盖16个检测向量实现深度隐匿。

Stars: 161 | Forks: 85

# phantom-frida 从源代码构建反检测 Frida 服务器。覆盖 16 个检测向量,包含约 90 个补丁。 在 [ajeossida](https://github.com/hackcatml/ajeossida) 基础上进行了扩展,增加了额外的隐匿技术:自定义端口、二进制字符串清扫、内部符号重命名、临时路径混淆等。 ## 工作原理 Phantom-frida 克隆 Frida 源代码,分 4 个阶段(源代码、针对性、构建后、二进制)应用补丁,并编译一个自定义服务器,其中所有可识别的“frida”字符串、符号、线程名称和文件路径都被替换为自定义名称。 标准的 Frida 客户端(`pip install frida-tools`)可以正常连接到打补丁的服务器——客户端-服务器协议保持不变。 ## 快速开始 ### GitHub Actions(推荐) 1. Fork 本仓库 2. Actions > **Build Custom Frida** > Run workflow 3. 选择版本、名称、架构、选项 4. 下载构建产物(有缓存时约 8 分钟,冷构建约 35 分钟) ### 每周自动构建 **Weekly Stealth Build** 工作流每周日运行: - 自动检测最新的 Frida 版本 - 通过 `namegen.py` 生成随机名称和端口 - 使用 `--extended` 进行最大程度的隐匿构建 - 创建包含二进制文件 + `build-info.json` 的 GitHub Release ### 本地构建 (WSL Ubuntu) ``` python3 build.py --version 17.7.2 # 完整选项: python3 build.py --version 17.7.2 --name myserver --port 27142 --extended --verify # 仅 Patch(检查更改而不编译): python3 build.py --version 17.7.2 --skip-build ``` ### WSL 辅助脚本 ``` wsl -d Ubuntu bash build-wsl.sh # 带选项: FRIDA_VERSION=17.7.2 CUSTOM_NAME=myserver CUSTOM_PORT=27142 EXTENDED=1 \ wsl -d Ubuntu bash build-wsl.sh ``` ## 检测向量 | # | 向量 | 检测方法 | 基础版 | 扩展版 | |---|--------|-----------------|------|----------| | 1 | 进程名 `frida-server` | `/proc/*/cmdline`, `ps` | Renamed | Renamed | | 2 | maps 中的 `libfrida-agent.so` | `/proc/self/maps` 扫描 | Renamed | Renamed | | 3 | 线程名 `gum-js-loop`, `gmain`, `gdbus` | `/proc/self/task/*/comm` | Renamed | Renamed | | 4 | memfd 名称 `frida-agent-64.so` | `/proc/self/fd/` readlink | `jit-cache` | `jit-cache` | | 5 | `frida_agent_main` 符号 | `dlsym` / 内存扫描 | Renamed | Renamed | | 6 | SELinux 标签 `frida_file` | SELinux 上下文检查 | Renamed | Renamed | | 7 | libc 钩子 (exit, signal) | 钩子检测 | Disabled | Disabled | | 8 | D-Bus 服务 `re.frida.server` | D-Bus 内省 | Renamed | Renamed | | 9 | 默认端口 27042 | `connect()` 扫描 | - | `--port N` | | 10 | D-Bus 接口 | 协议检查 | - | Renamed | | 11 | 内部 C 符号 | 内存字符串扫描 | - | Renamed | | 12 | GType 名称 `FridaServer` | GObject 内省 | - | Renamed | | 13 | 临时路径 `.frida`, `frida-` | 文件系统扫描 | - | Renamed | | 14 | 二进制字符串残留 | 二进制 `strings` 扫描 | - | Swept | | 15 | 构建配置定义 | 内存扫描 | - | Renamed | | 16 | 资产目录 `libdir/frida` | 路径检查 | - | Renamed | ## 选项 ``` --version, -v Frida version to build (required) --name, -n Custom name replacing 'frida' (default: ajeossida; use random for stealth) --arch, -a Target arch (default: android-arm64) --port, -p Custom listening port (default: 27042) --extended, -e Enable extended anti-detection (vectors 9-16) --temp-fixes Stability fixes (perfetto skip, cloak detach) --verify Scan output for residual 'frida' strings --skip-build Apply patches only, don't compile --skip-clone Use existing source in work-dir --ndk-path Path to existing Android NDK r25 ``` ## 部署 ``` # 推送到设备 adb push output/myserver-server-17.7.2-android-arm64 /data/local/tmp/myserver-server adb shell chmod 755 /data/local/tmp/myserver-server # 启动(默认端口 27042) adb shell /data/local/tmp/myserver-server -D & frida -U -f com.example.app # 启动(自定义端口) adb shell /data/local/tmp/myserver-server -D & adb forward tcp:27142 tcp:27142 frida -H 127.0.0.1:27142 -f com.example.app ``` 每周发布的版本都包含一个 `build-info.json`,其中记录了名称、端口、版本和架构。 ## 构建阶段 1. **源代码补丁**: 对整个 Frida 源代码树进行全局字符串替换。重命名所有 `frida-agent`、`frida-helper`、`frida-server`、`re.frida.*` 引用。使用重命名的 Java 包重新构建 Android helper DEX。 2. **针对性补丁**: 针对构建系统文件 (meson.build)、memfd 名称、libc 钩子禁用、SELinux 标签的特定修复。 3. **构建后补丁**: 首次编译后,重命名 `frida_agent_main` 符号(由 Vala 编译器生成,仅存在于构建输出中)。需要进行第二次增量构建。 4. **二进制补丁**: 对编译后的二进制文件进行十六进制级别的替换 —— 线程名(`gmain`, `gdbus`, `pool-spawner`),以及可选的针对残留 `frida`/`Frida` 字符串的二进制字符串清扫。 ## 架构 ``` build.py Main build script (clone, patch, compile, collect) patches.py All patch definitions (87 patches + 17 rollbacks) namegen.py Random name/port generator for stealth builds build-wsl.sh WSL helper script test_comprehensive.js Anti-detection + Java bridge verification script .github/workflows/ build.yml Manual build workflow scheduled-build.yml Weekly auto-build with releases ``` ## 环境要求 - Ubuntu 22.04+(WSL 也可以) - Python 3.10+ - Git, curl, unzip, make - 约 20 GB 可用磁盘空间 - Android NDK r25c(自动下载) ## 版本支持 | Frida | 状态 | |-------|--------| | 17.x | 已针对源代码完全验证 | | 16.x | 兼容(自动检测 API 差异) | ## 测试应用 已在 arm64 Android 14 设备上通过 `--extended` 验证: | 应用 | Java bridge | Hooks | 反检测 | |-----|-------------|-------|----------------| | Telegram | 28,772 类 | SSL+crypto | 全部通过 | | Google Play Store | 47,305 类 | Activity hooks | 全部通过 | | Facebook | 54,064 类 | Basic hooks | 全部通过 | | Magisk | 27,737 类 | Activity hooks | 全部通过 | ## 已知限制 - **arm32 应用** (Chrome): Frida 上游 bug [#2878](https://github.com/frida/frida/issues/2878) — `_patchCode` 中的 `invalid instruction`。这不是 phantom-frida 的问题。 - **D-Bus 接口名称**(`re.frida.HostSession17` 等):在基础模式下故意不重命名。这些是客户端-服务器协议 —— 重命名服务器端会破坏标准的 `frida` 客户端。这不是检测向量(仅通过 USB/TCP 通道可见)。 ## 致谢 - 由 Ole Andre Ravnas 开发的 [Frida](https://frida.re/) - 由 hackcatml 开发的 [ajeossida](https://github.com/hackcatml/ajeossida) —— 原始隐匿 Frida 概念 - 来自 Android 安全社区的检测向量研究 ## 许可证 MIT
标签:Android 安全, C/C++, Cutter, DNS 反向解析, Docker支持, DOM解析, Frida, GitHub Actions, Hakrawler, Hook 框架, iOS 安全, Python, Root 检测绕过, 事务性I/O, 二进制补丁, 云资产清单, 代码混淆, 反检测, 反调试, 情报收集, 无后门, 漏洞研究, 目录枚举, 移动安全, 编译构建, 网络可见性, 网络安全, 自动化构建, 自动笔记, 进程隐藏, 逆向工具, 逆向工程, 隐私保护, 隐身技术, 预握手