动态插桩服务器

一个通过Frida提供动态插桩能力的服务器,支持设备管理、进程控制和脚本执行等功能,适用于安全分析和逆向工程场景。

  • by nonsleepr
  • TypeScript
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 nonsleepr/frida-mcp.ts

使用说明

Frida MCP服务器

一个通过Frida提供动态插装功能的MCP服务器。使用TypeScript构建,并针对Bun运行时进行了优化。

特性

  • 动态仪表:钩子函数、检查内存和修改正在运行的进程的行为
  • 设备管理:支持本地、USB和远程Frida设备
  • 过程控制:生成、附加、恢复和终止进程
  • 交互式会话:为复杂的仪器工作流程创建持久会话
  • 脚本执行:使用一次性和持久模式执行JavaScript代码
  • 文件操作:从插入指令的进程下载文件并查询模块信息

先决条件

安装

无需安装!使用 npx 直接从GitHub运行(请参阅下面的配置)。

对于当地发展:

# Clone the repository
git clone https://github.com/nonsleepr/frida-mcp.ts
cd frida-mcp.ts

# Install dependencies
bun install

注: 虽然这个项目是用Bun构建的, npx 由于本机依赖性要求,(来自npm)需要从GitHub运行。使用 npx --yes github:nonsleepr/frida-mcp.ts 运行服务器。

配置

环境变量

  • FRIDA_DEFAULT_DEVICE:默认远程设备连接字符串(例如,“192.168.1.100:27042”或“192.168.1.100”,端口默认为27042)

Claude桌面配置

添加到您的Claude Desktop配置文件中:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json 视窗: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "frida": {
      "command": "npx",
      "args": ["--yes", "github:nonsleepr/frida-mcp.ts"],
      "env": {
        "FRIDA_DEFAULT_DEVICE": "192.168.1.100:27042"
      }
    }
  }
}

Roo配置

将此添加到您的项目 .roo/mcp.json:

{
  "mcpServers": {
    "frida": {
      "command": "npx",
      "args": ["--yes", "github:nonsleepr/frida-mcp.ts"],
      "env": {
        "FRIDA_DEFAULT_DEVICE": "10.254.1.69:27042"
      },
      "disabled": false,
      "alwaysAllow": []
    }
  }
}

备注:设置 FRIDA_DEFAULT_DEVICE 将其设置为Frida服务器的连接字符串(主机名:port或只是主机名),或者将其留空以使用本地设备。

可用工具

进程管理

工具 说明 参数
spawn_process 生成一个进程,其中Frida处于暂停状态。该过程将在启动时暂停。使用 resume_process() 加载脚本后继续执行。 program (字符串)
args (可选字符串[])
device_id (可选:“默认”或连接字符串)
resume_process 恢复已生成的进程。 pid (编号)
device_id (可选:“默认”或连接字符串)
kill_process 通过PID终止进程。 pid (编号)
device_id (可选:“默认”或连接字符串)

交互式会话

工具 说明 参数
create_interactive_session 为动态检测创建交互式会话。建立一个Frida会话,用于注入JavaScript、挂钩函数和监视目标进程。会话将一直持续到显式关闭或进程终止。 process_id (编号)
device_id (可选:“默认”或连接字符串)
execute_in_session 在现有的Frida会话中执行JavaScript代码。所有脚本都是持久的,并继续运行。使用 wait 参数,用于在返回之前捕获初始输出。消息可通过 frida://sessions/{session_id}/messages 资源。 session_id (字符串)
javascript_code (字符串)
wait (可选数字,默认值:0-等待初始输出的秒数)
load_script_file 将Frida JavaScript文件加载并执行到现有会话中。所有脚本都是持久的,并继续运行。使用 wait 参数,用于在返回之前捕获初始输出。消息可通过 frida://sessions/{session_id}/messages 资源。 session_id (字符串)
script_path (字符串)
wait (可选数字,默认值:0-等待初始输出的秒数)

文件操作

工具 说明 参数
download_file 使用Frida仪器从远程系统下载文件。对Windows路径使用双反斜杠。附加到指定的PID或查找explorer.exe。适用于最大约500MB的文件,超时60秒。 file_path (字符串)
output_path (字符串)
pid (可选编号)
device_id (可选:“默认”或连接字符串)

可用资源

资源通过URI提供对Frida状态的实时只读访问。

直接资源

URI 描述
frida://devices 列出所有已连接的Frida设备
frida://sessions 列出所有活动的Frida会话及其状态
frida://documentation Frida提示和不明显的JavaScript API功能

资源模板

URI模板 描述
frida://devices/{device_id} 按ID获取特定设备的详细信息
frida://devices/{device_id}/processes 列出特定Frida设备上的进程。使用“默认”、“本地”、“usb”或“远程”进行自动设备选择,提供特定的设备ID,或使用连接字符串(主机名:端口或主机名)。
frida://devices/{device_id}/processes/by-name/{process_name} 在特定设备上按名称查找进程(不区分大小写的部分匹配)。对配置的远程设备使用“默认”。支持连接字符串(主机名:端口或主机名)。
frida://devices/{device_id}/processes/{pid}/module 获取进程的主模块信息(路径、基址、大小)。对配置的远程设备使用“默认”。支持连接字符串(主机名:端口或主机名)。
frida://sessions/{sessionId}/messages 使用默认的100条消息限制从持久脚本中检索消息。检索时会消耗消息。
frida://sessions/{sessionId}/messages/{limit} 使用自定义限制从持久脚本中检索消息。使用 /last:N (例如。, /last:10 对于最后10条消息)或 /all 无限制。检索时会消耗消息。