Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
windbg-decompile-ext — WinDbg x64扩展,用于反汇编活动函数,并使用LLM生成经过验证的伪代码。 | Kitploit
工具/GitHubGitHub/kernullist/windbg-decompile-ext
静态分析动态分析 (沙盒)代码分析逆向工程调试器恶意软件分析二进制分析学习与教育AI 辅助逆向固件分析二进制利用
11211643个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
GitHub
kernullist/windbg-decompile-ext

windbg-decompile-ext

WinDbg x64扩展,用于反汇编活动函数,并使用LLM生成经过验证的伪代码。

查看仓库
分享

通过 LLM 实现的 Windbg 反编译扩展

本地反编译查看器

截图

该项目是一个 Windows x64 WinDbg 扩展骨架,它通过名称或地址解析函数,重建确定性的控制流视图,并直接从扩展中询问 LLM 以生成伪代码。

布局

  • src/extension:WinDbg 扩展 DLL 和 !decomp 命令。
  • src/shared:扩展共享的 JSON、分析器、协议和验证器代码。
  • scripts:构建和供应商复制辅助工具。
  • third_party/dbgeng:可选的供应商 dbgeng.h 和 dbgeng.lib 副本。
  • third_party/zydis:供应商提供的稳定版 Zydis 源代码树,存在时默认使用。

当前范围

  • 仅限 x64 的假设
  • 通过 DbgEng 进行的实时内存分析
  • 基于 Zydis 的结构化反汇编,用于稳定的助记符/操作数恢复
  • 符号区域、展开和启发式函数范围恢复
  • 类似 SSA-lite 的恢复,用于传入寄存器参数、栈槽局部变量、合并候选和规范化分支条件
  • 具有 def-use 提示、规范化副本/常量表达式和死定义标记的低级 IR 值事实
  • 块级值状态事实,用于跨寄存器和栈局部变量收敛的活跃输入/输出到达定义
  • 基于支配者的控制流区域事实,用于自然循环、if/else 候选、switch 候选、循环归纳元数据和 switch 范围/默认元数据
  • x64 ABI 事实,用于影子/家庭槽位、栈指针增量、序言/尾声识别、无返回调用、尾调用、thunk、导入包装器候选以及恢复的寄存器/栈调用参数
  • 支持 SIMD/FP 的 Microsoft x64 参数恢复,适用于 xmm0 至 xmm3,带有向量零惯用法保护以避免虚假传入参数
  • 类型恢复提示,用于指针类值、栈局部变量、字段偏移、缩放索引数组、枚举类比较、位标志测试和 vtable 候选
  • 惯用法和库模式事实,用于内存/字符串辅助函数、安全 cookie、栈探测、分配器、聚合初始化器和 RIP 相对全局/导入加载
  • 调用目标事实,用于直接调用、寄存器/内存间接调用、虚拟调用/vtable 偏移候选、返回类型、参数模型、副作用、内存效果、所有权提示和置信度
  • OLLVM 风格的混淆事实,用于控制流平坦化调度器、恢复的语义边、不透明谓词死边和标量指令替换惯用法
  • 去混淆准备事实,以及 /deobf:on|off 控制是否允许恢复的混淆事实指导伪 C 重写
  • 证据图事实,将高信号分析器、PDB 和观察行为事实链接到指令/块基础
  • 先优化提示,使用分析器生成的伪代码骨架、针对 CFG 区域、条件和重要块的图感知摘要、排名的高信号事实选择以及大型事实集的扩散采样
  • WinDbg DML 链接,用于在输出回调支持 DML 时导航入口/基本块/证据/调用目标
  • 分离的结果模式,包括简要、证据解释、仅事实、调试提示、JSON 和数据模型样式输出
  • 用户修正开关,用于无返回、类型、字段和重命名提示
  • 会话感知分析策略事实,适用于实时、转储、内核和类 TTD 会话
  • 来自当前调试器上下文的观察行为事实,包括寄存器参数样本、内存热点和(可用时)TTD 查询建议
  • RIP 相对字符串/全局/IAT 分类和调用目标签名提示,用于 LLM 提示
  • 加载的 PDB 感知原型、作用域参数/局部变量、字段、枚举和源代码行提示,用于 LLM 提示
  • 直接从扩展进行的进程内 LLM 调用
  • OpenAI 兼容的 HTTP 适配器或确定性模拟回退
  • LLM 输出的验证器传递

WinDbg 使用

从构建输出加载扩展,然后对符号或地址运行 !decomp:```text .load C:\path\to\decomp.dll !decomp /doctor !decomp module!FunctionName !decomp 0x7ffb`12345678

当设置看起来有问题时,或者启用 LLM provider 之前,使用 `/doctor`:```text
!decomp /doctor
!decomp /doctor:net
  • /doctor 不需要目标且不调用提供者。它报告配置路径/加载状态、提供者/模型/端点摘要、认证存在性(不含机密)、超时/令牌/分块设置、DML支持、会话类/限定符、处理器类型和PDB注意事项。
  • /doctor:net 会被当作显式网络检查请求接受,但目前报告跳过提供者ping。该扩展不会从doctor模式执行网络探测。
  • 机密值(如API密钥、Bearer令牌、刷新令牌和URL查询字符串)不会打印。

靶标可以是公有/私有符号、导出的函数名或地址。如果靶标解析为函数内的地址,扩展会尝试从符号、展开数据和控制流启发式方法中恢复所在函数范围。对包含空格的靶标加引号:```text !decomp "my module!Function With Spaces"

正常命令路径执行本地分析、构建分析器事实、可选地调用已配置的LLM端点、根据恢复的证据验证响应,并输出伪C代码以及置信度、警告和不确定性注释:```text
!decomp ntdll!RtlAllocateHeap
!decomp kernel32!Sleep
!decomp game.exe!CheckIntegrity

Normal(正常)、brief(简要)和 explain(解释)输出模式包含一个紧凑的进度流,即使在未使用 /verbose 时也是如此。长 LLM 运行会显示本地分析完成、分块进度、重试通知、合并启动、验证以及 Ctrl+Break 取消提示。机器可读模式(例如 /view:json、/view:facts、/view:prompt 和 /view:data)会抑制进度行和 DML 辅助链接,以便脚本仅接收所请求的有效载荷。

使用 /view:* 来选择你想要查看的内容。这保持了命令界面的简洁性:一个选项控制所有输出模式。```text !decomp /view:brief module!HotPath !decomp /view:explain module!BranchyFunction !decomp /view:json module!FunctionName !decomp /view:facts module!FunctionName !decomp /view:prompt module!FunctionName !decomp /view:data module!FunctionName !decomp /view:analyzer module!FunctionName !decomp /view:plan module!FunctionName

- `brief` 打印目标、置信度、摘要以及第一个不确定性或验证器警告。
- `explain` 添加证据、控制流、类型提示、观察到的行为和调用目标部分。
- `json` 打印机器可读的请求和响应 JSON。
- `facts` 仅打印分析器事实并禁用 LLM 路径。
- `prompt` 打印精确的系统提示、用户提示和提示事实。它会禁用 LLM 调用。
- `data` 打印一个稳定的 JSON 快照,旨在用于 WinDbg JavaScript/NatVis 风格的自动化。
- `analyzer` 渲染确定性仅分析器伪代码路径,而不调用 LLM。
- `plan` 执行本地分析并打印预检计划,而不调用 LLM 或更新结果缓存。它包括目标/模块/范围计数、PDB 可用性、会话策略、估计的分块、与提示大小相关的计数以及实用建议。

当命令似乎卡住或你想看到完整的进度流时,使用 `/verbose`:```text
!decomp /verbose module!SlowFunction
!decomp /verbose /view:json module!SlowFunction
  • /verbose 会打印本地阶段,例如目标解析、函数范围恢复、字节读取、反汇编、分析器事实构建、PDB/会话增强、伪代码标记化以及验证器结果。
  • 在 LLM 模式下,/verbose 还会打印提示大小、请求令牌预算、HTTP 连接/发送/接收阶段、响应块大小、完成原因、提取的模型 JSON 预览、重试次数以及验证器反馈的重试决策。
  • API 密钥不会打印。请求/响应日志显示大小和简短预览,而不是完整的头部或完整的提示正文。
  • /verbose 用完整跟踪替换紧凑进度流。在紧凑进度行不足以诊断时间花费时使用它。
  • 在长时间运行的 !decomp 命令期间,在 WinDbg 中按 Ctrl+Break 请求取消。扩展程序在本地分析阶段和等待 LLM 工作线程之间检查中断,然后要求活动的同步 HTTP I/O 停止。

旧版别名例如 /brief、/explain、/json、/facts-only、/debug-prompt、/data-model、/dx 和 /no-llm 仍然适用于旧脚本,但新示例使用 /view:*。

窗口查看器:```text !decomp /view:window module!FunctionName !decomp /view:window /view:explain module!FunctionName

- `/view:window` 对目标执行正常的 `!decomp` 结果路径,并在单独查看器中打开完整的渲染结果。
- 该查看器使用与控制台路径相同的响应渲染器,然后在找到调试器窗口时,打开一个由调试器窗口拥有的原生 Win32 无模式工具窗口。
- 调试器输出报告原生查看器窗口句柄。如果无法创建查看器窗口,命令会打印警告并回退到正常的控制台结果。
- 仅限 DML 的链接在查看器中呈现为带有命令字符串的文本标签。当 RichEdit 可用时,窗口使用 GitHub 风格的 RTF 布局,包含章节标题、元数据样式和伪代码高亮;否则回退为纯文本。
- 当当前会话有之前的缓存结果时,查看器会显示左侧历史列表,以便您在当前输出和之前的反编译结果之间切换,而无需重新运行分析。
- `/view:json`、`/view:facts`、`/view:prompt` 和 `/view:data` 仍保持为机器可读的控制台输出,不会重定向到查看器。

大型函数:```text
!decomp /limit:deep module!LargeFunction
!decomp /limit:huge module!VeryLargeFunction
!decomp /limit:12000 module!VeryLargeFunction
!decomp /timeout:120000 module!SlowFunction
  • /limit:deep 将指令上限提升至 8192。
  • /limit:huge 将指令上限提升至 16384。
  • /limit:N 设置显式的指令上限。
  • /timeout:MS 覆盖本次调用的请求超时时间。
  • LLM 分块由 decomp.llm.json 控制;命令行指令上限控制扩展在提示前尝试恢复多少本地代码。
  • 遗留的 /deep、/huge 和 /maxinsn:N 仍然受支持。

混淆感知反编译:```text !decomp /deobf:on module!FlattenedFunction !decomp /deobf:off module!FlattenedFunction !decomp /view:facts /deobf:off module!FlattenedFunction

- `/deobf:on` 为默认选项。分析器仍会发出原始事实,但高置信度的 OLLVM 风格分发器恢复、不透明死边证明、替换习语以及语义 CFG 覆盖层可能会指导提示事实、合并策略、验证器冲突策略以及结构化伪 C 恢复。
- `/deobf:off` 保留 `obfuscation`、`semantic_control_flow` 和 `deobfuscation_readiness` 事实可见,但禁用重写安全操作,保持控制流结构基于原始 CFG,并告知提示/合并/验证器路径保留原始混淆形状。
- 当你希望直接检查分发器、虚假分支或替换表面,而不是让扩展恢复反混淆结构时,请使用 `/deobf:off`。
- `/deobfuscation:on|off` 作为更长的别名被接受。

缓存和重放助手:```text
!decomp /view:json module!FunctionName
!decomp /last:json
!decomp /view:explain module!FunctionName
!decomp /last:explain
!decomp /view:facts module!FunctionName
!decomp /last:facts
!decomp /view:data module!FunctionName
!decomp /last:data
!decomp /view:prompt module!FunctionName
!decomp /last:prompt
!decomp /history
!decomp /refresh module!FunctionName
!decomp /last:2:explain
!decomp /last:2:json
  • /last:json 打印上一次的请求/响应 JSON,无需重新运行分析。
  • /last:explain 重新渲染上一次的完整结果并包含解释部分,无需重新运行分析或调用 LLM。
  • /last:facts 打印上一次结果中的分析器事实,无需重新运行分析。
  • /last:data 打印上一次的数据模型快照,无需重新运行分析。
  • /last:prompt 打印上一次的提示转储,无需重新运行分析。
  • /history 列出内存中的结果环形缓冲区。索引 1 是最新的结果。
  • /refresh <target> 绕过该目标持久化制作的回放,运行全新的本地分析和 LLM 分析,并在成功获得 LLM 支持的结果后替换保存的制作。
  • /last:N:explain、/last:N:json、/last:N:facts、/last:N:data 和 /last:N:prompt 按历史索引回放较旧的缓存结果,无需重新运行本地分析或调用 LLM。
  • /last:* 模式是终端回放命令。如果在同一命令中存在目标,则回放缓存的制作,并且不会为该目标启动本地分析或 LLM 请求。
  • 内存中缓存的制作仅存在于已加载的扩展实例中。结果历史保留最新的 8 个结果,并在 WinDbg 卸载扩展或进程退出时消失。
  • 成功的 LLM 支持的结果也会自动保存在加载的 decomp.dll 旁边的 artifact 文件夹下。操作员无需单独执行保存命令。
  • 持久化制作包括 request、response、data_model、debug_prompt 以及一个包含 Win32/KD 版本值、构建字符串、可选的 NtBuildLab 和构建指纹的 kernel_build 对象。
  • 在后续会话中,运行相同的 !decomp <target> 命令会自动在目标解析和函数 RVA 恢复后检查 artifact\<kernel_build>\... 路径。如果保存的 kernel_build 与当前操作系统构建匹配,则该扩展会回放制作,而无需读取函数字节、运行本地分析器传递或调用 LLM。
  • 缺少、无法读取或匹配失败的持久化制作均被视为缓存未命中。命令将回退到全新分析,并且仅在成功获得 LLM 支持的结果后覆盖制作。
  • 正常输出中的 DML 操作链接使用这些缓存的 /last:* 视图,因此点击 explain、json、facts、prompt 或 data-model 不会启动新的反编译运行。
  • 旧版的 /last-json、/last-explain、/last-facts、/last-data-model、/last-dx 和 /last-prompt 仍然受支持。

DML 导航:

  • 当 WinDbg 报告当前输出回调支持 DML 时,伪代码会使用配置的 DML 颜色槽进行语法高亮显示。
  • 正常输出包含一个 actions 行,其中包含针对同一目标的可点击 explain、json、facts、prompt、data-model 和 history 链接。
  • 正常输出还包含一个 nav 行,其中包含入口反汇编、入口断点和最新制作回放链接。
  • 入口地址、基本块、证据块、控制流区域、类型提示点、观察到的内存热点点、TTD 查询建议和直接调用目标在扩展拥有足够地址信息时变为可点击链接。
  • 不确定性和验证器警告会链接到最佳恢复的证据位置,前提是原因可以映射到分支、循环、开关、无返回调用、返回指令或函数入口。
  • 如果当前输出路径不支持 DML,扩展会自动回退到纯文本。分析结果相同,仅呈现方式不同。

会话感知和观察到的行为细节:

下载工具