开源移动安全测试套件,适用于 iOS 和 Android。原名 Passionfruit。
由 Frida 驱动的运行时移动应用插桩工具包。 通过基于 Web 的界面检查、Hook 和修改移动应用。
现已同时支持 iOS 和 Android!
需要在你的设备上运行 Frida 服务器。请先按照官方安装指南(Android)进行配置。
npm(推荐,需要 Node.js 22.18+)
npm install -g igf
igf
或无需安装直接运行(需要 Node.js 22.18+)
npx igf
预编译二进制文件适用于 macOS、Linux 和 Windows,可在 GitHub Releases 获取。 源码开发和预编译可执行文件均使用 Node.js;npm 工作流请参阅开发指南。
igf [options] 启动服务器(默认)
Options:
--frida <16 | 17> 使用的 Frida 版本(默认:17)
--host <host> 绑定的主机(默认:127.0.0.1)
--port <port> 绑定的端口(默认:31337)
--project <path> 用于 data/cache/logs 的项目目录(默认:当前工作目录下的 .igf)
--no-open 启动时不打开浏览器
--help, -h 显示帮助信息
| 变量 | 描述 | 默认值 |
|---|---|---|
HOST | 服务器绑定地址 | 127.0.0.1 |
PORT | 服务器端口 | 31337 |
FRIDA_VERSION | Frida 主版本(16 或 17) | 17 |
FRIDA_TIMEOUT | Frida 操作超时时间(毫秒) | 1000 |
PROJECT_DIR | 用于 data/cache/logs 的项目目录 | 当前工作目录下的 .igf |
LLM_PROVIDER | AI 提供商(anthropic、openai、gemini、openrouter) | |
LLM_API_KEY | LLM 提供商的 API 密钥 | |
LLM_MODEL | 模型名称(例如 claude-sonnet-4-20250514) | |
LLM_BASE_URL | 自定义端点(覆盖提供商默认值) |
当命令行标志和环境变量同时设置时,命令行标志优先。
本项目不包含针对防篡改保护的内置绕过:
理由: RASP(运行时应用自我保护)解决方案持续演进以检测插桩框架。维护有效的绕过需要持续投入以跟上新的检测方法,这会带来显著的维护负担和潜在的稳定性问题。这些绕过也高度依赖于具体应用,使得通用解决方案非常脆弱。
Grapefruit 不提供脆弱的内置绕过,而是专注于插桩和检查能力,这些能力可以与专用的绕过工具很好地组合使用。
推荐方法,适用于需要 RASP 绕过的授权评估:
Frida Syscall Tracer — 使用 frida-strace(Frida 17.8.0+)跟踪目标进程中的系统调用。这有助于识别检测痕迹,并确定在附加 Grapefruit 之前需要哪些补丁:
frida-strace -U -f com.example.app
详情请参阅 Frida 17.8.0 发布说明。
多会话架构 — Frida 支持多个会话附加到同一进程。先使用你的 RASP 绕过脚本启动一个单独的会话,然后再启动 Grapefruit。当 Grapefruit 检测到目标应用已在运行时,它会附加到现有进程而不是重新启动它,从而保留已生效的任何绕过。
Grapefruit 默认绑定到 127.0.0.1,并且没有内置身份验证。Web UI 和 API 可被任何本地进程访问。虽然默认情况下会阻止跨源请求(没有 CORS 头,Socket.IO 拒绝跨源连接),但仅凭这一点对于共享或远程环境来说是不够的。
如果你需要远程访问或多用户安全,请将 Grapefruit 置于经过身份验证的反向代理之后,例如 Caddy,以实现 TLS、访问控制和日志记录。不要在未进行身份验证的情况下将 Grapefruit 直接暴露到网络。