Shellcode 坏字节驱逐器
概述 • 快速开始 • 交互式 TUI • 针对性的坏字节消除 • 坏字节配置文件 • 功能特性 • 架构 • 系统要求 • 依赖项 • 构建 • 安装 • 用法 • 混淆策略 • 去零化策略 • 机器学习训练 • 代理集合 • 开发 • 故障排除 • 许可
byvalver 是一个用 C 语言构建的命令行工具,用于自动消除(或称“驱逐”)x86/x64/ARM/ARM64 Shellcode 中的“坏字节”,同时保持完全的功能等价性。
v4.0 新特性:跨架构支持
--arch 标志自动选择 Capstone 模式v4.0.1 Bug 修复:
can_handle 逻辑中的透传策略问题v4.2 新特性:增强的 x64 支持
is_64bit_register()、is_extended_register()、build_rex_prefix()该工具使用 Capstone 反汇编框架分析指令,并应用超过 175 种排名的转换策略,将包含坏字节的代码替换为等价替代方案。
通用的坏字节驱逐框架提供两种使用模式:
--bad-bytes 选项允许指定要驱逐的任意字节(例如 --bad-bytes "00,0a,0d" 用于产生换行安全的 Shellcode)--profile 选项使用针对常见漏洞利用场景预配置的坏字节集合(例如 --profile http-newline、--profile sql-injection、--profile alphanumeric-only)支持 Windows、Linux 和 macOS。
核心技术:
C 实现,确保效率和底层控制Capstone 用于精确反汇编NASM 用于生成解码器存根[!NOTE] 空字节消除(
--bad-bytes "00"或默认):经过充分测试 / 通用坏字节消除(--bad-bytes "00,0a,0d"等):新实现
在几分钟内开始使用 byvalver:
选项 1:从 GitHub 安装(推荐)```bash curl -sSL https://raw.githubusercontent.com/umpolungfish/byvalver/main/install.sh | bash
**选项2:从源代码构建**```bash
git clone https://github.com/umpolungfish/byvalver.git
cd byvalver
make
sudo make install
sudo make install-man # Install man page
banish NULL BYTES (DEFAULT):```bash byvalver input.bin output.bin
**使用坏字节配置文件:**```bash
# HTTP contexts (removes null, newline, carriage return)
byvalver --profile http-newline input.bin output.bin
# SQL injection contexts
byvalver --profile sql-injection input.bin output.bin
# Alphanumeric-only shellcode (most restrictive)
byvalver --profile alphanumeric-only input.bin output.bin
手动坏字节规范:```bash
byvalver --bad-bytes "00,0a,0d" input.bin output.bin
**高级功能:**```bash
# Add obfuscation layer before denullification
byvalver --biphasic input.bin output.bin
# Enable ML-powered strategy selection
byvalver --ml input.bin output.bin
# Generate XOR-encoded shellcode with decoder stub
byvalver --xor-encode DEADBEEF input.bin output.bin
# Output in different formats
byvalver --format c input.bin output.c # C array
byvalver --format python input.bin output.py # Python bytes
byvalver --format hexstring input.bin output.hex # Hex string
始终验证您的 shellcode:```bash
python3 verify_denulled.py --bad-bytes "00,0a,0d" output.bin
python3 verify_functionality.py input.bin output.bin
### 跨架构支持
`byvalver` 通过 `--arch` 标志支持多种架构:
**x86 (32位 Intel/AMD)** - 完全支持,包含 150 多种策略```bash
byvalver --arch x86 --bad-bytes "00" x86_shellcode.bin output.bin
x64 (64-bit Intel/AMD) - 完全支持(默认)```bash byvalver --arch x64 --bad-bytes "00,0a,0d" x64_shellcode.bin output.bin
**ARM(32位)** - 实验性支持,提供基本策略```bash
byvalver --arch arm --bad-bytes "00" arm_shellcode.bin output.bin
ARM64 (AArch64) - 具有基本策略的实验性支持```bash byvalver --arch arm64 --bad-bytes "00,0a" arm64_shellcode.bin output.bin
**Notes:**
- ARM/ARM64支持主要集中在核心指令(MOV、算术运算、加载/存储)
- 建议为ARM使用更简单的坏字节配置文件(例如,仅空字节)
- 选择ARM/ARM64时会显示实验性警告
- 基本的架构不匹配检测会警告如果shellcode似乎是错误的架构
- 未来版本计划添加自动架构检测
### 批量处理
处理整个目录:```bash
# Process all .bin files recursively
byvalver -r --pattern "*.bin" input_dir/ output_dir/
# Apply HTTP profile to all shellcode in directory
byvalver -r --profile http-newline input_dir/ output_dir/
byvalver 包含一个交互式 TUI(文本用户界面),具有与 CLI 1:1 的功能对等性。
该 TUI 为所有 bad-byte 驱除操作提供了直观的视觉界面,包括:
使用 --menu 标志启动 TUI:```bash
byvalver --menu
### 主要功能:
TUI 提供 9 个主菜单选项,覆盖所有 CLI 功能:
1. **处理单个文件** - 处理单个 shellcode 文件,并附带可视化反馈
2. **批量处理目录** - 实时进度跟踪,处理整个目录
3. **配置处理选项** - 切换双相模式、PIC 生成、ML、详细输出、试运行
4. **设置坏字节** - 手动输入或从 13 个预定义配置文件中选择
5. **输出格式设置** - 从 5 种输出格式中选择(raw、C、Python、PowerShell、hexstring)
6. **ML 指标配置** - 配置 ML 策略选择和指标跟踪
7. **高级选项** - XOR 编码、超时、限制、验证设置
8. **加载/保存配置** - INI 风格的配置文件管理
9. **关于 byvalver** - 版本和帮助信息
### 可视化文件浏览器:
- **目录导航** - 使用方向键或 vi 风格的 j/k 键
- **文件/目录区分** - 使用 [FILE] 和 [DIR] 指示符
- **文件大小显示** - 采用人类可读格式(B、KB、MB、GB)
- **扩展名过滤**(例如 *.bin)
- **智能路径处理** - 如果提供文件路径,自动导航至父目录
- **排序显示** - 目录优先,然后按字母顺序
- **多种选择模式**:
- 文件选择模式:进入目录,仅选择文件
- 目录选择模式:选择目录进行批量处理
- 双重模式:可选择文件或目录
### 批量处理与实时更新:
批量处理屏幕提供**实时反馈**:
- **进度条** - 显示已处理文件数(例如 `[============== ] 52/100 文件`)
- **配置显示** - 显示当前设置:
- 坏字节数量和所用配置文件
- 处理选项(`Biphasic`、`PIC`、`XOR`、ML)
- 输出格式
- **实时文件统计** - 带有颜色编码的状态:
- 已完成:已尝试数 / 总数
- ✅ 成功(绿色) - 坏字节已清零
- ❌ 失败(红色) - 出现错误或剩余坏字节
- 成功率百分比
- **当前文件显示** - 粗体文本
- **下一个文件预览** - 黄色/暗色文本
- **动态策略统计表** - 显示:
- **所有活动策略**(无 10 策略限制)
- **完整策略名称**(最多 50 个字符,不截断)
- 每个策略的成功/失败次数
- 成功率百分比
- 按性能颜色编码(绿色 ≥80%,黄色 50-79%,红色 <50%)
- 每 50 毫秒实时更新
### 配置管理:
以**INI 风格格式**加载和保存配置:```ini
[general]
verbose = 0
quiet = 0
show_stats = 1
[processing]
use_biphasic = 0
use_pic_generation = 0
encode_shellcode = 0
xor_key = 0xDEADBEEF
[output]
output_format = raw
[bad_bytes]
bad_bytes = 00
[ml]
use_ml_strategist = 0
metrics_enabled = 0
[batch]
file_pattern = *.bin
recursive = 0
preserve_structure = 1
请参阅 example.conf 获取完整的配置模板。
提供2种输入方式:
00,0a,0d)交互式模式要求在您的系统上安装 ncurses 库:```bash
sudo apt install libncurses-dev
sudo dnf install ncurses-devel
brew install ncurses
应用会自动检测 ncurses 是否可用,并相应地启用 TUI 支持。
### 构建选项:
TUI 支持会根据 ncurses 的可用性进行条件编译:
- 默认构建:`make` - 如果 ncurses 可用则包含 TUI
- 强制 TUI 构建:`make with-tui` - 使用 TUI 支持构建(如果 ncurses 不可用则失败)
- 排除 TUI:`make no-tui` - 构建时不带 TUI 支持,生成较小的二进制文件
### 示例工作流程:
**单文件处理:**
1. 启动 TUI:`byvalver --menu`
2. 选择“1. 处理单个文件”
3. 使用可视化文件浏览器浏览输入文件
4. 浏览输出文件位置
5. 开始处理并查看结果
**批量处理:**
1. 启动 TUI:`byvalver --menu`
2. 选择“2. 批量处理目录”
3. 浏览包含 shellcode 文件的输入目录
4. 浏览输出目录
5. 配置文件模式(默认:<file>.bin)和递归选项
6. 开始批量处理,并实时查看进度以及策略统计信息
**配置管理:**
1. 在 TUI 中配置所有选项(坏字节、输出格式、机器学习等)
2. 选择“8. 加载/保存配置”
3. 将当前配置保存到文件(例如 `my_config.conf`)
4. 稍后:加载该配置文件以恢复所有设置
### 性能说明:
- **单文件处理**:即时视觉反馈,典型 shellcode 处理时间 <1 秒
- **批量处理**:文件间延时 50ms 用于视觉更新
- **大目录(100+ 文件)**:扫描可能需要 1-2 秒
- **策略初始化**:首次运行 2-5 秒(每次会话一次性成本)
### 终端兼容性:
TUI 已通过以下终端测试:
- GNOME Terminal
- Konsole
- xterm
- iTerm2 (macOS)
- Windows Terminal (WSL)
- tmux/screen(可用,但可能有颜色限制)
**建议最小终端尺寸**:80x24 字符(建议 100x30 或更大,以便在批量处理时完整显示策略表)
有关完整的 TUI 文档、故障排除和高级用法,请参见 [TUI_README.md](https://github.com/umpolungfish/byvalver/blob/HEAD/TUI_README.md)。
## 定向坏字节消除
### 概述
`--bad-bytes` 选项允许你指定任意一组要从 shellcode 中消除的字节。
### 实现细节
`byvalver` 的工作方式如下:
1. 解析逗号分隔的十六进制字节列表(例如 `"00,0a,0d"`)
2. 使用 O(1) 位图查找来识别指令中的坏字节
3. 应用与空字节消除相同的 153+ 种转换策略
4. 验证输出中不包含指定的坏字节
### 预期行为
- **仅空字节**(`--bad-bytes "00"` 或默认):成功率高(在测试语料库上为 100%)
- **多个坏字节**(`--bad-bytes "00,0a,0d"`):成功率可能因以下因素而有显著差异:
- 哪些特定字节被标记为坏字节
- 输入 shellcode 的复杂度
- 原始 shellcode 中坏字节的出现频率
- 针对特定坏字节集是否存在有效的替代编码
### 建议
1. **生产用途:** 坚持使用默认的空字节消除模式
2. **实验用途:** 针对你的具体用例测试 `--bad-bytes` 功能,并验证输出
3. **始终验证:** 使用 `verify_denulled.py --bad-bytes "XX,YY"` 确认所有坏字节已被消除
4. **预期变数:** 某些 shellcode 可能无法完全清除特定坏字节集
### 未来改进
通用坏字节功能为以下方面提供了基础:
- 针对特定坏字节模式的策略优化
- 自动发现针对常见坏字节组合的新策略
- 使用多样化坏字节训练数据重新训练机器学习模型
- 扩展测试和验证
> [!CAUTION]
> 使用 `--bad-bytes` 处理多个坏字节会显著增加转换任务的复杂度。如果标记的坏字节过多,某些 shellcode 可能变得无法转换,因为工具会用尽替代编码。从较小的坏字节集(例如 `"00,0a"`)开始,逐步扩展并测试输出。在部署前务必使用 `verify_denulled.py` 验证结果。
## 坏字节配置文件
### 概述
用户还可以选择 **坏字节配置文件**——针对常见利用场景预配置的字节集。无需手动指定十六进制值,而是使用与你的上下文匹配的配置文件名称。
### 可用配置文件
| 配置文件 | 难度 | 坏字节数量 | 使用场景 |
|---------|-----------|----------|-----------|
| `null-only` | ░░░░░ 简单 | 1 | 经典缓冲区溢出(默认) |
| `http-newline` | █░░░░ 低 | 3 | `HTTP` 头、基于行的协议 |
| `http-whitespace` | █░░░░ 低 | 5 | `HTTP` 参数、命令注入 |
| `url-safe` | ███░░ 中等 | 23 | `URL` 参数、`GET` 请求 |
| `sql-injection` | ███░░ 中等 | 5 | `SQL` 注入上下文 |
| `xml-html` | ███░░ 中等 | 6 | `XML`/`HTML` 注入、`XSS` |
| `json-string` | ███░░ 中等 | 34 | `JSON` API 注入 |
| `format-string` | ███░░ 中等 | 3 | 格式字符串漏洞 |
| `buffer-overflow` | ███░░ 中等 | 5 | 带过滤的栈/堆溢出 |
| `command-injection` | ███░░ 中等 | 20 | Shell 命令注入 |
| `ldap-injection` | ███░░ 中等 | 5 | `LDAP` 查询 |
| `printable-only` | ████░ 高 | 161 | 基于文本的协议(仅可打印 ASCII) |
| `alphanumeric-only` | █████ 极高 | 194 | 仅字母数字 shellcode(0-9, A-Z, a-z) |
### 用法```bash
# List all available profiles
byvalver --list-profiles
# Use a specific profile
byvalver --profile http-newline input.bin output.bin
# Combine with other options
byvalver --profile sql-injection --biphasic --format c input.bin output.c
HTTP 上下文 (消除 NULL、LF、CR):```bash byvalver --profile http-newline payload.bin http_safe.bin
**SQL注入** (消除 NULL、引号、分号):```bash
byvalver --profile sql-injection payload.bin sql_safe.bin
仅限字母数字(极高难度 - 仅允许0-9、A-Z、a-z)```bash byvalver --profile alphanumeric-only payload.bin alphanum.bin
For detailed profile documentation, see [docs/BAD_BYTE_PROFILES.md](https://github.com/umpolungfish/byvalver/blob/HEAD/docs/BAD_BYTE_PROFILES.md).
## 功能特性
### 高 NULL 字节消除成功率
<div align="center">
<strong>在代表常见和复杂 NULL 来源的多样化测试语料上实现了 100% 的 NULL 字节消除。</strong>
</div>
> 该成功率特指 NULL 字节(`\x00`)消除,该项已得到广泛测试和优化。
### 高级转换引擎
170 多种策略实现,覆盖几乎所有常见的 NULL 字节来源和通用坏字节模式(在 v3.0、v3.6、v3.7、v3.8、v4.0、v4.1 和 v4.2 中新增了多个策略族):
- `CALL/POP` 与基于栈的立即数加载
- 带哈希 API 解析的 `PEB` 遍历
- 使用复杂算法的高级基于哈希的 API 解析
- 用于多 DLL 加载的多阶段 `PEB` 遍历
- `SALC`、`XCHG` 及基于标志的归零
- 用于算术替换的 `LEA`
- 移位与算术值构造
- 多 `PUSH` 字符串构建
- 基于栈的 Windows 结构体构造
- 带高级模式的基于栈的字符串构造
- `SIB` 与位移重写
- 条件跳转位移处理
- 寄存器重映射与链接
- 增强型 `SALC`+`REP STOSB` 用于缓冲区初始化
- 高级字符串操作变换
- 原子操作编码链
- 基于 `FPU` 栈的立即数编码
- 基于 `XLAT` 表的字节翻译
- `LAHF`/`SAHF` 标志保留链
- **v3.6 新增**:`BCD` 算术混淆(`AAM`/`AAD`)
- **v3.6 新增**:`ENTER`/`LEAVE` 栈帧替代方案
- **v3.6 新增**:用于常量的 `POPCNT`/`LZCNT`/`TZCNT` 位计数
- **v3.6 新增**:`SIMD` `XMM` 寄存器立即数加载
- **v3.6 新增**:`JECXZ`/`JRCXZ` 零测试跳转变换
- **v3.7 新增**:条件跳转操作码坏字节消除(JE/JNE/JG/JL 含坏操作码)
- **v3.7 新增**:寄存器间传送坏字节操作码(MOV/XCHG 替代方案)
- **v3.7 新增**:栈帧指针坏字节消除(PUSH/POP EBP 替代方案)
- **v3.7 新增**:ModR/M 与 SIB 字节坏字节消除(替代寄存器组合)
- **v3.7 新增**:多字节立即数部分坏字节(旋转优化)
- **v3.7 新增**:位运算立即数坏字节(AND/OR/XOR/TEST 与寄存器)
- **v3.7 新增**:单字节操作码替换(INC/DEC/PUSH/POP 替代方案)
- **v3.7 新增**:字符串指令前缀坏字节(REP 前缀到循环转换)
- **v3.7 新增**:操作数大小前缀坏字节(16 位到 32 位转换)
- **v3.7 新增**:段寄存器坏字节检测(FS/GS 前缀检测)
- **v3.8 新增**:Profile 感知 SIB 生成系统(消除硬编码的 0x20 SIB 字节)
- **v3.8 新增**:条件跳转处理与部分寄存器优化的关键修复
- **v3.9 新增**:具有多种 NOP 等价的多态 NOP 插入
- **v3.9 新增**:用于立即数混淆的常量展开
- **v3.9 新增**:使用 XCHG 模式的寄存器重命名混淆
- **v3.9 新增**:用于算术操作的栈溢出混淆
- **v3.9 新增**:带 NOP 插入的指令重排序
- **v3.9 新增**:运行时自修改策略(基础实现)
- **v3.9 新增**:重叠指令生成
- **v4.0 新增**:ARM/ARM64 交叉架构支持,带 Capstone 动态模式选择
- **v4.0 新增**:ARM 立即数编码,带 MVN 变换
- **v4.0 新增**:ARM MOV 策略(原始、基于 MVN 的空值避免)
- **v4.0 新增**:ARM 算术策略(ADD 与 SUB 变换)
- **v4.0 新增**:ARM 内存策略(LDR/STR 直通)
- **v4.0 新增**:ARM 分支策略(B/BL 直通)
- **v4.1 新增**:SETcc 标志累积链(条件跳转消除)
- **v4.1 新增**:多态立即值构造(多种编码变体)
- **v4.1 新增**:寄存器依赖链优化(多指令模式)
- **v4.1 新增**:RIP 相对寻址优化(x64 PIC 改进)
- **v4.1 新增**:负位移内存寻址(位移替代方案)
- **v4.1 新增**:多字节 NOP 交织(混淆 NOP 变体)
- **v4.1 新增**:位操作常量构造(BSWAP、BSF、POPCNT、BMI2)
- **v4.2 新增**:x86/x64 策略兼容层(在 x64 上启用 128+ 个 x86 策略)
- **v4.2 新增**:MOVABS 64 位立即数策略(带 XOR/ADD 构造的 REX.W MOV)
- **v4.2 新增**:SBB 立即数零策略(SBB AL/AX/EAX, 0 变换)
- **v4.2 新增**:TEST 大立即数策略(TEST EAX/RAX, imm32 带寄存器操作数)
- **v4.2 新增**:SSE 内存操作策略(MOVUPS/MOVAPS/MOVDQU/MOVDQA 空值消除)
- **v4.2 新增**:LEA x64 位移策略(带 REX 前缀的大位移处理)
- **v4.2 新增**:扩展寄存器支持(R8-R15 寄存器编码工具)
- 全面支持 `MOV`、`ADD/SUB`、`XOR`、`LEA`、`CMP`、`PUSH` 等
该引擎采用多遍处理(混淆 → 去空),并具备针对边缘情况的稳健回退机制。
**v3.8 关键改进**:针对 http-whitespace Profile 的多策略修复
- **问题**:硬编码的坏字节导致 79.1% 的失败率(125/158 个文件失败)
- **已识别的根本原因**:
- 在 15 个策略文件中存在 45 个以上硬编码的 SIB 字节 0x20(空格)
- 条件跳转核心逻辑使用了未经验证的坏字节跳转偏移量
- 部分寄存器优化直接写入坏字节
- 在 5 个高优先级策略文件中存在额外的硬编码坏字节
- **已实施的解决方案**:
- 集中式 Profile 感知 SIB 生成,具备三级回退(STANDARD → DISP8 → PUSHPOP)
- 为条件跳转跳转偏移量提供动态 NOP 填充以避免坏字节
- 使用分解法进行部分寄存器值的智能字节构造
- 系统性地将硬编码字节替换为 Profile 感知的替代方案
- **影响**:**79.1% 失败率 → 35.4% 失败率**(成功率:**20.9% → 64.6%**)
- **已修复的文件**:102 个文件现在成功处理(+69 个文件,3.09 倍改进)
- **策略成功率**:
- 部分寄存器优化:25% → **100%**(12/12 次变换)
- mov_mem_disp_enhanced:0% → **98.5%**(1605/1629 次变换)
- indirect_call_mem:0% → **98.5%**(135/137 次变换)
- indirect_jmp_mem:0% → **98.5%**(134/136 次变换)
- **性能**:通过智能缓存实现零开销,平均体积增加小于 2%
### 性能指标
处理 184 个多样化 shellcode 样本的真实世界性能数据:```
📊 Batch Processing Statistics:
Success Rate: 184/184 █████████████████████████ 100.00%
Files Processed: 184 █████████████████████████ 100.00%
Failed: 0 ░░░░░░░░░░░░░░░░░░░░░░░░░ 00.00%
Skipped: 0 ░░░░░░░░░░░░░░░░░░░░░░░░░ 00.00%
(由于输入内容为空,翻译结果也为空。)``` 🧠 ML Strategy Selection Performance:
Processing Speed: Instructions/sec: 19.5 inst/sec ████████████░░░░░░░░░░░░░ Total Instructions: 20,760 Session Duration: 1,067 seconds
Null-Byte Elimination: Eliminated: 18,636/20,760 ██████████████████████░░░ 89.77% Strategies Applied: 20,129 Success Rate: 92.57% ███████████████████████░░ 92.57%
Learning Progress: Positive Feedback: 18,636 ███████████████████████░░ 92.57% Negative Feedback: 1,493 █░░░░░░░░░░░░░░░░░░░░░░░░ 07.43% Total Iterations: 40,889 Avg Confidence: 0.0015 ░░░░░░░░░░░░░░░░░░░░░░░░░ 00.15%
输入:```
🏆 Top Performing Denullification Strategies:
Strategy Attempts Success% Confidence
-------- -------- -------- ----------
ret_immediate 134 █████████████░░░░░░░░░░░░ 50.00%
MOVZX/MOVSX Null-Byte banishment 162 █████████████░░░░░░░░░░░░ 50.00%
transform_mov_reg_mem_self 774 █████████████░░░░░░░░░░░░ 50.00%
cmp_mem_reg_null 96 ████████████░░░░░░░░░░░░░ 46.88%
cmp_mem_reg 264 ████████████░░░░░░░░░░░░░ 46.97%
lea_disp_null 3900 ███████████░░░░░░░░░░░░░░ 45.38%
transform_add_mem_reg8 2012 ███████████░░░░░░░░░░░░░░ 43.49%
Push Optimized 4214 ███████░░░░░░░░░░░░░░░░░░ 29.31%
ModRM Byte Null Bypass 82 ██████░░░░░░░░░░░░░░░░░░░ 25.61%
conservative_arithmetic 5172 █████░░░░░░░░░░░░░░░░░░░░ 21.37%
arithmetic_addsub_enhanced 1722 ████░░░░░░░░░░░░░░░░░░░░░ 18.12%
PUSH Immediate Null-Byte banishment 3066 ████░░░░░░░░░░░░░░░░░░░░░ 16.54%
SIB Addressing 9560 ████░░░░░░░░░░░░░░░░░░░░░ 16.03%
generic_mem_null_disp_enhanced 22130 ███░░░░░░░░░░░░░░░░░░░░░░ 15.52%
SALC-based Zero Comparison 1654 ███░░░░░░░░░░░░░░░░░░░░░░ 12.88%
此表展示了可能字段的完整列表(适用于 openvas 或 nessus),以及用于“其他”或常见/通用字段的格式。如果您的导出中不存在某个字段,可以安全地忽略它。``` ⚡ Processing Efficiency:
Learning Rate: 1.97 feedback/instruction Weight Update Avg: 0.042650 Weight Update Max: 0.100000 Total Weight Updates: 1724.68
Strategy Coverage: Total Strategies: 153+ Strategies Activated: 117 ████████████████████████░ 95.90% Zero-Attempt: 5 █░░░░░░░░░░░░░░░░░░░░░░░░ 04.10%
### 混淆层
`--biphasic` 模式在去空之前添加反分析混淆:
- 控制流扁平化
- 调度器模式
- 寄存器重新分配
- 状态混淆
- 死代码插入
- NOP滑板
- 指令替换
- 等效操作
- 栈帧操纵
- API解析隐藏
- 字符串编码
- 常量编码
- 反调试
- 虚拟机检测技术
### ML驱动的策略选择
> **成熟度:Beta v2.0** — 基于空字节消除数据集训练。需要针对通用坏字节用例进行重新训练。
**架构**:
- **独热指令编码**(51维)取代标量指令ID
- **上下文窗口**,使用4条指令的滑动缓冲区(当前+前3条)
- **固定特征提取**,每条指令具有稳定的84维布局
- **稳定策略注册表**,确保一致的神经网络输出映射
- **全反向传播**,通过所有层(输入→隐藏→输出)
- **正确的梯度计算**,用于softmax + 交叉熵损失
- **输出掩码**,在softmax之前过滤无效策略
- **He/Xavier初始化**,用于正确的权重初始化
- 3层前馈神经网络(336→512→200)
- 根据成功/失败反馈进行自适应学习
- 跟踪预测、准确率和置信度
- 优雅地回退到确定性排序
> [!WARNING]
> ML模式是实验性的,需要进一步训练/验证新架构。
### 批处理
- 递归目录遍历(`-r`)
- 自定义文件模式(`--pattern "*.bin"`)
- 保持或展平结构
- 出错时继续或严格模式
- 与所有选项兼容(双相、PIC、`XOR`等)
- **增强输出**:
- 每个文件的大小变换及比例
- 失败时详细的坏字节识别
- 摘要中的成功/失败百分比
- 失败文件列表(前10个内联显示)
- 严格成功定义:存在剩余坏字节的文件标记为失败
**批处理输出示例:**```
===== BATCH PROCESSING SUMMARY =====
Total files: 8
Successfully processed: 1 (12.5%)
Failed: 7 (87.5%)
Skipped: 0
Total input size: 650 bytes
Total output size: 764 bytes
Average size ratio: 1.18x
Bad bytes: 5 configured
Configured set: 0x00, 0x09, 0x0a, 0x0d, 0x20
FAILED FILES (7):
- shellcode1.bin
- shellcode2.bin
...
[!TIP] 如需批量处理大型shellcode集合,请使用
--no-continue-on-error及早识别问题文件,再通过--pattern排除失败项成功处理。--verbose标志有助于跟踪进度,并确定哪种策略最适合您的特定shellcode语料库。仅当文件中零剩余坏字节时才计为成功——部分成功视为失败。
C数组、Python字节串、十六进制字符串XOR编码(--xor-encode 0xDEADBEEF)--pic)使用--stats标志时,byvalver会提供详细分析:
策略使用统计:
文件复杂度分析:
批处理摘要:
示例输出:``` ===== BATCH PROCESSING SUMMARY ===== Total files: 162 Successfully processed: 131 (80.9%) Failed: 31 (19.1%) Skipped: 0
Total input size: 35772920 bytes Total output size: 81609 bytes Average size ratio: 0.00x
FAILED FILES (31):
STRATEGY USAGE STATISTICS: ┌─────────────────────────────────────────┬─────────┬─────────┬──────────────┬────────────────┐ │ Strategy Name │ Success │ Failure │ Applications │ Avg Output Size│ ├─────────────────────────────────────────┼─────────┼─────────┼──────────────┼────────────────┤ │ push_immediate_strategy │ 45 │ 3 │ 48 │ 12.34 │ │ mov_reg_mem_self │ 32 │ 1 │ 33 │ 8.21 │ │ ... │ ... │ ... │ ... │ ... │ └─────────────────────────────────────────┴─────────┴─────────┴──────────────┴────────────────┘
FILE COMPLEXITY ANALYSIS: Most Complex Files (by instruction count):
Largest Files (by input size):
Smallest Files (by input size):
Largest Expansion (by size ratio):
### 验证套件
用于验证的Python工具:
- `verify_denulled.py`: 确保零坏字节(支持 `--bad-bytes` 进行自定义验证)
- `verify_functionality.py`: 检查执行模式
- `verify_semantic.py`: 验证等价性
## 架构
`byvalver` 采用模块化策略模式设计:
- 第1步:(可选)反分析混淆
- 第2步:去空化以移除空字节
- 用于策略优化的机器学习层
- 用于可扩展处理的批处理系统
<div align="center">
<img src="https://assets.kitploit.com/production/public/readmes/9982/8d3a1e20481460fedecaecda6f87bc21355fbbb1f1ef58d7fef4427eda36a381.png" alt="策略分类体系" width="700">
</div>
## 系统要求
- **操作系统**:Linux(Ubuntu/Debian/Fedora)、macOS(通过 Homebrew)、Windows(通过 WSL/MSYS2)
- **CPU**:x86/x64 架构,支持现代指令集
- **内存**:1GB 可用
- **磁盘**:50MB 可用
- **工具**:`C` 编译器、Make、Git(推荐)
## 依赖项
- **核心**:GCC/Clang、GNU Make、`Capstone`(v4.0+)、`NASM`(v2.13+)、xxd
- **可选**:Clang-Format、Cppcheck、Valgrind
- **机器学习训练**:数学库(已包含)
### 安装命令
**Ubuntu/Debian:**```bash
sudo apt update
sudo apt install build-essential nasm xxd pkg-config libcapstone-dev clang-format cppcheck valgrind
macOS (Homebrew) — macOS Tahoe 26 (及更新版本):```bash
brew install capstone nasm pkg-config
brew install vim
### macOS/Homebrew 构建修复(仓库变更)
近期进行了改进以提升 macOS/Homebrew 兼容性(尤其是在 Apple Silicon 和 Homebrew 前缀 `/opt/homebrew` 环境下):
- 更新了 `Makefile` 和 `makefile`,**在编译时使用 `CPPFLAGS`**,**在链接时使用 `LDLIBS`**,以便 `pkg-config` 发现的 Capstone 标志能被正确使用。
- 将 Homebrew 的 `pkg-config` 输出的 Capstone 包含路径从 `.../include/capstone` 规范化为 `.../include`,使得项目的 `#include <capstone/capstone.h>` 能正确解析。
差异摘要(高层级):
- `$(CC) $(CFLAGS) -c ...` → `$(CC) $(CFLAGS) $(CPPFLAGS) -c ...`
- `$(CC) $(CFLAGS) -o ... $(LDFLAGS)` → `$(CC) $(CFLAGS) $(CPPFLAGS) -o ... $(LDFLAGS) $(LDLIBS)`
- `CAPSTONE_CFLAGS := pkg-config --cflags capstone` → 规范化为与 `<capstone/capstone.h>` 兼容的包含路径
### 故障排除(macOS)```bash
# Verify xxd is available (macOS usually ships /usr/bin/xxd)
command -v xxd
# Verify Capstone is discoverable via pkg-config
pkg-config --cflags capstone
pkg-config --libs capstone
# Clean rebuild
make clean
make
Windows (WSL): 与 Ubuntu/Debian 相同。
使用 Makefile 进行构建:
make(优化后的可执行文件)make debug(符号, sanitizers)make release(-O3, native)make static(自包含的)make train(bin/train_model)make clean 或 make clean-all自定义:```bash make CC=clang CFLAGS="-O3 -march=native" CPPFLAGS="$(pkg-config --cflags capstone)"
查看配置:`make info`
## 安装
全局安装:```bash
sudo make install
sudo make install-man
卸载:```bash sudo make uninstall
来自 GitHub:```bash
curl -sSL https://raw.githubusercontent.com/umpolungfish/byvalver/main/install.sh | bash
byvalver [OPTIONS] [output]
- 输入/输出可以是文件或目录(自动批处理)
**关键选项:**
- `-h, --help`:帮助
- `-v, --version`:版本
- `-V, --verbose`:详细输出
- `-q, --quiet`:安静模式
- `--bad-bytes BYTES`:以逗号分隔的十六进制坏字节列表(默认:"00")
- `--profile NAME`:使用预定义的坏字节配置文件(例如:http-newline, sql-injection)
- `--list-profiles`:列出所有可用的坏字节配置文件
- `--biphasic`:混淆 + 去除空字节
- `--pic`:位置无关
- `--ml`:ML(机器学习)策略选择
- `--xor-encode KEY`:使用存根进行 `XOR` 编码
- `--format FORMAT`:raw|c|python|hexstring
- `-r, --recursive`:递归批处理
- `--pattern PATTERN`:文件通配模式
- `--no-preserve-structure`:扁平化输出
- `--no-continue-on-error`:遇到错误时停止
- `--menu`:启动交互式 TUI 菜单
**示例:**```bash
# Default: banish null bytes only (well-tested, recommended)
byvalver shellcode.bin clean.bin
# v3.0 NEW: List available bad-byte profiles
byvalver --list-profiles
# v3.0 NEW: Use predefined profile for HTTP contexts (eliminates 0x00, 0x0A, 0x0D)
byvalver --profile http-newline shellcode.bin clean.bin
# v3.0 NEW: Use profile for SQL injection contexts
byvalver --profile sql-injection shellcode.bin clean.bin
# v3.0 NEW: Use profile for URL-safe shellcode
byvalver --profile url-safe shellcode.bin clean.bin
# v3.0 NEW: Manual bad-byte specification (experimental - not extensively tested)
byvalver --bad-bytes "00,0a,0d" shellcode.bin clean.bin
# Combined with other features
byvalver --profile http-newline --biphasic --ml input.bin output.bin
# Batch processing with profile
byvalver -r --profile http-whitespace --pattern "*.bin" shellcodes/ output/
# Launch interactive TUI mode
byvalver --menu
byvalver 的混淆阶段(通过 --biphasic 启用)应用反分析技术:
MOV 寄存器交换:XCHG/push-pop 模式MOV 立即数:算术分解算术替换:复杂等价表达式内存访问:间接寻址与 LEA栈操作:手动 ESP 处理条件跳转:SETcc 与搬移指令无条件跳转:间接机制调用:PUSH + JMP优先级偏向于反分析(高)而非简单替换(低)。
参见 OBFUSCATION_STRATS 获取详细策略文档。
核心空值消除阶段使用了超过 170 种策略:
MOV 策略NEG、NOT、XOR、移位、ADD/SUB 分解NEG、XOR、ADD/SUBCALL/JMP 间接TESTSIB 寻址PUSH 优化CALL/POP、PEB 哈希、SALC、LEA 算术、shift、栈字符串等LEA 替代方案策略通过 ML 或确定性顺序进行优先级排序和选择。
模块化注册机制便于添加新策略以处理新兴 shellcode 模式。
参见 DENULL_STRATS 获取详细策略文档。
构建训练器:make train
运行:./bin/train_model
./shellcodes/./ml_models/byvalver_ml_model.bin模型在运行时自动加载并解析路径。
./bin/byvalver --ml shellcodes/linux_x86/execve.bin output.bin
./bin/byvalver --ml test.bin output.bin 2>&1 | grep "ML Registry"
./bin/byvalver --ml --batch shellcodes/linux_x86/*.bin output/
cat ml_metrics.log
**建议:** 在生产环境中使用之前,ML 模式需要使用多样化的坏字节数据集进行重新训练。目前仅针对空字节排除进行了优化。
## 代理管理
`byvalver` 附带了一个**AI驱动的代理管道**(`agents/`),它可以自主发现策略注册表中的漏洞,提出一种新颖的坏字节消除技术,生成完整的 C 语言实现,并将其集成到项目中——所有这些只需一个命令。
该管道基于 [AjintK](https://github.com/umpolungfish/byvalver/blob/HEAD/AjintK/) 多提供商代理框架构建,并支持 **Anthropic**、**DeepSeek**、**Qwen**、**Mistral** 和 **Google** 作为 LLM 后端。
### 快速开始```bash
# Requires API key for your chosen provider
export ANTHROPIC_API_KEY="..." # or DEEPSEEK_API_KEY, QWEN_API_KEY, etc.
# --- Specialized Generators ---
# 1. General Technique Generator (discover → propose → generate → implement)
python3 run_technique_generator.py
# 2. Obfuscation Technique Generator (specifically for anti-analysis/evasion)
python3 run_obfuscation_generator.py
# 3. Bad-Byte Removal Generator (targeting restricted byte elimination)
python3 run_badbyte_generator.py
# 4. Profile-Specific Strategy Generator (targeting a specific bad-byte profile)
python3 run_profile_generator.py --profile alphanumeric-only
# --- Common Options ---
# Dry-run: discover and propose only, no files written
python3 run_technique_generator.py --dry-run
# Target a specific architecture
python3 run_technique_generator.py --arch x64
# Use a different provider / model
python3 run_technique_generator.py --provider deepseek --model deepseek-chat
--dry-run Stop after Stage 2 — print proposal, write nothing --arch x86 | x64 | both (default: both) --provider anthropic | deepseek | qwen | mistral | google (default: anthropic) --model Model ID (provider-specific default applied if omitted) --verbose Print full LLM responses at each stage
### 要求```bash
# Install Python dependencies (uses AjintK framework)
pip install anthropic tenacity httpx pyyaml
# Or with uv (faster)
uv pip install -r AjintK/requirements.txt
该管道已通过 DeepSeek(deepseek-chat)和 Anthropic(claude-sonnet-4-6)验证。
在一次典型运行中,它会发现 340+ 种策略,提出一项技术(例如,针对 SSE/AVX 指令的 VEX 前缀重新编码),生成约 200 行 C 代码,并产生一个干净的构建——完全无人值守。
有关架构细节以及通过新代理扩展管道的更多信息,请参阅 docs/AGENT_MENAGERIE.md。
C 语言,模块化设计bash tests/run_tests.sh(参见 tests/README.md)make formatdocker build -t byvalver .(参见 Dockerfile)完整文档位于 docs/ 目录中:
Capstone/NASM/xxd对于持续性问题,请使用详细模式并检查日志
如果在特定 shellcode 上坏字节消除失败,请考虑向注册表添加有针对性的策略。
byvalver 根据 UNLICENSE 自由地释放于地球之上。
| 架构 | 成熟度 | 策略数 | 备注 |
|---|
| x86(32 位 Intel/AMD) | 稳定版 v4.2 | 150+ | 生产验证,全覆盖 |
| x64(64 位 Intel/AMD) | 稳定版 v4.2 | 150+ | 默认架构,生产验证 |
| ARM(32 位) | 实验版 v0.1 | 7 个核心 | 测试有限,仅核心指令 |
| ARM64(AArch64) | 实验版 v0.1 | 基础版 | 框架就绪,策略极少 |
控制流扁平化指令替换:等价操作死代码:无害插入寄存器重分配:数据流隐藏乘一:IMUL 模式NOP 滑板:可变填充多态 NOP 插入:多种 NOP 等价指令(XCHG EAX,EAX, LEA, MOV)常量展开:将立即数分解为算术运算寄存器重命名:基于 XCHG 的寄存器替换栈溢出混淆:基于栈的算术运算指令重排序:插入 NOP 的指令打乱运行时自修改:自修改代码生成重叠指令:多重解释字节序列跳转诱饵:虚假目标相对偏移:计算跳转基于开关:计算流布尔表达式:德摩根等价式变量编码:可逆变换时序变化:延迟寄存器状态:复杂操作栈帧:自定义管理API 解析:复杂哈希字符串编码:运行时解码常量:表达式生成调试器检测:混淆检查虚拟机检测:隐蔽方法| 阶段 | 智能体 | 功能 |
|---|
| 1 | StrategyDiscoveryAgent | 扫描 src/,提取全部 340+ 策略名称与类别,请求 LLM 总结覆盖缺口 |
| 2 | TechniqueProposalAgent | 基于策略目录,提出一项真正新颖的技术,附带理由、目标指令与实现思路 |
| 3 | CodeGenerationAgent | 参照 strategy.h/utils.h/mov_strategies.c,生成符合 strategy_t 接口的完整 .h + .c 实现 |
| 4 | ImplementationAgent | 将文件写入 src/,修补 strategy_registry.c(包含头文件 → 前向声明 → 注册调用),执行 make |
| 文档 | 描述 |
|---|
| docs/USAGE.md | 综合使用指南及示例 |
| docs/BUILD.md | 构建说明及平台特定注意事项 |
| docs/TUI_README.md | 交互式 TUI 文档 |
| docs/DENULL_STRATS.md | 去空策略目录 |
| docs/OBFUSCATION_STRATS.md | 混淆技术文档 |
| docs/BAD_BYTE_PROFILES.md | 坏字节配置参考 |
| docs/BADBYTEELIM_STRATS.md | 扩展消除策略 |
| docs/STRATEGY_HIERARCHY.md | 策略组织与优先级 |
| docs/ADVANCED_STRATEGIES.md | 高级变换技术 |
| docs/WHITEPAPER.md | 技术白皮书 |
| docs/AGENT_MENAGERIE.md | 代理管道:自动技术生成 |