Interactive Android Reverse Engineering through Frida x MCP
Attach once, explore forever. No scripts to restart, no context lost.
- Persistent sessions — attach once, run unlimited commands
- 22 MCP tools — full Frida lifecycle from any MCP-compatible client
- r0capture integration — universal SSL/HTTP traffic capture with PCAP export
- SSL unpinning — OkHttp / Conscrypt / WebView / universal bypass
- Certificate dump — auto-export client certs as P12
- Cross-platform — Windows, Linux, macOS. Uses your system Frida — no version conflicts
Requires frida and frida-tools to be available in your active Python environment.
pip install git+https://github.com/MyuriKanao/fridare.gitOr install it as a standalone tool:
uv tool install git+https://github.com/MyuriKanao/fridare.gitpip install -e .For maintainers, build and publish the package with standard Python packaging tools:
python -m pip install --upgrade build twine
python -m build
python -m twine check dist/*
python -m twine upload dist/*If you want to test the release flow first, upload to TestPyPI before publishing to PyPI.
This repository also includes .github/workflows/pypi-publish.yml:
- pull requests / pushes to
mainbuild the package and runtwine check - pushes of tags matching
v*publish to PyPI automatically
Typical release flow:
git tag v0.1.0
git push origin v0.1.0Before the first automated release, configure a PyPI Trusted Publisher for:
- PyPI project:
fridare - GitHub owner:
MyuriKanao - Repository:
fridare - Workflow file:
.github/workflows/pypi-publish.yml - Environment:
pypi
If the PyPI project does not exist yet, create a pending publisher first and let the first tagged release create it.
Fridare is a standard stdio MCP server. Add it to any MCP-compatible client:
claude mcp add fridare -- fridareOr manually in ~/.claude.json:
{
"mcpServers": {
"fridare": {
"type": "stdio",
"command": "fridare"
}
}
}Add to claude_desktop_config.json (Settings > Developer > Edit Config):
{
"mcpServers": {
"fridare": {
"command": "fridare"
}
}
}If installed in a virtualenv, use the full path:
{
"mcpServers": {
"fridare": {
"command": "/path/to/venv/bin/fridare"
}
}
}Add to .cursor/mcp.json in your project root (or global settings):
{
"mcpServers": {
"fridare": {
"command": "fridare"
}
}
}Add to .vscode/mcp.json:
{
"servers": {
"fridare": {
"type": "stdio",
"command": "fridare"
}
}
}Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"fridare": {
"command": "fridare"
}
}
}Add to ~/.codex/config.json:
{
"mcpServers": {
"fridare": {
"type": "stdio",
"command": "fridare"
}
}
}Add to ~/.gemini/settings.json:
{
"mcpServers": {
"fridare": {
"command": "fridare",
"args": []
}
}
}Fridare speaks stdio transport. To integrate with any MCP-compatible client:
command: fridare
transport: stdio
No arguments, no environment variables required. Just ensure fridare is on your PATH (i.e., pip install -e . was run in the active Python environment).
| Tool | Description |
|---|---|
frida_devices |
List connected devices (USB/remote) |
frida_ps |
List processes with optional name filter |
frida_restart_server |
Kill & restart frida-server on device |
| Tool | Description |
|---|---|
frida_attach |
Attach to process by name/PID (persists) |
frida_spawn |
Cold-start app + attach |
frida_detach |
Detach and cleanup |
frida_status |
Show session state (alive, PID, scripts, PCAP) |
| Tool | Description |
|---|---|
frida_exec |
Run arbitrary JS (supports keep_previous and wait) |
frida_rpc |
Call RPC exports on loaded script |
frida_load_script |
Load JS script from file |
frida_messages |
Read accumulated send() messages |
| Tool | Description |
|---|---|
frida_list_classes |
Enumerate loaded classes (with filter) |
frida_list_methods |
List methods (supports include_inherited) |
frida_list_fields |
List fields of a class |
frida_hook |
Hook method — args, retval, optional backtrace |
| Tool | Description |
|---|---|
frida_ssl_capture |
Capture SSL + HTTP traffic (r0capture) |
frida_ssl_unpin |
Universal SSL pinning bypass |
frida_cert_dump |
Dump client certs + detect pinning |
frida_pcap_start |
Start saving traffic to PCAP file |
frida_pcap_stop |
Stop PCAP capture |
| Tool | Description |
|---|---|
frida_list_modules |
List loaded .so modules + base addr |
frida_list_exports |
List native exports of a module |
> Attach to Damai app
→ frida_attach("大麦")
> Search Mtop classes
→ frida_list_classes("Mtop")
> Hook setRetCode with stack trace
→ frida_hook("mtopsdk.mtop.domain.MtopResponse", "setRetCode", backtrace=true)
> Capture SSL traffic for 10s and save to pcap
→ frida_pcap_start("capture.pcap")
→ frida_ssl_capture(10)
→ frida_pcap_stop()
> Execute custom JS
→ frida_exec("Java.perform(function() { send({result: 'hello'}); })")
> Read hook output
→ frida_messages()
fridare/
├── server.py MCP tool definitions (22 tools)
├── session.py Device/process/session lifecycle + PCAP writer
├── builtins.py Built-in ops (class enum, hooking, SSL capture)
└── scripts/
├── ssl_capture.js Universal traffic capture (SSL + HTTP + stack traces)
├── ssl_unpin.js SSL pinning bypass
└── cert_dump.js Certificate dump + pinning locator
- System Frida — uses whatever
fridaversion is installed. No bundled binaries, no version conflicts - Session persistence — one attach, unlimited operations. No reconnecting between commands
- Message accumulation — hook output buffers in memory, read anytime with
frida_messages() - PCAP export —
frida_pcap_start/stopwraps traffic into Wireshark-compatible pcap files - Cross-platform — handles Windows/Linux/Mac quoting differences for adb commands
- SSL capture based on r0capture by r0ysue
- Built on Frida by Ole Andre V. Ravnas
- MCP protocol by Anthropic
- 持久会话 — attach 一次,无限执行
- 22 个 MCP 工具 — 在任何 MCP 兼容客户端中完整操控 Frida
- r0capture 集成 — 通杀 SSL/HTTP 抓包 + PCAP 导出
- SSL Pinning 绕过 — OkHttp / Conscrypt / WebView 通杀
- 证书导出 — 自动 dump 客户端证书为 P12
- 跨平台 — Windows / Linux / macOS,使用系统已装的 Frida,无版本冲突
需要先在当前 Python 环境中准备好 frida 和 frida-tools。
pip install git+https://github.com/MyuriKanao/fridare.git或者安装成独立命令行工具:
uv tool install git+https://github.com/MyuriKanao/fridare.gitpip install -e .维护者可使用标准 Python 打包流程发布:
python -m pip install --upgrade build twine
python -m build
python -m twine check dist/*
python -m twine upload dist/*如果想先验证发布流程,建议先上传到 TestPyPI,再发布到正式 PyPI。
仓库已包含 .github/workflows/pypi-publish.yml:
- PR / 推送到
main时自动构建并执行twine check - 推送符合
v*的 tag 时自动发布到 PyPI
典型发布流程:
git tag v0.1.0
git push origin v0.1.0首次自动发布前,需要在 PyPI 中配置 Trusted Publisher:
- PyPI 项目名:
fridare - GitHub Owner:
MyuriKanao - 仓库名:
fridare - Workflow 文件:
.github/workflows/pypi-publish.yml - Environment:
pypi
如果 PyPI 项目还不存在,先创建 pending publisher,再用第一次带 tag 的发布自动创建项目。
Fridare 是标准 stdio MCP 服务器,可接入任何 MCP 兼容客户端:
claude mcp add fridare -- fridare或手动编辑 ~/.claude.json:
{
"mcpServers": {
"fridare": {
"type": "stdio",
"command": "fridare"
}
}
}Settings > Developer > Edit Config,编辑 claude_desktop_config.json:
{
"mcpServers": {
"fridare": {
"command": "fridare"
}
}
}项目根目录 .cursor/mcp.json:
{
"mcpServers": {
"fridare": {
"command": "fridare"
}
}
}.vscode/mcp.json:
{
"servers": {
"fridare": {
"type": "stdio",
"command": "fridare"
}
}
}~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"fridare": {
"command": "fridare"
}
}
}~/.codex/config.json:
{
"mcpServers": {
"fridare": {
"type": "stdio",
"command": "fridare"
}
}
}~/.gemini/settings.json:
{
"mcpServers": {
"fridare": {
"command": "fridare",
"args": []
}
}
}Fridare 使用 stdio 传输协议,无需额外参数或环境变量。确保 fridare 在 PATH 中即可(即在当前 Python 环境中执行过 pip install -e .)。
你: attach 大麦 APP
→ frida_attach("大麦")
你: 搜 Mtop 相关的类
→ frida_list_classes("Mtop")
你: hook setRetCode,带堆栈
→ frida_hook("mtopsdk.mtop.domain.MtopResponse", "setRetCode", backtrace=true)
你: 抓 10 秒流量并存 pcap
→ frida_pcap_start("capture.pcap")
→ frida_ssl_capture(10)
→ frida_pcap_stop()
你: 拿 hook 产生的消息
→ frida_messages()