3MPER0RR/Reverse-LLM-analysis
GitHub: 3MPER0RR/Reverse-LLM-analysis
一个利用大语言模型自动分析二进制文件并生成可读报告的静态逆向工程工具。
Stars: 1 | Forks: 0
# RVLLM 分析
基于大语言模型的静态逆向工程工具。能够反汇编ELF和PE二进制文件,识别有意义的代码模式,并使用大语言模型以通俗易懂的英语解释代码功能。
输入未知二进制文件,输出Markdown分析报告。
```
[*] loading test.exe
[*] format=PE arch=x86-64 entry=0x1400011ab
[*] 312 symbols/imports resolved
[*] .text: 255676 bytes at 0x140001000
[*] 566 strings
[*] 65249 instructions disassembled
[*] 47 unique hotspots
[*] block 0: indirect_call (40 insns @ 0x1400011ab)
...
[+] summary : Windows API call sequence, likely involved in initialization
[+] detail : The code sets up a stack frame and calls two indirect functions
via RIP-relative addressing, consistent with MSVC-compiled code
interacting with COM or shell components.
[+] patterns: Windows API invocation, stack frame setup, indirect call
[+] symbols : KERNEL32!AcquireSRWLockExclusive, USER32, COMCTL32
[+] report written: rvllm_out/test.exe_a788dd22.md
```
## 功能特性
- **自动检测** — 通过魔术签名自动识别ELF或PE格式,无需额外标志
- **PE格式支持** — 解析导入目录表,将导入解析为 `KERNEL32!VirtualAlloc` 格式
- **ELF格式支持** — 解析 `.dynsym`/`.dynstr` 节,解析libc导入,在符号剥离的二进制文件上启用回退机制
- **原始结构体解析** — 无需pyelftools或pefile库,仅使用 `struct` 模块实现
- **热点检测** — 找出值得分析的代码区域:外部调用、分支条件、批量内存操作、间接调用、结构体访问
- **多后端大语言模型** — 支持Groq(默认)、Claude、OpenRouter,一行配置即可切换
- **Markdown报告** — 每个二进制文件生成独立报告,包含字符串提取、反汇编代码和各代码块的LLM分析
## 安装说明
```
git clone https://github.com/3MPER0RR/Reverse-LLM-analysis
cd Reverse-LLM-analysis
python3 -m venv env
source env/bin/activate
pip install capstone requests
```
已在Python 3.10+、macOS和Linux系统上测试通过。
## 使用方法
```
# 分析 PE
python3 rvllm.py target.exe --backend groq
# 分析 ELF
python3 rvllm.py target_elf --backend groq
# 使用 Claude 代替 Groq
python3 rvllm.py target.exe --backend claude
```
报告将输出至 `rvllm_out/_.md` 文件。
## 配置方式
编辑 `rvllm.py` 文件顶部:
```
API_KEYS = {
"claude": "sk-ant-...",
"groq": "gsk_...",
"openrouter": "sk-or-...",
}
ACTIVE_BACKEND = "groq" # default backend
BLOCK_WINDOW = 40 # instructions around each hotspot
MAX_BLOCKS = 3-6 # max blocks sent to LLM per run (cost control)
OUTPUT_DIR = "./rvllm_out"
```
使用Groq免费层时,建议将 `MAX_BLOCKS` 设为3-7,并在调用间添加延时以避免频率限制:
```
import time
# 在 run() 中,report.write_block(...) 之后
time.sleep(1.5)
```
## 支持格式
| 格式 | 架构 | 符号信息 |
|--------|--------------------|----------------------|
| ELF64 | x86-64、AArch64 | `.dynsym` / `.dynstr` |
| PE32+ | x86-64 | 导入目录表 |
符号剥离的ELF文件将回退到PT_LOAD段进行代码提取。
UPX、Themida等加壳的PE二进制文件暂不支持——需先手动脱壳。
## 热点类型
| 类型 | 描述 |
|------------------|-------------------------------------------|
| `call:` | 调用已知外部函数(read、recv、malloc等) |
| `indirect_call` | 通过寄存器或内存间接调用——函数指针、虚表调用 |
| `branch_condition` | cmp/test + 条件跳转链——解析器或验证逻辑 |
| `bulk_memop` | rep movs/stos——缓冲区复制或初始化 |
| `struct_access` | 带比例因子的lea——结构体或数组遍历 |
## 输出内容
报告包含:
- 二进制元数据(MD5、架构、.text节大小、指令数量)
- 从 `.rodata` / `.rdata` 提取的字符串
- 每个代码块:单行摘要、技术说明、模式特征、引用符号、完整反汇编代码
## 已知限制
- 暂不支持PE32(x86 32位),仅支持PE32+(x86-64)
- 无跨过程分析——各代码块独立分析
- 内部调用(`call 0x140001234`)无法解析为函数名
- 加壳或混淆的二进制文件需先手动脱壳
## 依赖项
```
capstone >= 5.0
requests >= 2.28
python >= 3.10
```
无其他依赖。ELF和PE解析完全使用标准库 `struct` 模块实现。
标签:Capstone, ELF文件, LLM后端, LLM辅助解释, Markdown报告, PE文件, Python, Wayback Machine, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 代码模式识别, 反汇编, 大型语言模型, 字符串提取, 导入解析, 指令反汇编, 无后门, 模式分析, 热点检测, 符号解析, 自动报告, 自动检测, 请求库, 逆向工具, 逆向工程, 静态分析