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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
ghidra-llm-pipeline — 用于 C 语言重实现的确定性 PyGhidra 提取、分类与本地 LLM 编译器后端流水线。 | Kitploit
工具/GitHubGitHub/happytotoro116/ghidra-llm-pipeline
静态分析代码分析逆向工程脚本与自动化二进制分析机器学习AI 辅助逆向AI 安全
GitHubhappytotoro116/ghidra-llm-pipeline

ghidra-llm-pipeline

用于 C 语言重实现的确定性 PyGhidra 提取、分类与本地 LLM 编译器后端流水线。

查看仓库
41401天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

ghidra-llm-pipeline

感谢你下载我的 Ghidra + LLM 流水线。

这是我的第一份 README。ASL(美国手语)是我的第一语言,所以我的英语并不完美。我已尽了最大努力。


----- 我为什么做它 -----

我热爱一款从小就玩的旧 PC 模拟游戏,我想在底层对它进行改进。

研究 OpenRA 和 OpenTTD 这类开源游戏让我明白了一点:爱好者的重实现并不是要拿到原始源代码。而是要构建一个全新的开源版本,能够加载原版的资源。这样任何人都可以扩展它或为它做贡献。

为了完成这项工作,我把两种 AI 结合使用:

  • 云端 AI 用于知识和建议(以及 Python 脚本方面的帮助)。
  • 本地 LLM 用于繁重的工作(编写代码)。

----- 流水线 -----

  1. PyGhidra 将程序导出为汇编和 C 伪代码。
  2. 头文件是最重要的部分。每个函数都会得到一个头文件,其中列出它使用的函数和全局变量。
  3. 分组:Python 将相互调用的函数归入“类”。
  4. 分诊:Python 读取每个组使用的字符串,以推测它的用途。
  5. 角色:脚本列出每个类的可能角色,并生成工作队列。

----- 标签(分诊) -----

每个函数都会得到一个标签。这能节省大量时间,因为我不会把精力浪费在大量操作系统和运行时垃圾上。

|-----------|------------------------------------------------------------------------------------------------------------------

标签含义
KEEP游戏自身的逻辑(例如飞行模型、伤害模型、TrackIR)
WRAP面向 Java 的胶水代码,调用操作系统或输入 API:保留签名,编写新的函数体。
(IL-2 1946 是一个有趣的引擎:C++ 和 Java 结合在一起。)
REPLACE旧的 C 运行时、分配器、thunk:由编译器或操作系统提供,因此新的 64 位版本不需要它们
UNKNOWN不明确:手动查看
-----------------------------------------------------------------------------------------------------------------------------

在我的测试程序中,大约 44% 的函数是 REPLACE,因此它们从来不需要被转换。


----- 汇编,而非 C 伪代码 -----

一开始我信任 C 伪代码能给出所有答案。那太天真了。它是 Ghidra 对汇编的解读, 而且它会猜测(变量类型、丢失的参数)。

汇编才是原始真相。它没有变量类型,但它保留了每个函数的精确行为。 因此脚本读取汇编,并将其转换为 C 风格形式的蓝图。Ghidra 的 C 仅作为提示保留。


----- LLM 是编译器,而非汇编器 -----

我早期的测试使用本地 LLM(Qwen 2.5 Coder、DeepSeek Coder V2 Lite、Mellum 2)直接读取汇编。 它从未可靠地工作过。它们会产生幻觉,因为它们被设计用来编写代码,而不是读取原始机器码。

在多次失败的实验之后,我拆分了工作:

  • Python 是汇编器。它读取汇编并编写蓝图:精确的事实、寄存器级的 C 草稿和一份检查清单。
  • LLM 是编译器。它根据蓝图自由地编写真正的 C。
  • Python 检查答案(文本检查和真正的编译器)并修复小失误。

注意:Python 如何检查答案

  • 文本检查:函数名、蓝图中的每个调用、全局变量和字符串、 循环、步长、比较的常量、返回值,以及没有遗留寄存器名或臆造的名称。

  • gcc 编译检查:代码用 gcc 编译(仅做语法检查,不运行任何内容)。 这帮助很大。在早期的一次运行中,文本检查通过了 Mellum 2 的答案, 但它们全都没能编译通过,原因是一段写在注释之外的头部注释。 gcc 能捕捉到文本检查看不到的问题:未声明或重复声明的变量、 错误的类型,以及损坏的花括号或分号。只有当文本检查和编译 都通过时,函数才算 PASS。gcc 并不能证明逻辑正确,所以我仍然 会对照蓝图阅读代码。

  • 如果某项检查失败,LLM 会收到失败项列表,并再尝试一次。

  • Python 会自行修复小疏漏,无需 LLM 介入:它为每个变量声明一次, 将零散的头部行包裹进注释,让最后一个 return 返回正确的结果, 并补上 include 和声明。

这份检查清单是在我看到 LLM 在超长函数上失败之后才加入的。它的运作方式就像飞行员在 起飞和降落前使用的检查清单。Python 根据函数生成清单,并对照清单检查答案。在我的测试中, 长函数开始通过,运行速度也变快了。


----- 本仓库包含什么 -----

|-------------------|---------------------------------------|---------------------------------------------

文件夹功能阅读
ghidra_pipeline转储、分组、分类、角色ghidra_pipeline/INSTRUCTION.txt
llm_pipeline蓝图与 LLM 运行器(v3)llm_pipeline/INSTRUCTION_BLUEPRINT_LLM.txt
-------------------------------------------------------------------------------------------------------

从 ghidra_pipeline 开始,当你准备好使用本地 LLM 时,再转到 llm_pipeline。


----- 快速开始 -----

首先,在 PyGhidra 中分析你的程序,并运行 PyGhidra Scripts/decompile_full_dump.py。 两个 INSTRUCTION 文件说明了文件夹的设置方式。然后:

首先,在 PyGhidra 中分析你的程序,并运行 PyGhidra Scripts/decompile_full_dump.py。 两个 INSTRUCTION 文件说明了文件夹的设置方式。然后:

python .\make_full_lite_v2.py --in . --out .\OUT
python .\triage_evidence_v2.py --lite .\OUT\LITE_AC
python .\build_roles_v2.py --triage .\OUT\TRIAGE

python .\blueprint_v3.py --group ".\SOURCE\LITE_AC\<GroupName>" --out ".\G_<GroupName>\BLUEPRINT_v3"
python .\run_blueprint_llm_v3.py --bp ".\G_<GroupName>\BLUEPRINT_v3" --out ".\G_<GroupName>\RUN1_v3_<model>" --model <model name>

你需要带有 PyGhidra 的 Ghidra、Python 3、LM Studio(已加载一个模型)以及 gcc(推荐,用作编译检查)。


----- 目前的结果 -----

  • 来自一个 32 位 Windows 程序的一组 6 个函数,三个本地模型。
  • 三个模型都给出了逻辑正确的代码(我对照蓝图阅读过)。 自动检查器分别通过了 6/6、6/6 和 5/6。
  • 我会继续改进它。这是第一个版本。

----- 限制 -----

  • 仅在一个程序上测试过。请尝试其他程序。
  • PASS 表示检查和编译都正常。它并不能证明逻辑正确。
  • 仅支持 32 位程序(地址按 8 个十六进制数字读取)。
  • 指针被类型化为 32 位整数。64 位构建需要指针大小的类型。
  • 分类标签只是猜测,不是证据。
  • 脚本中的某些设置是针对我的测试程序的示例。请为你的程序进行设置。
  • 请不要仅凭 PASS 就相信结果。如果你有 Claude 之类的云端 AI,请将 LLM 输出连同 SOURCE 文件夹中的原始汇编和 C 伪代码一起交给它,并让它 逐个函数进行比较。这样就能判断代码是否真正通过。我就是这样检查自己的 结果的。只上传你被允许分享的文件。

----- 不含游戏文件 -----

本仓库仅包含脚本和文档。不含游戏文件、代码或数据。请仅在你拥有的程序上使用它, 并遵守适用于这些程序的规则。


----- 贡献 -----

在另一个游戏上试用它,并告诉我哪些有效、哪些无效。欢迎提出想法和 改进建议。

你可以自由地取用这些脚本并进一步改进它们。Apache 2.0 许可证 允许你使用、修改和分享它们,所以请 fork 它、制作你自己的版本,并分享 你学到的东西。

我最喜欢的词是去中心化。对我来说,它意味着基于社区的分享和 支持,我们共同改进已有的东西。我希望这能为 爱好者重实现(逆向工程)和 LLM 开发带来新的想法。


----- 许可证 -----

Apache License 2.0。参见 LICENSE 和 NOTICE。

Copyright 2026 Ryu116(又名 HappyTotoro116)

下载工具