manop55555/abcpwn
GitHub: manop55555/abcpwn
一个原生 C++ 二进制漏洞利用工具包,提供离线的静态分析、ROP 搜索、shellcode 和格式化字符串 payload 生成等漏洞利用原语构建能力。
Stars: 2 | Forks: 0
# abcpwn
```
P
W ┌─┐┌┐ ┌─┐┌─┐┬ ┬┌┐┌
N ├─┤├┴┐│ ├─┘│││││││
___|___ ┴ ┴└─┘└─┘┴ └┴┘┘└┘
|A|
|B| binary exploitation toolkit · v0.1.0
|C|
|0| static analysis, ROP gadget search, shellcode,
|1| format-string primitives, glibc heap helpers,
|1| seccomp BPF analysis, libc fingerprinting, GOT/PLT
|0| inspection - one native C++ binary, offline by
\ / default. no telemetry. no auto-update.
'
```
[](https://github.com/manop55555/abcpwn/actions/workflows/ci.yml)
[](https://github.com/manop55555/abcpwn/actions/workflows/codeql.yml)
[](https://github.com/manop55555/abcpwn/actions/workflows/sanitizers.yml)
[](LICENSE)
[](https://en.cppreference.com/w/cpp/20)
[](https://github.com/manop55555/abcpwn/releases)
## 概述
abcpwn 是一个用于二进制漏洞利用的本地 C++ 命令行工具包。它
提供了离线分析和漏洞利用原语生成 —— 包括 ELF/PE/Mach-O
检查、ROP gadget 搜索、格式化字符串 payload、shellcode、glibc heap
以及 seccomp 辅助工具 —— 所有这些都包含在单个静态自包含二进制文件中。它
仅动态链接系统 libc/libm;第三方库
(LIEF、Capstone、CLI11、nlohmann/json、spdlog、PicoSHA2)均被静态
打包。默认情况下,它不进行任何网络调用,不收集任何遥测数据,并且
绝不执行其分析的二进制文件。
## 目录
- [安装](#installation)
- [快速开始](#quick-start)
- [命令](#commands)
- [使用示例](#usage-examples)
- [Process-driver 集成](#process-driver-integration)
- [支持的平台](#supported-platforms)
- [授权使用](#authorized-use)
- [安全性](#security)
- [文档](#documentation)
- [贡献](#contributing)
- [许可证](#license)
## 安装
Linux x86_64 的预编译二进制文件:
```
curl -LO https://github.com/manop55555/abcpwn/releases/latest/download/abcpwn-linux-x86_64.tar.gz
curl -LO https://github.com/manop55555/abcpwn/releases/latest/download/SHA256SUMS-linux-x86_64
sha256sum -c SHA256SUMS-linux-x86_64 --ignore-missing
tar -xzf abcpwn-linux-x86_64.tar.gz
cd abcpwn-linux-x86_64
sudo install -m 755 abcpwn /usr/local/bin/abcpwn
```
该压缩包还附带了 man page 和 shell 自动补全。有关完整的
安装布局和从源码构建的信息,请参阅 [BUILDING.md](BUILDING.md)。
每个版本都通过 cosign 进行无密钥签名,并包含 CycloneDX SBOM
和 SLSA 构建来源证明;在安装之前请验证它们
(参见 [安全性](#security))。
## 快速开始
每个命令都针对本地文件离线运行。请将 `./target` 替换为
正在分析的二进制文件。
```
abcpwn info ./target # mitigations report (PIE/RELRO/NX/canary)
abcpwn syms ./target --filter main # symbols with addresses
abcpwn cyclic 200 # de Bruijn pattern
abcpwn cyclic --find laaa # offset of a faulting value
abcpwn pack 0xdeadbeef # little-endian packing
abcpwn gadget ./target --depth 4 # ROP gadget search
abcpwn fmt --write 0x404018=0xdeadbeef --arg-position 6 # format-string payload
abcpwn --format json info ./target | jq .findings # machine-readable output
```
## 命令
abcpwn 将其子命令按功能分组展示。默认使用美观的输出;
`--format json` 会输出用于脚本的结构化封装。
| 分组 | 命令 |
|-----------------|---------------------------------------------------------------------|
| 信息侦察 | `info`, `syms`, `strings`, `search`, `hash` |
| 编码 | `pack`, `unpack`, `hex`, `unhex`, `b64`, `xor`, `errno`, `signal`, `constgrep` |
| 反汇编 | `disasm`, `phd` |
| 模式生成 | `cyclic` |
| ROP | `gadget`, `rop`, `one-gadget` |
| 专项利用 | `srop`, `ret2dl`, `dynelf`, `aslr-bypass` |
| Shellcode | `shellcode` |
| 格式化字符串 | `fmt` |
| GOT / PLT | `got` |
| 堆 | `heap`, `safe-link` |
| 文件 / C++ | `iofile`, `vtable` |
| 沙箱 | `seccomp` |
| 工作流 | `pwninit`, `template`, `diff`, `patch` |
汇编:`asm` 需要 Keystone 构建变体;Apache-2.0 二进制文件
会返回 `FeatureDisabled`(exit 4)。反汇编(`disasm`)始终
可用。
完整的参考文档位于 [docs/COMMANDS.md](docs/COMMANDS.md)。
## 使用示例
### 信息侦察
```
abcpwn info ./target # format, arch, and mitigations
abcpwn syms ./target --filter main # .dynsym + .symtab symbols with addresses
abcpwn search ./target '/bin/sh' # locate bytes; reports file offset, vaddr, section
```
### 编码
```
abcpwn pack 0xcafebabe --width 4 --be # pack an integer to raw bytes
abcpwn errno 13 # EACCES -> name and description
abcpwn xor deadbeef --key 41 # XOR a hex buffer with a key
```
### 反汇编
```
abcpwn disasm 4831ff48c7c03c0000000f05 --arch x86_64 # decode hex bytes
abcpwn phd ./target --length 64 # hex dump with offsets
```
### 模式生成
```
abcpwn cyclic 200 # generate a de Bruijn pattern
abcpwn cyclic --find laaa # report the offset of a 4-byte subsequence
```
### ROP
```
abcpwn gadget ./target --depth 4 --max-results 200 # search gadgets
abcpwn rop ./target --syscall 59 \
--syscall-arg 0x404020 --syscall-arg 0 --syscall-arg 0 # execve syscall chain
abcpwn one-gadget ./libc.so.6 # locate /bin/sh offsets
```
### 专项利用
```
abcpwn srop --arch x86_64 --rip 0x4011aa --rsp 0x404300 # build an SROP frame
abcpwn aslr-bypass --brute-force --entropy-bits 28 # brute-force estimate
```
### Shellcode
```
abcpwn shellcode --preset sh --arch x86_64 # /bin/sh shellcode
abcpwn shellcode --preset sh --arch x86_64 --bad-chars 000a # avoid bad bytes
```
### 格式化字符串
```
abcpwn fmt --find-offset 'AAAA%x.%x.%x.%x' # find the arg index
abcpwn fmt --write 0x404020=0x4011aa --arg-position 6 # build a %hn payload
```
### GOT / PLT
```
abcpwn got ./target --symbol puts # GOT slot and PLT stub address
```
### 堆
```
abcpwn heap tcache-poison --libc-version 2.34 # describe the primitive
abcpwn safe-link 0x404300 0x55aabbcc # safe-linking encode
```
### 文件 / C++
```
abcpwn iofile fsop-exec --libc-version 2.34 # FSOP layout
abcpwn vtable ./target --list # list C++ vtables
```
### 沙箱
```
abcpwn seccomp dump ./target # locate and disassemble an embedded BPF filter
```
### 工作流
```
abcpwn template ret2libc ./target -o solve.py # emit a solve skeleton
abcpwn diff ./before ./after # byte diff with section context
abcpwn pwninit ./target # stage a challenge workspace
```
## Process-driver 集成
abcpwn 生成确定性的离线产物 —— 模式、偏移量、
gadget、打包数据、格式化字符串 payload。连接并驱动
目标是诸如 pwntools 之类的 process driver 的工作;abcpwn 的输出
可以直接输入到其中:
```
import subprocess
from pwn import process, p64
offset = int(subprocess.check_output(["abcpwn", "cyclic", "--find", "laaa"]))
io = process("./target")
io.sendline(b"A" * offset + p64(0x401234))
io.interactive()
```
## 支持的平台
| OS | 架构 | 状态 |
|-------|--------|--------------------------------|
| Linux | x86_64 | 一级支持(预编译二进制文件) |
| WSL2 | x86_64 | 一级支持(使用 Linux 二进制文件)|
Linux aarch64 和 macOS (arm64/x86_64) 从源码构建;请参阅
[BUILDING.md](BUILDING.md)。不支持原生 Windows(请使用 WSL2),
但可以从 Linux 检查 Windows PE 二进制文件。
## 授权使用
abcpwn 旨在用于授权的安全工作:二进制漏洞利用
研究、夺旗赛(CTF)、教学,以及您已获得
明确许可的渗透测试。它离线分析二进制文件并构建
漏洞利用原语;它不会攻击远程系统,也不会
执行它所检查的目标。
您应对自己的使用方式负责。将这些技术应用于
您不拥有或未获授权测试的系统可能是违法的。
用于未经授权访问的工具受法律管辖,例如德国的
StGB 第 202c 条、英国 1990 年的《计算机滥用法》以及
美国的《计算机欺诈和滥用法》。使用前请查阅您所在
司法管辖区的法律。
abcpwn 在 Apache License 2.0 下“按原样”提供,不提供任何形式的保证
(参见 [LICENSE](LICENSE)。作者对
因其使用而产生的任何损害或法律后果不承担责任。
## 安全性
每个版本都提供一个 `SHA256SUMS-linux-x86_64` 校验和文件、一个 cosign
无密钥签名(`.sig` 和 `.pem`)、一个 CycloneDX SBOM,以及一个 SLSA
构建来源证明。在安装之前请验证归档文件:
```
cosign verify-blob \
--certificate abcpwn-linux-x86_64.tar.gz.pem \
--signature abcpwn-linux-x86_64.tar.gz.sig \
--certificate-identity-regexp '^https://github.com/manop55555/abcpwn/' \
--certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
abcpwn-linux-x86_64.tar.gz
gh attestation verify abcpwn-linux-x86_64.tar.gz --repo manop55555/abcpwn
```
保障属性:
| 属性 | 状态 |
|----------------------|-----------------------------------------------------------|
| 发行版签名 | cosign 无密钥签名 (Fulcio + Rekor) |
| 软件物料清单 | 每个版本附带 CycloneDX SBOM |
| 构建来源 | 每个版本附带 SLSA 证明 |
| 二进制加固 | PIE, full RELRO, NX, stack canary, FORTIFY |
| 内存 / UB / 竞态 | 每次更改均运行 ASan, UBSan, TSan |
| 静态分析 | 每次更改均运行 CodeQL |
| 解析器模糊测试 | 在面向解析器的接口上使用 libFuzzer harnesses |
加固验证命令位于 [SECURITY.md](SECURITY.md) 中。
abcpwn 解析的是攻击者可控的二进制文件,因此解析器错误是一个安全
问题:请通过
[GitHub Security Advisories](https://github.com/manop55555/abcpwn/security/advisories/new) 私下报告,
而不是作为公开 issue。威胁模型位于
[docs/SECURITY-MODEL.md](docs/SECURITY-MODEL.md) 中。
## 文档
- [docs/COMMANDS.md](docs/COMMANDS.md) - 每个子命令的详细信息
- [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) - 内部设计
- [docs/SECURITY-MODEL.md](docs/SECURITY-MODEL.md) - 威胁模型、缓解措施、模糊测试
- [docs/TUTORIALS.md](docs/TUTORIALS.md) - 端到端演练
- [docs/FAQ.md](docs/FAQ.md) - 常见问题
- [docs/ERROR_CODES.md](docs/ERROR_CODES.md) - 退出代码和补救措施
- [docs/PERFORMANCE.md](docs/PERFORMANCE.md) - 性能方法论和指标
- [docs/SUPPORT.md](docs/SUPPORT.md) - 支持的版本
- [docs/CI.md](docs/CI.md) - 持续集成:触发器和门禁
- [BUILDING.md](BUILDING.md) - 从源码构建、故障排除、性能分析
- [CHANGELOG.md](CHANGELOG.md) - 版本历史
## 许可证
Apache-2.0。静态链接
Keystone 汇编引擎的可选 `release-with-keystone` 构建是 GPL-2 下的组合作品;它不
作为发行版工件分发,必须从源码构建。请参阅
[LICENSE](LICENSE) 和 [LICENSE-THIRD-PARTY.md](LICENSE-THIRD-PARTY.md)。
## 维护者
[manop55555](https://github.com/manop55555).
标签:C++, Findomain, Go语言工具, ROP, Shellcode, Web报告查看器, 二进制漏洞利用, 云安全监控, 云资产清单, 技术调研, 数据擦除, 逆向工程, 静态分析