PE文件分析服务器

一个通过Model Context Protocol(MCP)服务器将CFF Explorer的Lua脚本引擎与Claude AI连接的工具,支持自然语言PE分析、导入/导出检查和二进制修补。

  • by sutharmeet
  • Python
  • 本地部署
  • 9 星标
  • 更新于
在 GitHub 查看 sutharmeet/CFF-Explorer-MCP-Server

使用说明

CFF浏览器MCP服务器

谈谈你的体育档案。 一种桥接的模型上下文协议(MCP)服务器 CFF浏览器的强大Lua脚本引擎和Claude AI——支持自然语言PE分析、导入/导出检查和二进制补丁。


这是什么?

该项目将 CFF浏览器 --通过模型上下文协议将专业级PE文件分析工具转换为AI可访问的工具。设置完成后,您可以向Claude询问以下问题:

  • “分析PE标题 malware.exe 并标记任何可疑的东西”
  • “列出所有进口 suspicious.dll 并强调危险的API调用”
  • “从以下位置提取清单资源 setup.exe"
  • “NOP在偏移0x1A3C处输出5个字节 target.exe"
  • “在偏移量0x2B10处反转跳转,以便许可证检查始终通过”

…Claude将在引擎盖下使用无头CFF Explorer,以结构化、解释性的结果回答您。


运作原理

You (natural language)
        │
        ▼
  Claude Desktop
        │  MCP protocol (stdio)
        ▼
  server.py  ◄─── This project
        │
        │  1. Generates a temporary .cff Lua script
        │  2. Launches CFF Explorer.exe as a subprocess (headless, no GUI)
        │  3. CFF Explorer runs the script, prints results to stdout, exits
        │  4. server.py parses the output into structured JSON
        │
        ▼
  CFF Explorer.exe
  (running invisibly in background for ~1 second)

关键见解: CFF Explorer有一个内置 Lua脚本引擎(v2)当你通过一个 .cff 脚本文件作为命令行参数,它可以无头运行——没有窗口,没有GUI,只有脚本执行和stdout输出。该项目利用这一点,为人工智能模型提供对CFF Explorer的完整PE分析API的编程访问。


特性

工具 说明
analyze_pe_headers 完整PE头转储--DOS、COFF文件头、可选头、所有部分
list_imports 所有导入的DLL和带有序号的函数
list_exports 从DLL导出的所有符号
nop_bytes 补丁:在给定的文件偏移量下,NOP输出N个字节
invert_jump 补丁:翻转条件跳转(JZ↔真是,耶↔JNE等)
extract_resource 将PE资源(图标、清单、位图等)保存到磁盘

需求

要求 详细信息
操作系统 仅限Windows(CFF资源管理器是Windows独有的)
python 3.10或更高
CFF浏览器 Explorer套件 --免费下载
克劳德桌面版 claude.ai/下载

安装

步骤1--下载CFF资源管理器

  1. 首选 https://ntcore.com/?page_id=388

  2. 下载 Explorer套件

  3. 安装它(默认路径: C:\Program Files\Explorer Suite\)

  4. 重要提示: 打开CFF浏览器GUI→ go to Edit → 偏好 → 取消勾选 脚本权限保护(SPP)

    SPP在某些脚本操作之前显示GUI同意对话框。在无头模式下,此对话框会永远阻塞,导致超时。禁用它,MCP服务器才能正常工作。

步骤2--克隆此回购

git clone https://github.com/YOUR_USERNAME/cff-explorer-mcp.git
cd cff-explorer-mcp

步骤3——安装Python依赖项

pip install -r requirements.txt

这只安装了一个软件包: mcp SDK。

步骤4--配置Claude桌面

打开您的Claude Desktop配置文件:

%APPDATA%\Claude\claude_desktop_config.json

添加 cff-explorer 进入下 mcpServers。参见 claude_desktop_config_example.json 对于模板:

{
  "mcpServers": {
    "cff-explorer": {
      "command": "python",
      "args": [
        "C:/path/to/cff-explorer-mcp/server.py"
      ],
      "env": {
        "CFF_EXPLORER_PATH": "C:\\Program Files\\Explorer Suite\\CFF Explorer.exe"
      }
    }
  }
}

注: 使用实际的Python路径。通过跑步找到它 where python 在PowerShell中。

步骤5--重新启动克劳德桌面

关闭并重新打开Claude Desktop。您应该在工具面板中看到可用的CFF资源管理器工具。


用法示例

PE标头分析

“分析C:\samples\suspice.exe的PE标头”

克劳德将返回:

  • 体系结构(x86/x64/ARM64)
  • 入口点、图像库、大小
  • 所有具有虚拟/原始大小、RVA和特征标志的部分
  • 子系统类型(GUI、CUI、Native等)
  • 无论是a。NET程序集
  • 可疑标志(伪造时间戳、非标准图像库、部分异常)

进口分析

“列出所有导入的C:\malware\dropper.dll,并标记任何危险内容”

Claude将枚举所有DLL和函数,然后自动标记:

  • 工艺注射原料药(VirtualAlloc, WriteProcessMemory, CreateRemoteThread)
  • 反调试API(IsDebuggerPresent, CheckRemoteDebuggerPresent)
  • 网络API(WSAStartup, connect, send)
  • 加密API(CryptEncrypt, CryptGenRandom)
  • 直接NT系统调用(NtQueryValueKey, NtOpenProcess)

出口商品清单

“C:\tools\hook.dll导出哪些函数?”

列出所有命名导出及其序号,这对于理解DLL向调用者公开的内容非常有用。

二进制补丁

“C:\crack\game.exe中偏移0x1234处NOP输出6个字节”

“反转C:\target\app.exe中文件偏移量0x5678处的跳转”

⚠️ 在打补丁之前,始终备份文件。 这些操作会就地修改文件。

资源开采

“从C:\app\installer.exe中提取清单,并将其保存到C:\temp\manifest.xml”

常见资源类型ID:

常数 ID 描述
RT_CURSOR 1 硬件光标
RT_BITMAP 2 位图图像
RT_ICON 3 应用程序图标
RT_MENU 4 菜单
RT_DIALOG 5 对话框
RT_STRING 6 字符串表
RT_VERSION 16 版本信息
RT_MANIFEST 24 应用程序清单(XML)

项目结构

cff-explorer-mcp/
│
├── server.py                        ← Main MCP server (all logic lives here)
├── requirements.txt                 ← Python dependencies (just: mcp)
├── .gitignore                       ← Standard Python/Windows gitignore
├── claude_desktop_config_example.json  ← Config template for Claude Desktop
└── README.md                        ← This file

内部 server.py

第节 说明
run_cff_script() 核心运行器--写入临时 .cff 文件,调用CFF Explorer子进程,捕获stdout
script_*() 函数 每个工具的Lua脚本生成器——为CFF Explorer修改后的Lua编写
parse_*() 函数 将CFF Explorer的stdout解析为干净的Python字典
list_tools() MCP工具定义(名称、描述、JSON模式)
call_tool() MCP工具调度——将调用路由到正确的脚本+解析器

CFF资源管理器脚本说明

CFF浏览器使用 修改Lua 方言。本项目与标准Lua的主要区别在于:

功能 标准Lua CFF Explorer Lua
数组 1基 0基
不相等 ~= !=
空值 nil null
原始字符串 不适用 @"C:\path" (C#风格)
os 库 可用 ❌ 不可用
io 库 可用 ❌ 不可用
输出 io.write() print() → stdout

这 os 和 io 库缺失是开发过程中发现的主要错误。此项目中的所有脚本仅使用 print() 为了输出。


故障排除

脚本超时

  • 确保 脚本权限保护(SPP) 在CFF资源管理器首选项中禁用
  • 检查 CFF_EXPLORER_PATH 指向正确 .exe
  • 首先尝试手动运行CFF Explorer以确保其打开

“未找到CFF资源管理器”错误

  • 验证您的路径 claude_desktop_config.json
  • 默认安装路径: C:\Program Files\Explorer Suite\CFF Explorer.exe
  • 在JSON中使用双反斜杠: C:\\Program Files\\Explorer Suite\\CFF Explorer.exe

工具未出现在Claude Desktop中

  • 编辑配置后完全重新启动Claude Desktop
  • 验证JSON(无尾随逗号,平衡大括号)
  • 检查克劳德桌面日志: %APPDATA%\Claude\logs\

“尝试索引全局'os'”错误

  • 您正在运行的是旧版本的 server.py --更新到最新版本
  • 旧版本使用不正确 os.tmpname() 这在CFF Explorer的Lua中不存在

贡献

欢迎拉取请求!对未来工具的一些想法:

  • check_packer --通过截面熵检测常见的封隔器(UPX、Themida等)
  • update_checksum --修补后重新计算并写入PE校验和
  • add_section --向PE文件添加新节
  • realign_pe --将截面重新对齐到给定的对齐值
  • dotnet_metadata --倾倒。托管程序集的NET元数据表

学分


与克劳德一起建造