pwnwriter/seg
GitHub: pwnwriter/seg
一条命令完成 ELF 二进制侦察并生成结构化报告,自动检测危险函数、安全保护机制并建议利用策略,专为安全研究者和 AI 智能体设计。
Stars: 12 | Forks: 0
[](https://ko-fi.com/pwnwriter)

## 目录
* [`功能`](#features)
* [`安装`](#installation)
* [`用法`](#usage)
* [`分析`](#usage-analyze)
* [`调用`](#usage-invoke)
* [`钩取`](#usage-hook)
* [`报告部分`](#report-sections)
* [`工作原理`](#tools-used)
* [`贡献`](#contribution)
* [`支持`](#support)
* [`另请参阅`](#see)
* [`许可证`](#license)

## 功能
- **单条命令侦察**:运行 `seg analyze ./binary` 即可获取所有信息——保护机制、符号、字符串、反汇编、利用策略。
- **双重输出**:`--markdown` 供人类阅读,`--json` 供 AI 智能体和自动化流水线使用。
- **危险函数检测**:标记 `gets`、`strcpy`、`system`、`printf` 及其他 17 种风险函数及其调用位置。
- **利用策略**:根据分析结果自动建议 ret2libc、ret2win、格式化字符串、shellcode、ROP 或堆漏洞利用。
- **Libc 解析**:通过 `ldd` 提取本地 libc,并查询 [libc.rip](https://libc.rip) 以匹配远程 libc 及其可用偏移量(`system`、`str_bin_sh` 等)。
- **反汇编亮点**:提取 `main`、`_start` 以及名称可疑的函数(`vuln`、`win`、`backdoor`、`shell` 等)。
- **字符串分类**:分离出 shell 命令、格式化字符串、文件路径、URL 和可疑字符串。
- **函数调用**:使用 `dlopen`/`dlsym`/`libffi` 在运行时调用共享库中的导出函数,或使用 `ptrace` 通过地址调用函数。
- **函数钩取**:使用通过自动生成的 C 钩子构建的 `LD_PRELOAD` (Linux) 或 `DYLD_INSERT_LIBRARIES` (macOS) 来钩取 libc/导入的函数。
- **可移植**:使用 Rust 编写。封装了您已有的标准 Linux 工具。
## 待办事项 (请帮忙)
- [x] `seg invoke`:使用 `dlopen`、`dlsym` 和 `libffi` 调用共享库中的导出函数。
- [x] `seg invoke --addr`:使用调试器辅助执行,通过地址调用 ELF 二进制文件内的函数。
- [x] `seg hook`:使用 `LD_PRELOAD` 钩取 libc/导入的函数。
- [ ] `seg hook --frida`:后续将支持使用 Frida 进行运行时钩取。
参考资料:https://youtu.be/0o8Ex8mXigU?si=Qq60LRr5jUB_nnwR
## 安装
```
git clone --depth=1 https://github.com/pwnwriter/seg --branch=main
cd seg
cargo build --release
```
二进制文件将位于 `target/release/seg`。将其移动到您的 `$PATH` 中。
🌼 源码
```
cargo install seg
```
🎠 Cargo
```
nix run github:pwnwriter/seg
```
❄️ Nix
seg analyze ./vuln --markdown
Markdown 报告输出到终端
seg analyze ./vuln --markdown report.md
Markdown 报告输出到文件
seg analyze ./vuln --json
JSON 报告输出到终端
seg analyze ./vuln --json report.json
JSON 报告输出到文件
seg analyze ./vuln --markdown report.md --json report.json
同时输出两种格式
seg ana ./vuln --json
seg analy ./vuln --markdown
短别名
seg analyze ./vuln --json | jq '.strategy'
seg analyze ./vuln --json | jq '.dangerous_functions'
seg analyze ./vuln --json | jq '.exploitation_hints'
通过管道将 JSON 传递给 jq
seg invoke ./libmath.so add --ret i32 -- i32:2 i32:3
调用共享库中的函数
seg invoke ./libgreet.so greet --ret string
调用返回字符串的函数
seg invoke ./vuln --addr 0x401234 --ret i32 -- i32:42
通过地址调用函数 (Linux, ptrace)
seg hook ./vuln puts --action log
记录函数调用日志
seg hook ./vuln rand --action replace --replace-lib ./fake_rand.so
用自定义函数替换原函数
seg hook ./vuln gets --action log -- AAAAAAAAAA
向目标二进制文件传递参数
| # | 部分 | 描述 |
|---|---|---|
| 1 | Summary (摘要) | 二进制文件路径、类型、架构、位数、字节序 |
| 2 | Security Protections (安全保护) | PIE, NX, Canary, RELRO, Fortify |
| 3 | File Metadata (文件元数据) | 大小、权限、所有者、SHA256 |
| 4 | ELF Headers (ELF 头) | 入口点、机器类型、ABI |
| 5 | Program Segments (程序段) | LOAD、INTERP 等及其权限 |
| 6 | Sections (节) | .text、.plt、.got、.bss 等 |
| 7 | Linked Libraries (链接库) | 来自 `ldd` 的共享库信息 |
| 8 | Dynamic Entries (动态条目) | NEEDED、INIT、FINI 等 |
| 9 | Imported Functions (导入函数) | 名称、库、PLT 地址、GOT 地址 |
| 10 | Exported Symbols (导出符号) | 名称、地址、类型 |
| 11 | Interesting Strings (有趣的字符串) | Shell、格式化字符串、路径、URL、可疑内容 |
| 12 | Disassembly Highlights (反汇编亮点) | 入口点、main 函数、可疑函数 |
| 13 | Dangerous Functions (危险函数) | gets、strcpy、system、printf 等及其风险和位置 |
| 14 | Exploitation Hints (利用提示) | 缓冲区溢出、格式化字符串、ret2libc、ROP |
| 15 | Libc Information (Libc 信息) | 本地 libc + libc.rip 匹配 |
| 16 | Suggested Strategy (建议策略) | 最可能的利用路径及操作步骤 |
| 17 | AI Agent Summary (AI 智能体摘要) | 用于自动化的一句话摘要 |
| 18 | Raw Tool Outputs (原始工具输出) | 所有工具的未处理输出 |
📊 查看报告部分
Copyright © 2026 - present pwnwriter me