基于 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] Start the server (default)
Options:
--frida <16 | 17> Frida version to use (default: 17)
--host <host> Host to bind (default: 127.0.0.1)
--port <port> Port to bind (default: 31337)
--project <path> Project directory for data/cache/logs (default: .igf in cwd)
--no-open Do not open browser on startup
--help, -h Show help message
当同时设置时,命令行标志优先于环境变量。
本项目不包含内置的防篡改保护绕过方案:
理由: RASP(运行时应用自我保护)解决方案不断演进以检测插桩框架。维持有效的绕过需要持续投入以跟上新的检测方法,这会带来显著的维护负担和潜在的稳定性问题。这些绕过方案还高度依赖具体应用,导致通用方案较脆弱。
Grapefruit 不提供脆弱的內置绕过,而是专注于与专用绕过工具良好组合的插桩和检查能力。
在需要绕过 RASP 的授权评估中,推荐做法如下:
Frida 系统调用跟踪器 — 使用 frida-strace(Frida 17.8.0+)跟踪目标进程中的系统调用。这有助于识别检测痕迹,并确定在附加 Grapefruit 前需要打哪些补丁:
frida-strace -U -f com.example.app
多会话架构 — Frida 支持在同一个进程上附加多个会话。先用你的 RASP 绕过脚本启动一个独立会话,然后再启动 Grapefruit。当 Grapefruit 检测到目标应用已在运行时,它会附加到现有进程而不是重新启动它,从而保留所有已经生效的绕过措施。
默认情况下,Grapefruit 绑定到 127.0.0.1,并且没有内置身份验证。任何本地进程都可以访问 Web UI 和 API。虽然默认会阻止跨域请求(不发送 CORS 头,Socket.IO 拒绝跨域连接),但仅凭这一点不足以保护共享或远程环境。
如果需要远程访问或多用户安全,请将 Grapefruit 放在经过身份验证的反向代理(如 Caddy)后面,以获得 TLS、访问控制和日志记录。未经身份验证,请勿将 Grapefruit 直接暴露到网络。
| 变量 | 描述 | 默认值 |
|---|
HOST | 服务器绑定地址 | 127.0.0.1 |
PORT | 服务器端口 | 31337 |
FRIDA_VERSION | Frida 主版本(16 或 17) | 17 |
FRIDA_TIMEOUT | Frida 操作超时时间(ms) | 1000 |
PROJECT_DIR | 用于数据/缓存/日志的项目目录 | .igf in cwd |
LLM_PROVIDER | AI 提供商(anthropic、openai、gemini、openrouter) | |
LLM_API_KEY | LLM 提供商的 API 密钥 | |
LLM_MODEL | 模型名称(例如 claude-sonnet-4-20250514) | |
LLM_BASE_URL | 自定义端点(覆盖提供商默认值) |