Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

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

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

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
LCSAJdump — 一种基于机器学习的图驱动多架构ROP Gadget检测方法 | Kitploit
工具/GitHubGitHub/chris1sflaggin/lcsajdump
静态分析漏洞利用逆向工程Shellcode二进制分析机器学习论文与研究学习与教育Payload 开发
GitHubchris1sflaggin/lcsajdump

LCSAJdump

一种基于机器学习的图驱动多架构ROP Gadget检测方法

查看仓库
272262个月前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
网站

LCSAJdump Logo

LCSAJdump

PyPI Downloads

Universal Graph-Based Framework for Automated Gadget Discovery

Status License: MIT



LCSAJdump 是一个静态分析框架,旨在发现面向返回编程(ROP)和面向跳转编程(JOP)的 gadget。与传统的扫描器不同,LCSAJdump 是架构无关的,并采用基于图的方法揭示常见线性工具无法看到的漏洞。


为什么选择 LCSAJdump?

常见的 ROP 扫描器使用线性“滑动窗口”方法扫描二进制文件的可执行字节。这种方法系统地无法识别暗影 Gadget:那些遍历由无条件跳转或条件分支连接的非连续内存块的执行链。

LCSAJdump 通过 LCSAJ(线性代码序列和跳转)分析重建**控制流图(CFG)**来克服这一限制。通过将二进制文件建模为基本块的有向图,该工具识别出:

  1. 连续 Gadget: 以控制流转移结束的标准线性序列。
  2. 暗影 Gadget(非连续): 复杂的链,利用在线性扫描中不可达的指令来绕过“坏字节”(例如空字节)。

主要特性

  • 多架构支持: 原生支持 RISC-V(64GC)、x86-64 和 ARM64,可通过模块化配置文件轻松扩展到其他架构。
  • 基于图的分析: 将 .text 节分割为 LCSAJ 基本块,并通过自定义构建的反向控制流图(轻量级邻接表示,无需重量级图依赖)重建流关系。
  • 彩虹 BFS 算法: 专有的从控制流汇点向后的广度优先搜索。现在具有 O(1) 早期丢弃唯一性过滤器 和 硬上限指令限制,以防止状态爆炸,即使在密集的 CISC 二进制文件上也能确保超快分析。
  • 惰性图构建: 图构建仅保留在 --depth 跳数内从 gadget 尾部可达的节点,显著减少了大型二进制文件(如 libc)的内存和构建时间,同时产生相同的结果。
  • 两阶段排序引擎: 结合了超快速启发式基线(通过 Optuna 进行贝叶斯优化)和深度学习 LightGBM ML 模型,该模型利用结构和语义特征来优化 gadget 质量。
  • 零开销推理: ML 模型原生集成并默认运行,在几秒钟内处理数万个节点。它作为一个高效的过滤器,拒绝噪声跳转并返回干净、高度可控的 gadget 链。托管在 Hugging Face 上。
  • 剪枝参数: 可配置的“黑暗度”因子以平衡分析深度和性能,防止循环图中的无限循环。

支持的架构

(参见 基准测试)。

LCSAJdump 被设计为通用框架。当前支持:

  • RISC-V 64 位(RV64GC): 完全支持压缩 16 位指令。
  • x86-64: 处理可变长度重叠指令。安全地导航密集图而不会内存爆炸。
  • ARM64: 处理 32 位指令并通过严格的启发式惩罚深度过滤膨胀的 gadget。
  • 其他架构: 可以通过在 config.py 中定义新的配置文件轻松实现。

安装

通过 Pip(推荐)

root@kitploit:~
pip install lcsajdump

从源码安装(开发)

root@kitploit:~
git clone [https://github.com/Chris1sFlaggin/LCSAJdump.git](https://github.com/Chris1sFlaggin/LCSAJdump.git)
cd LCSAJdump
pip install -r requirements.txt


使用

LCSAJdump 提供了一个强大的 CLI,用于精确的二进制分析:

标准分析(默认 RISC-V):

root@kitploit:~
python LCSAJdump.py <path_to_binary>

高级分析(指定架构和输出文件):

root@kitploit:~
lcsajdump -a riscv64 -d 15 -k 10 -l 20 -o gadgets.txt <path_to_binary>

以 JSON 格式导出并指定坏字符过滤器:

root@kitploit:~
lcsajdump -a x86_64 -d 20 -k 5 -b "000a0d" --json -o gadgets.json <path_to_binary>

注意: 使用 -o 在 --json 之后将 JSON 保存到文件。不指定 --json 时,-o 保存纯文本。

保存纯文本输出:

root@kitploit:~
lcsajdump -a riscv64 -d 15 -k 10 -l 20 -o gadgets.txt <path_to_binary>

分析所有可执行节:

root@kitploit:~
lcsajdump --all-exec -d 25 -k 10 -l 30 <path_to_binary>

强制严格算法排序(绕过 ML):

root@kitploit:~
lcsajdump --algo <path_to_binary>

CLI 选项



准确性与基准测试

LCSAJdump 得到位于 benchmarkTests/ 目录中的严格、增量验证的测试套件的支持。

通过 14 次主要的语义特征工程迭代,混合模型已经学会了根据实际内存副作用(通过 angr 符号执行提取)而不是纯语法启发式来区分 gadget。

通过群体感知的 5 折交叉验证(训练期间从未见过的测试二进制文件)进行评估,排序器实现了 NDCG@1 = 0.914 ± 0.047 和 NDCG@10 = 0.922 ± 0.052,这意味着最有用的 gadget 始终被放置在输出的顶部。两阶段引擎成功优先处理干净的栈弹出序列和 ret2csu 样式的调用,同时严重惩罚那些欺骗传统静态扫描器的易崩溃固定偏移跳转。


开发者与机器学习指南

该仓库结构旨在支持最终用户和机器学习研究人员。

  • 生产引擎: 核心 CLI 无缝集成推理引擎,使用托管在 Hugging Face 上的模型,无需手动加载模型。
  • ML 管线: lcsajdump/ml_study/ 目录包含用于训练模型的完整管线:
    • build_dataset.py:从 CTF 二进制文件语料库中提取结构和语义特征。
    • train_model.py:训练 LightGBM LambdaRank 模型并输出 .pkl 模型。
    • kfold_cv.py:使用 K 折交叉验证验证数据集。

贡献(欢迎 Fork!)

该框架欢迎新的实现。要添加新架构:

  1. Fork 该仓库。
  2. 打开 lcsajdump/core/config.py。
  3. 在 ARCH_PROFILES 字典中添加一个新的配置文件,为目标架构(例如 x86_64)定义跳转助记符、返回助记符和寄存器。
  4. 提交一个拉取请求。

许可证

本项目基于 MIT 许可证发布。有关详细信息,请参见 LICENSE 文件。


项目链接

访问项目网页:LCSAJdump 网页


由 Chris1sflaggin 制作,作为自动化 Gadget 发现的研究项目。
下载工具
标志类型默认值描述
-a, --archTEXTauto目标架构(auto、riscv64、x86_64、arm64)。从 ELF 头部自动检测。
-d, --depthINTEGER20LCSAJ 块中的最大搜索深度。控制链长度。
-k, --darknessINTEGER5剪枝阈值——每个节点的最大访问次数。值越高,gadget 越多,扫描越慢。
-l, --limitINTEGER10输出中显示的 gadget 最大数量。
-s, --min-scoreINTEGER0gadget 出现在结果中的最小启发式分数。
-i, --instructionsINTEGER15单个 LCSAJ 节点中包含的最大指令数。
-v, --verboseFLAG—启用详细输出,显示每个 gadget 的详细信息。
-o, --outputPATH—将输出写入文件。默认纯文本;与 --json 一起使用以输出 JSON。
-b, --bad-charsTEXT—要从 gadget 地址中过滤的十六进制字节(例如 "000a0d")。
--jsonFLAG—以结构化 JSON 格式输出 gadget。与 -o 结合使用以保存到文件。
--all-execFLAG—分析所有可执行节,而不仅仅是 .text。
-al, --algoFLAG—使用严格算法排序(绕过 ML)。
--versionFLAG—显示已安装版本并退出。
--helpFLAG—显示帮助信息并退出。