Chris1sFlaggin/LCSAJdump

GitHub: Chris1sFlaggin/LCSAJdump

一个基于图分析的架构无关型 ROP/JOP gadget 发现框架,能够识别传统线性扫描器无法检测的非连续指令链。

Stars: 15 | Forks: 0

LCSAJdump Logo # [LCSAJdump](https://chris1sflaggin.it/LCSAJdump) [![PyPI Downloads](https://static.pepy.tech/personalized-badge/lcsajdump?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/lcsajdump) ### *通用基于图的自动化 Gadget 发现框架* [![Status](https://img.shields.io/badge/status-Universal_Framework-orange?style=for-the-badge)](https://github.com/Chris1sFlaggin/LCSAJdump) [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg?style=for-the-badge)](https://opensource.org/licenses/MIT) **LCSAJdump** 是一个静态分析框架,旨在发现 Return-Oriented Programming (ROP) 和 Jump-Oriented Programming (JOP) gadgets。与传统的扫描器不同,LCSAJdump 是**架构无关**的,并采用基于图的方法来发现那些普通线性工具无法察觉的漏洞。
## 为什么选择 LCSAJdump? 常见的 ROP 扫描器在二进制文件的可执行字节上使用线性的“滑动窗口”方法。这种方法在识别 **Shadow Gadgets** 时会系统性失效:即那些通过无条件跳转或条件分支连接非连续内存块的执行链。 LCSAJdump 通过 **LCSAJ (Linear Code Sequence and Jump)** 分析重构 **Control-Flow Graph (CFG)** 克服了这一限制。通过将二进制文件建模为基本块的有向图,该工具可以识别: 1. **连续 Gadgets:** 以控制流转移结束的标准线性序列。 2. **Shadow Gadgets (非连续):** 通过利用线性扫描无法到达的指令来绕过“坏字节”(例如空字节)的复杂链。 ## 关键特性 * **多架构支持:** 原生支持 RISC-V (64GC)、x86-64 和 ARM64,可通过模块化配置文件轻松扩展到其他架构。 * **基于图的分析:** 将 `.text` 段分割为 LCSAJ 基本块,并使用 `NetworkX` 重构流关系。 * **Rainbow BFS 算法:** 专有的从控制流汇点开始的反向广度优先搜索。现已具有 **O(1) 早期丢弃唯一性过滤器** 和 **硬性指令上限**,可防止状态爆炸,即使在密集的 CISC 二进制文件上也能确保超快的分析速度。 * **特定架构的启发式评分:** 基于架构特定特征评估 gadgets 的动态排名系统(例如,对 x86_64/ARM 施加较重的长度惩罚,对关键参数寄存器如 `rdi` 或 `x0` 给予动态奖励)。 * **修剪参数:** 可配置的“Darkness”因子以平衡分析深度和性能,防止循环图中的无限循环。 ## 支持的架构 LCSAJdump 旨在通用。目前支持: * **RISC-V 64-bit (RV64GC):** 完全支持压缩的 16 位指令。 * **x86-64:** 处理可变长度的重叠指令。安全地遍历密集图而不发生内存爆炸。 * **ARM64:** 处理 32 位指令,并通过严格的启发式惩罚深度过滤掉臃肿的 gadgets。 * **其他架构:** 可以通过在 `config.py` 中定义新的配置文件轻松实现。 ## 安装 ### 通过 Pip(推荐) ``` pip install lcsajdump ``` ### 从源码安装(开发) ``` 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):** ``` python LCSAJdump.py ``` **高级分析(指定架构):** ``` python LCSAJdump.py -a riscv64 -d 15 -k 100 -l 20 --verbose ``` ### CLI 选项: [![LCSAJdump Help Demo](https://asciinema.org/a/fC37Fuprs5FHvOKi.svg)](https://asciinema.org/a/fC37Fuprs5FHvOKi) ## 输出示例 以下是在所有原生支持的架构上对 `libc.so.6` 运行最大深度 (`-d 25`) 和修剪 darkness (`-k 10`) 的基准测试: **1. x86_64 分析** [![LCSAJdump x86-64 Demo](https://asciinema.org/a/fi7HWIwX9MlGCpod.svg)](https://asciinema.org/a/fi7HWIwX9MlGCpod) **2. ARM64 分析** [![LCSAJdump ARM64 Demo](https://asciinema.org/a/Ylbm8fxaRPaV496A.svg)](https://asciinema.org/a/Ylbm8fxaRPaV496A) **3. RISC-V (64-bit) 分析** [![LCSAJdump RISC-V Demo](https://asciinema.org/a/bCrwbGaUnxuUMAiy.svg)](https://asciinema.org/a/bCrwbGaUnxuUMAiy) ## 贡献(欢迎 Fork!) 该框架对新实现持开放态度。要添加新架构: 1. **Fork** 该仓库。 2. 打开 `lcsajdump/core/config.py`。 3. 在 `ARCH_PROFILES` 字典中添加新的配置文件,定义目标架构(例如 x86_64)的跳转助记符、返回助记符和寄存器。 4. 提交 **Pull Request**。 ## 许可证 本项目基于 **MIT** 许可证发布。有关详细信息,请参阅 [LICENSE](https://www.google.com/search?q=LICENSE) 文件。 ## 项目链接 访问项目网页:[LCSAJdump web page](https://chris1sflaggin.it/LCSAJdump)
Chris1sflaggin 制作,作为自动化 Gadget 发现的研究项目。
标签:ARM64, CFG, DNS 反向解析, gadget发现, Hakrawler, JOP, LCSAJ, pwn, Python, RISC-V, ROP, x86-64, 二进制安全, 云安全监控, 云资产清单, 代码重用攻击, 图分析, 影子gadget, 控制流图, 无后门, 架构无关, 特权检测, 跨架构, 逆向工具, 逆向工程, 静态分析, 面向跳转编程, 面向返回编程