PE Dagger ServerWindows PE32 / PE32+ 静态解析与改写服务

一款面向可执行程序的静态解析与改写服务,服务启动后仅监听单一端口,通过 HTTP + JSON 方式对外提供接口,能够在单次请求中完成头部解析、导入导出表分析、反汇编、节区改写、资源与重定位重建、签名审计等能力,同时支持多会话隔离并发运行。

x64 / x86 双平台 CORS + OPTIONS 预检 多会话 隔离并发 系统托盘 后台常驻 内置 默认 API Key 鉴权 / 只读模式
对外接口 · 全部封装进 SDK
0 个
功能分类 · 覆盖 PE 全结构
0 类
默认监听端口
0
会话空闲回收
0 s
01 / WORKFLOW

从启动到落盘的四步

写操作只改内存镜像,必须 Save 才落盘, 因此可以在落盘前反复试错、随时 Revert。

01

启动服务

双击即以后台托盘模式常驻运行,默认监听本机 8947 端口,日志写入程序目录;需要观察实时输出时,可切换为前台命令行模式。

02

发起调用

所有能力统一通过一次 HTTP 请求触发,请求体只需给出接口名、参数与会话标识;Python、curl、浏览器或原始 socket 均可直接调用。

03

内存编辑镜像

读接口即时反映内存中的改动;写接口只修改内存编辑镜像,磁盘文件始终保持原样,并可随时撤销回到上次保存的状态。

04

Save 落盘

省略路径即原地覆盖,给出路径即另存,写入过程保持原子性;若未保存就关闭文件或退出进程,内存中的改动会全部丢弃。

关键约束:Save 省略参数则原地覆盖当前文件,给出路径则另存; Revert 丢弃内存改动回到上次 Open / Save 的状态。 同一会话内串行执行,跨会话并行。

02 / PROTOCOL

协议与调用方式

统一 POST /(另有一个 GET / 返回服务信息),请求响应都是 JSON。 端点只有这两个,没有 /api。

请求体 · POST /
{
  "interface": "<接口名>",
  "params": ["参数0", "参数1"],
  "session": "<会话 id>"
}
响应体 · status 判定

{ "status": "success", "result": { ... }, "timestamp": 123456 }


{ "status": "error", "code": "E_OP_FAILED",
  "result": { "error": "错误描述" }, "timestamp": 123456 }

判定成功必须看最外层的 status,不是 result 内部字段。 params 是字符串数组——非字符串元素(数字、对象)会被解析器丢弃。 因为业务错误也用 HTTP 400,用 urllib 会被抛成 HTTPError 而丢掉响应体, 建议用原始 socket 或直接调用本页代码。

错误码ERROR CODES
code含义
E_BAD_JSON请求体不是合法 JSON
E_BAD_PARAM接口名不存在或参数个数 / 格式错误(错误信息里会写明正确写法)
E_NOT_OPEN尚未调用 Open 打开 PE 文件
E_OP_FAILED业务执行失败(如样本不具备该结构)
E_UNAUTHORIZED缺少或错误的 X-Auth-Token(HTTP 401)
E_READONLY只读模式下调用了写接口(HTTP 403)
E_BAD_SESSION会话标识非法
E_NOT_FOUND路由未命中 / 方法不允许 / 服务内部错误
会话隔离SESSION
会话 · 创建、使用与关闭
{ "interface": "SessionCreate", "params": [] }
{ "interface": "Open", "params": ["a.dll"], "session": "s1" }
{ "interface": "SessionClose", "params": ["s1"] }
会话 · 各自独立的文件与镜像

{ "interface": "Open", "params": ["a.dll"], "session": "s1" }
{ "interface": "Open", "params": ["b.dll"], "session": "s2" }

会话 id 合法字符 A-Za-z0-9_.-:,长度 1~64;空闲超时默认 600s 回收, default 槽永不回收。同一会话内串行执行,不同会话可并行处理。

03 / MODULES

14 类接口 · 142 个能力

从服务与会话管理,到头部解析、导入导出、资源、重定位、节区、反汇编、搜索、哈希、签名审计, 再到结构改写与工具统计。点击任意分类直达接口浏览器;浏览器内还可按 15 个 API 类进一步筛选。

04 / SCENARIOS

面向样本分析与二进制工程化

可编程接口,让 PE 分析从「手动点选工具」升级为「脚本驱动」, 并可进一步接入自动化流水线与大模型编排。

PE 骨架解析

一次调用即可取回文件基本信息、DOS / NT 头、可选头、数据目录与节表,帮助快速建立对样本整体结构的认知。

导入导出与资源枚举

按 DLL 分组或按函数名检索导入表,枚举全部导出符号,并遍历资源树提取所需的资源数据,摸清样本的对外依赖与内置资源。

地址换算与反汇编

在 RVA / FOA / VA 之间互相换算定位,对指定地址定点反汇编,并支持特征码搜索、字符串与 HexASCII 数据提取。

结构改写与另存

对样本打补丁,修改 ImageBase、节名与节属性,追加数据并重建重定位,最后更新校验和、另存为新的可执行文件。

安全审计与哈希

综合评估 ASLR / DEP / CFG / SEH 等安全特性,计算全文件与逐节哈希,解析 Authenticode 签名并验签,检查 overlay 附加数据。

多会话分析

为不同文件创建相互独立的会话,各自维护打开状态与内存编辑镜像,可并行执行、互不干扰。

05 / QUICK START

从下载到第一次调用

下载并启动 → 安装工具集 → 执行第一次调用,三步跑通。服务端零依赖,静态链接 /MT,无需安装运行库。

下载并启动

发布包内含 x64 与 x86 两个目录,解压后双击 PEDagger.exe 即后台托盘运行;加 --console 前台运行看输出。

PEDagger.exe            托盘驻留
PEDagger.exe --console  前台运行
PEDagger.exe --port=8947 --readonly

解压即用、无需安装运行库;包内另附 demo 测试样本

安装 PEDagger 工具集

一条命令装好 Python 工具集,内含 SDK 与示例脚本,仅依赖标准库、无需任何第三方包。

CMD> pip install PeDagger==1.0.0

安装后即可 from PeDagger import *,覆盖全部 142 个接口

执行第一次调用

打开 → 读 → 写 → 存 → 关。写操作只改内存镜像,Save 才落盘。

鉴权默认开启,SDK 自动携带内置 KEY;curl 直连需带 X-Auth-Token 请求头

运行环境:Windows 7 及以上,提供 x64 与 x86 两个构建版本,均以 /MT 静态链接运行库, 无需额外安装任何依赖。解析只读文件无需管理员权限;改写位于系统目录下的文件需要提权。 默认监听 8947 端口,可用 --port 指定其他端口,--readonly 开启只读模式。

获取渠道:服务端发布包由 GitHub Releases 提供,Python 工具集由 PyPI 提供(pip install PeDagger==1.0.0),源码见 lyshark/PEDagger。

06 / SDK

第一段分析脚本

下面这段脚本基于随附的 Python SDK 编写:它覆盖全部 142 个接口,仅依赖标准库、无需任何第三方包; 整体采用与项目内既有实现一致的分层设计——统一的配置与鉴权、底层通信基类、按功能拆分的模块类,以及一个对外的聚合客户端。

初始化与多会话
from pedagger_sdk import *

# 初始化 PEDagger 客户端连接
client_interface = PEDaggerClient(address="127.0.0.1", port=8947, api_key="45d3552b12b12cdf2c831344311cf81e")

# 创建客户端会话池
resp = client_interface.session_create()

# 同时打开两个会话
s1 = client_interface.open_file("c://win32.exe", session="session1")
s2 = client_interface.open_file("c://x32.dll", session="session2")

# 查看会话列表
print(client_interface.session_list())

# 分别调用两个会话的 nt_head 方法
res_nt1 = client_interface.nt_head(session="session1")
res_nt2 = client_interface.nt_head(session="session2")

# 打印结果
print(res_nt1)
print(res_nt2)

# 关闭会话
client_interface.session_close(session_id="session1")
client_interface.session_close(session_id="session2")

鉴权头是 X-Auth-Token(GET / 也要带)。 服务端内置默认 KEY 45d3552b12b12cdf2c831344311cf81e,未配置任何 token 时即用它鉴权, 因此 SDK 默认就会带上该 KEY,auth_required=true。

接口浏览器

全部 142 个接口均与 SDK 方法一一对应,支持关键词搜索与 API 类名筛选。 点击任意行 即可展开该接口的 Python 调用、原始 JSON 报文、完整入参与返回字段。

接口SDK 方法API 类名功能说明
没有匹配的接口