umpolungfish/byvalver

GitHub: umpolungfish/byvalver

一款 shellcode 坏字节清除工具,通过语义等价变换在保持功能不变的前提下移除指定的非法字节。

Stars: 62 | Forks: 9

byvalver (·𐑚𐑲𐑝𐑨𐑤𐑝𐑼)

SHELLCODE 坏字节清除工具

byvalver banishes bad-bytes with extreme prejudice
C++ SHELLCODE SCRUBBING CROSS-PLATFORM ARCHITECTURES BUILD CLEAN GitHub stars GitHub forks SPONSOR ON gitHub SUPPORT ON ko-fi

概述快速开始交互式 TUI定向坏字节消除坏字节配置文件功能特性系统架构系统要求依赖项构建安装使用说明混淆策略去空化策略ML 训练Agent 集合开发疑难解答许可证


## 目录 - [概述](#overview) - [快速开始](#quick-start) - [安装](#installation) - [基本用法](#basic-usage) - [验证](#verification) - [跨架构支持](#cross-architecture-support) - [批处理](#batch-processing) - [交互式 TUI](#interactive-tui) - [定向坏字节清除](#targeted-bad-byte-banishment) - [坏字节配置文件](#bad-byte-profiles) - [功能特性](#features) - [高级转换引擎](#advanced-transformation-engine) - [性能指标](#performance-metrics) - [混淆层](#obfuscation-layer) - [基于 ML 的策略选择](#ml-powered-strategy-selection) - [输出选项](#output-options) - [验证套件](#verification-suite) - [系统架构](#architecture) - [系统要求](#system-requirements) - [依赖项](#dependencies) - [构建](#building) - [安装](#installation-1) - [使用说明](#usage) - [混淆策略](#obfuscation-strategies) - [去空化策略](#denullification-strategies) - [ML 训练与验证](#ml-training--validation) - [Agent 集合](#agent-menagerie) - [开发](#development) - [文档](#documentation) - [疑难解答](#troubleshooting) - [许可证](#license)
## 概述 `byvalver` 是一个用 `C` 构建的 CLI 工具,用于自动从 x86/x64/ARM/ARM64 shellcode 中消除(或称**“清除”**)`bad-bytes`(坏字节),同时保持完整的功能等价性 **v4.0 新特性:跨架构支持** | 架构 | 成熟度 | 策略数 | 备注 | |---|---|---|---| | **x86** (32位 Intel/AMD) | 稳定版 v4.2 | 150+ | 经过生产测试,覆盖全面 | | **x64** (64位 Intel/AMD) | 稳定版 v4.2 | 150+ | 默认架构,经过生产测试 | | **ARM** (32位) | 实验版 v0.1 | 7 个核心 | 有限测试,仅支持核心指令 | | **ARM64** (AArch64) | 实验版 v0.1 | 基础 | 框架就绪,策略极少 | - 通过 `--arch` 标志自动选择 Capstone 模式 **v4.0.1 错误修复:** - 修复了 ARM SUB 指令编码(修正了操作码 0x2 的 I=1 位) - 修复了直通策略的 ARM64 策略 `can_handle` 逻辑 - 在选择 ARM/ARM64 架构时增加了实验性警告 - 增加了架构不匹配检测启发式方法 - 改进了代码组织(将 includes 移至文件作用域) **v4.2 新特性:增强的 x64 支持** - **x86/x64 策略兼容层**:现有 128+ 种 x86 策略现可用于 x64 shellcode - **5 个全新的 x64 专用策略文件**:MOVABS, SBB, TEST, SSE Memory, LEA Displacement - **扩展寄存器编码**:全面支持 R8-R15,并正确处理 REX 前缀 - **REX 前缀工具集**:`is_64bit_register()`,`is_extended_register()`,`build_rex_prefix()` - 解决了仅 x64 的 shellcode 样本上 100% 的失败率问题 该工具使用 `Capstone` 反汇编框架来分析指令,并应用 175+ 种排序好的转换策略,用等效的替代方案替换包含 `bad-byte` 的代码 通用的 `bad-byte` 清除框架提供 2 种使用模式: 1. **直接指定**:`--bad-bytes` 选项允许指定任意字节进行清除(例如,使用 `--bad-bytes "00,0a,0d"` 处理换行安全的 shellcode) 2. **基于配置文件**:`--profile` 选项使用针对常见漏洞利用场景预配置的坏字节集合(例如,`--profile http-newline`,`--profile sql-injection`,`--profile alphanumeric-only`) 支持 `Windows`,`Linux` 和 `macOS` **核心技术:** - 纯 `C` 实现,确保高效率和底层控制 - `Capstone` 用于精确反汇编 - `NASM` 用于生成解码器存根 - 模块化策略模式,支持可扩展的转换(153+ 个策略实现) - 神经网络集成,用于智能策略选择 - 双相处理:先混淆,然后去空化 ### 坏字节清除操作示例 bad-byte banishment in action ## 快速开始 几分钟即可上手 `byvalver`: ### 安装 **选项 1:从 GitHub 获取(推荐)** ``` curl -sSL https://raw.githubusercontent.com/umpolungfish/byvalver/main/install.sh | bash ``` **选项 2:从源码构建** ``` git clone https://github.com/umpolungfish/byvalver.git cd byvalver make sudo make install sudo make install-man # Install man page ``` ### 基本用法 **清除空字节(默认):** ``` byvalver input.bin output.bin ``` **使用坏字节配置文件:** ``` # HTTP 上下文(移除 null、换行符、回车符) byvalver --profile http-newline input.bin output.bin # SQL injection 上下文 byvalver --profile sql-injection input.bin output.bin # 纯字母数字 shellcode(限制最严格) byvalver --profile alphanumeric-only input.bin output.bin ``` **手动指定坏字节:** ``` # 消除 null 字节和换行符 byvalver --bad-bytes "00,0a,0d" input.bin output.bin ``` **高级功能:** ``` # 在 denullification 之前添加混淆层 byvalver --biphasic input.bin output.bin # 启用 ML 驱动的策略选择 byvalver --ml input.bin output.bin # 生成带有 decoder stub 的 XOR 编码 shellcode byvalver --xor-encode DEADBEEF input.bin output.bin # 以不同格式输出 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: ``` # 检查剩余的 bad byte 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+ 种策略 ``` byvalver --arch x86 --bad-bytes "00" x86_shellcode.bin output.bin ``` **x64 (64位 Intel/AMD)** - 全面支持(默认) ``` byvalver --arch x64 --bad-bytes "00,0a,0d" x64_shellcode.bin output.bin ``` **ARM (32位)** - 实验性支持,包含基本策略 ``` byvalver --arch arm --bad-bytes "00" arm_shellcode.bin output.bin ``` **ARM64 (AArch64)** - 实验性支持,包含基本策略 ``` byvalver --arch arm64 --bad-bytes "00,0a" arm64_shellcode.bin output.bin ``` **注意事项:** - ARM/ARM64 支持侧重于核心指令(MOV、算术指令、加载/存储) - 对 ARM 使用较简单的坏字节配置文件(例如,仅限空字节) - 选择 ARM/ARM64 时会显示实验性警告 - 基础的架构不匹配检测会在 shellcode 似乎属于错误架构时发出警告 - 计划在未来的版本中加入自动架构检测 ### 批处理 处理整个目录: ``` # 递归处理所有 .bin 文件 byvalver -r --pattern "*.bin" input_dir/ output_dir/ # 将 HTTP profile 应用于目录中的所有 shellcode byvalver -r --profile http-newline input_dir/ output_dir/ ``` ## 交互式 TUI
TUI main menu
TUI batch processing
`byvalver` 包含一个**交互式 TUI**(文本用户界面),具有 **1:1 的 CLI 功能对等性**。 TUI 为所有 `bad-byte` 清除操作提供了直观的可视化界面,包括: + 带实时统计的批处理 + ML 配置 & + 全面的文件浏览 使用 `--menu` 标志启动 TUI: ``` 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 files`) - **配置显示**展示当前活动设置: - 坏字节数量和使用的配置文件 - 处理选项(`Biphasic`,`PIC`,`XOR`,ML) - 输出格式 - **实时文件统计**带有颜色编码的状态: - 已完成:X / Y(已尝试文件 / 总数) - ✅ 成功 (绿色) - 零坏字节残留 - ❌ 失败 (红色) - 出错或存在残留坏字节 - 成功率百分比 - **当前文件**以粗体显示 - **下一个文件预览**以黄色/暗色文本显示 - **动态策略统计表**显示: - **所有活动策略**(无 10 个策略的数量限制) - **完整策略名称**(最多 50 个字符,不截断) - 每个策略的成功/失败计数 - 成功率百分比 - 按性能进行颜色编码(绿色 ≥80%,黄色 50-79%,红色 <50%) - 每 50ms 实时更新 ### 配置管理: 以 **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 种输入方式: 1. **手动输入** - 逗号分隔的十六进制值(例如,`00,0a,0d`) 2. **预定义配置文件** - 针对常见场景的 13 个配置文件: - null-only, http-newline, http-whitespace - url-safe, sql-injection, xml-html - json-string, format-string, buffer-overflow - command-injection, ldap-injection - printable-only, alphanumeric-only ### 导航: - **方向键** (↑↓) 或 **j/k** (vi 风格):在菜单选项间导航 - **Enter**:选择高亮显示的选项 - **q**:退出应用程序或取消操作 - **0-9**:按数字快速选择菜单选项 - **Space**:(在文件浏览器目录模式中)选择当前目录 ### 要求: 交互模式需要系统安装 `ncurses` 库: ``` # Ubuntu/Debian sudo apt install libncurses-dev # CentOS/RHEL/Fedora sudo dnf install ncurses-devel # macOS (使用 Homebrew) 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. Process Single File" 3. 使用可视化文件浏览器浏览输入文件 4. 浏览选择输出文件位置 5. 开始处理并查看结果 **批处理:** 1. 启动 TUI:`byvalver --menu` 2. 选择 "2. Batch Process Directory" 3. 浏览包含 shellcode 文件的输入目录 4. 浏览选择输出目录 5. 配置文件模式(默认:.bin)和递归选项 6. 开始批处理并查看实时进度及策略统计 **配置管理:** 1. 在 TUI 中配置所有选项(坏字节、输出格式、ML 等) 2. 选择 "8. Load/Save Configuration" 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](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 可能无法使用特定的坏字节集完全清理干净 ### 未来改进 通用的坏字节功能为以下方面奠定了基础: - 针对特定坏字节模式的策略优化 - 自动发现针对常见坏字节组合的新策略 - 使用多样化的坏字节训练数据重新训练 ML 模型 - 扩展的测试和验证 ## 坏字节配置文件 ### 概述 用户还可以选择**坏字节配置文件** - 即针对常见漏洞利用场景预配置的字节集。无需手动指定十六进制值,只需使用与您的上下文相匹配的配置文件名称即可。 ### 可用配置文件 | 配置文件 | 难度 | 坏字节数 | 用例 | |---------|-----------|-----------|----------| | `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) | ### 用法 ``` # 列出所有可用的 profile byvalver --list-profiles # 使用特定的 profile byvalver --profile http-newline input.bin output.bin # 与其他选项结合使用 byvalver --profile sql-injection --biphasic --format c input.bin output.c ``` ### 配置文件示例 **HTTP 上下文**(消除 NULL, LF, CR): ``` byvalver --profile http-newline payload.bin http_safe.bin ``` **SQL 注入**(消除 NULL, 引号, 分号): ``` byvalver --profile sql-injection payload.bin sql_safe.bin ``` **仅限字母数字**(极端难度 - 仅允许 0-9, A-Z, a-z): ``` byvalver --profile alphanumeric-only payload.bin alphanum.bin ``` 有关详细的配置文件文档,请参见 [docs/BAD_BYTE_PROFILES.md](docs/BAD_BYTE_PROFILES.md)。 ## 功能特性 ### 极高的空字节清除成功率
在代表常见和复杂空字节来源的多样化测试语料库上实现了 100% 的空字节清除率。
### 高级转换引擎 170+ 种策略实现,几乎涵盖了所有常见的空字节来源和通用坏字节模式(在 v3.0、v3.6、v3.7、v3.8、v4.0 和 v4.1 中新增了多个策略家族): - `CALL/POP` 和基于栈的立即数加载 - 带有哈希 API 解析的 `PEB` 遍历 - 使用复杂算法的高级基于哈希的 API 解析 - 用于加载多个 DLL 的多阶段 `PEB` 遍历 - `SALC`、`XCHG` 和基于标志的清零操作 - `LEA` 算术替换 - `Shift` (移位) 和算术值构造 - 多 `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 新增**:感知配置文件的 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 新增**:带有 Capstone 动态模式选择的 ARM/ARM64 跨架构支持 - **v4.0 新增**:带有 MVN 转换的 ARM 立即数编码 - **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 位立即数策略(REX.W MOV 与 XOR/ADD 构造) - **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 新增**:扩展寄存器支持(R815 寄存器编码工具) - 全面支持 `MOV`,`ADD/SUB`,`XOR`,`LEA`,`CMP`,`PUSH` 等指令 该引擎采用多遍处理(混淆 → 去空化),并为边缘情况提供了健壮的回退机制 **v3.8 关键改进**:针对 http-whitespace 配置文件的多策略修复 - **问题**:硬编码的坏字节导致了 79.1% 的失败率(158 个文件中有 125 个失败) - **确定的根本原因**: - 15 个策略文件中存在 45+ 处硬编码的 SIB 字节 0x20 (SPACE) - 条件跳转核心逻辑使用了未经验证的坏字节跳过偏移量 - 部分寄存器优化直接写入了坏字节 - 5 个高优先级策略文件中存在额外的硬编码坏字节 - **实施的解决方案**: - 集中化的、感知配置文件的 SIB 生成,带有 3 级回退机制(STANDARD → DISP8 → PUSHPOP) - 针对条件跳转跳过偏移量的动态 NOP 填充,以避免坏字节 - 使用分解方法的智能字节构造,用于部分寄存器值 - 使用感知配置文件的替代方案系统性替换硬编码字节 - **影响**:**79.1% 失败率 → 35.4% 失败率**(成功率:**20.9% → 64.6%**) - **修复的文件**:现有 102 个文件处理成功(+69 个文件,3.09 倍提升) - **策略成功率**: - Partial Register Optimization (部分寄存器优化):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% ``` ``` ⚡ 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 的策略选择 **架构:** - **独热指令编码** (51 维) 取代了标量指令 ID - **上下文窗口**,包含 4 条指令的滑动缓冲区(当前 + 前 3 条) - **固定特征提取**,每条指令具有稳定的 84 维布局 - **稳定的策略注册表**,确保一致的 NN 输出映射 - **全反向传播**贯穿所有层(输入→隐藏→输出) - 针对 softmax + 交叉熵损失的**正确梯度计算** - **输出掩码**在 softmax 之前过滤无效策略 - 用于正确权重初始化的 **He/Xavier 初始化** - 3 层前馈神经网络 (336→512→200) - 从成功/失败反馈中进行自适应学习 - 跟踪预测、准确率和置信度 - 平稳回退到确定性排序 ### 批处理 - 递归目录遍历 (`-r`) - 自定义文件模式 (`--pattern "*.bin"`) - 保持或扁平化结构 - 遇错继续或严格模式 - 兼容所有选项(biphasic、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 ... ``` ### 输出选项 - 格式:raw 二进制,`C` 数组,Python bytes,十六进制字符串 - 带有解码器存根的 `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 Bad bytes: 3 configured Configured set: 0x00, 0x0a, 0x0d ==================================== FAILED FILES (31): - ./winwin.bin - ./stairslide_secure.bin ... 📊 DETAILED STATISTICS ===================== 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): - ./complex_payload.bin: 1245 instructions, 4096 -> 5201 bytes (1.27x) Largest Files (by input size): - ./large_payload.bin: 8192 bytes input, 10485 bytes output (1.28x) Smallest Files (by input size): - ./tiny_shellcode.bin: 64 bytes input, 89 bytes output (1.39x) Largest Expansion (by size ratio): - ./expanded.bin: 512 -> 1024 bytes (2.00x expansion) ``` ### 验证套件 用于验证的 Python 工具: - `verify_denulled.py`:确保零坏字节(支持 `--bad-bytes` 用于自定义验证) - `verify_functionality.py`:检查执行模式 - `verify_semantic.py`:验证等价性 ## 系统架构 `byvalver` 采用模块化的策略模式设计: - Pass 1:(可选)用于反分析的混淆 - Pass 2:用于空字节移除的去空化 - 用于策略优化的 ML 层 - 用于可扩展处理的批处理系统
Strategy Categories Taxonomy
## 系统要求 - **操作系统**: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 - **ML 训练**:数学库(已包含) ### 安装命令 **Ubuntu/Debian:** ``` sudo apt update sudo apt install build-essential nasm xxd pkg-config libcapstone-dev clang-format cppcheck valgrind ``` **macOS (Homebrew) — macOS Tahoe 26 及更新版本:** ``` # 核心构建依赖 brew install capstone nasm pkg-config # 在 macOS 上,xxd 通常已经存在于 /usr/bin/xxd。 # 如果由于某种原因不可用,请安装 Vim(xxd 与其捆绑在一起): brew install vim ``` ### macOS/Homebrew 构建修复 (仓库更改) 近期进行了一些更改以改善 macOS/Homebrew 的兼容性(尤其是在 Apple 芯片 + Homebrew 前缀 `/opt/homebrew` 上): - 更新了 `Makefile` 和 `makefile`,以**在编译期间使用 `CPPFLAGS`** 并**在链接期间使用 `LDLIBS`**,从而遵循 `pkg-config` 发现的 Capstone 标志。 - 将 Homebrew 的 `pkg-config` 发出的 Capstone include 路径从 `.../include/capstone` 标准化为 `.../include`,以便项目的 `#include ` 能够正确解析。 差异摘要(高级): - `$(CC) $(CFLAGS) -c ...` → `$(CC) $(CFLAGS) $(CPPFLAGS) -c ...` - `$(CC) $(CFLAGS) -o ... $(LDFLAGS)` → `$(CC) $(CFLAGS) $(CPPFLAGS) -o ... $(LDFLAGS) $(LDLIBS)` - `CAPSTONE_CFLAGS := pkg-config --cflags capstone` → 标准化为与 `` 兼容的 include 路径 ### 疑难解答 ``` # 验证 xxd 可用(macOS 通常附带 /usr/bin/xxd) command -v xxd # 验证 Capstone 可通过 pkg-config 发现 pkg-config --cflags capstone pkg-config --libs capstone # 清理重建 make clean make ``` **Windows (WSL):** 与 Ubuntu/Debian 相同。 ## 构建 使用 Makefile 进行构建: - 默认:`make`(优化的可执行文件) - 调试:`make debug`(符号, sanitizers) - 发布:`make release` (-O3,native) - 静态:`make static`(独立完整) - ML 训练器:`make train` (bin/train_model) - 清理:`make clean` 或 `make clean-all` 自定义: ``` make CC=clang CFLAGS="-O3 -march=native" CPPFLAGS="$(pkg-config --cflags capstone)" ``` 查看配置:`make info` ## 安装 全局安装: ``` sudo make install sudo make install-man ``` 卸载: ``` sudo make uninstall ``` 从 GitHub 安装: ``` 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`:文件 glob 匹配 - `--no-preserve-structure`:扁平化输出 - `--no-continue-on-error`:遇到错误时停止 - `--menu`:启动交互式 TUI 菜单 **示例:** ``` # 默认:仅消除 null 字节(经过充分测试,推荐) byvalver shellcode.bin clean.bin # v3.0 新功能:列出可用的 bad-byte profile byvalver --list-profiles # v3.0 新功能:为 HTTP 上下文使用预定义的 profile(消除 0x00、0x0A、0x0D) byvalver --profile http-newline shellcode.bin clean.bin # v3.0 新功能:为 SQL injection 上下文使用 profile byvalver --profile sql-injection shellcode.bin clean.bin # v3.0 新功能:为 URL 安全的 shellcode 使用 profile byvalver --profile url-safe shellcode.bin clean.bin # v3.0 新功能:手动指定 bad byte(实验性 - 未经广泛测试) byvalver --bad-bytes "00,0a,0d" shellcode.bin clean.bin # 与其他功能结合使用 byvalver --profile http-newline --biphasic --ml input.bin output.bin # 使用 profile 进行批处理 byvalver -r --profile http-whitespace --pattern "*.bin" shellcodes/ output/ # 启动交互式 TUI 模式 byvalver --menu ``` ## 混淆策略 `byvalver` 的混淆阶段(通过 `--biphasic` 启用)应用反分析技术: ### 核心混淆技术 - **`MOV Register Exchange`**:`XCHG`/push-pop 模式 - **`MOV Immediate`**:算术分解 - **`Arithmetic Substitution`**:复杂的等价形式 - **`Memory Access`**:间接寻址和 `LEA` - **`Stack Operations`**:手动 `ESP` 处理 - **`Conditional Jumps`**:`SETcc` 和 moves - **`Unconditional Jumps`**:间接机制 - **`Calls`**:`PUSH` + `JMP` - **`Control Flow Flattening`**:调度器状态 - **`Instruction Substitution`**:等价操作 - **`Dead Code`**:无害的插入 - **`Register Reassignment`**:数据流隐藏 - **`Multiplication by One`**:`IMUL` 模式 - **`NOP Sleds`**:可变填充 - **`Polymorphic NOP Insertion`**:多种 NOP 等效指令 (XCHG EAX,EAX, LEA, MOV) - **`Constant Unfolding`**:将立即数分解为算术运算 - **`Register Renaming`**:基于 XCHG 的寄存器替换 - **`Stack Spill Obfuscation`**:基于栈的算术运算 - **`Instruction Reordering`**:插入 NOP 的指令重排 - **`Runtime Self-Modification`**:自修改代码生成 - **`Overlapping Instructions`**:多重解释的字节序列 - **`Jump Decoys`**:虚假目标 - **`Relative Offsets`**:计算跳转 - **`Switch-Based`**:计算流 - **`Boolean Expressions`**:德·摩根等价 - **`Variable Encoding`**:可逆转换 - **`Timing Variations`**:延迟 - **`Register State`**:复杂操作 - **`Stack Frames`**:自定义管理 - **`API Resolution`**:复杂哈希 - **`String Encoding`**:运行时解码 - **`Constants`**:表达式生成 - **`Debugger Detection`**:混淆检查 - **`VM Detection`**:隐藏方法 优先级倾向于反分析(高)而非简单的替换(低)。 有关详细的策略文档,请参见 [OBFUSCATION_STRATS](docs/OBFUSCATION_STRATS.md)。 ## 去空化策略 核心去空阶段使用了 170 多种策略: ### `MOV` 策略 - 原始直通 - `NEG`,`NOT`,`XOR`,`Shift`,`ADD/SUB` 分解 ### 算术 -原始,`NEG`,`XOR`,`ADD/SUB` ### 跳转/控制 - `CALL/JMP` 间接寻址 - 通用内存位移 - 条件偏移消除 ### 高级 - ModR/M 绕过 - 保护标志的 `TEST` - `SIB` 寻址 - `PUSH` 优化 - Windows 特定:`CALL/POP`,`PEB` 哈希,`SALC`,`LEA` 算术,`shifts`,栈字符串等 ### 现代 x64 特性 - **RIP 相对优化**:偏移分解,双重 RIP 计算,基于栈的方法 - **位操作**:BSWAP 字节重排,BSF/BSR 2的幂构造,POPCNT 位计数,BMI2 PEXT/PDEP - **标志累积**:基于 SETcc 的条件跳转消除与线性标志操作 ### 混淆增强 - **多字节 NOP 交错**:算术 NOP,寄存器旋转,条件 NOP,FPU 操作 - **寄存器依赖链**:多指令模式优化,指令重排 - **负位移寻址**:基址寄存器调整,替代寻址模式 ### 内存/位移 - 位移空字节处理 - `LEA` 替代方案 策略通过 ML 或确定性顺序进行优先级排序和选择 模块化的注册表允许轻松添加新策略以处理新出现的 shellcode 模式。 有关详细的策略文档,请参见 [DENULL_STRATS](docs/DENULL_STRATS.md)。 ## ML 训练与验证 ### 训练 构建训练器:`make train` 运行:`./bin/train_model` - 数据:`./shellcodes/` - 输出:`./ml_models/byvalver_ml_model.bin` - 配置:10k 样本,50 个 epoch,20% 验证集,LR 0.001,批次大小 32 模型在运行时通过路径解析自动加载。 ### 测试 ML 模式 ``` # 冒烟测试 ./bin/byvalver --ml shellcodes/linux_x86/execve.bin output.bin # 检查注册表初始化 ./bin/byvalver --ml test.bin output.bin 2>&1 | grep "ML Registry" # 预期:"ML Registry] Initialized with XXX strategies" # 结合学习的批处理 ./bin/byvalver --ml --batch shellcodes/linux_x86/*.bin output/ # 查看指标 cat ml_metrics.log ``` **建议:** 在投入生产使用之前,ML 模式需要使用多样化的坏字节数据集进行重新训练。目前仅针对空字节清除进行了优化。 ## Agent 集合 `byvalver` 附带了一个**AI 驱动的 agent 流水线** (`agents/`),它可以自主发现策略注册表中的空白,提出一种新颖的坏字节消除技术,生成完整的 C 语言实现,并将其接入项目——只需一条命令即可完成。 该流水线构建在 [AjintK](AjintK/) 多提供者 agent 框架之上,并支持 **Anthropic**,**DeepSeek**,**Qwen**,**Mistral** 和 **Google** 作为 LLM 后端。 ### 快速开始 ``` # 需要为您选择的 provider 提供 API key export ANTHROPIC_API_KEY="..." # or DEEPSEEK_API_KEY, QWEN_API_KEY, etc. # --- 专用生成器 --- # 1. 通用技术生成器(发现 → 提议 → 生成 → 实现) python3 run_technique_generator.py # 2. 混淆技术生成器(专门用于反分析/规避) python3 run_obfuscation_generator.py # 3. Bad-Byte 消除生成器(针对受限字节消除) python3 run_badbyte_generator.py # 4. 特定 Profile 的策略生成器(针对特定的 bad-byte profile) python3 run_profile_generator.py --profile alphanumeric-only # --- 常用选项 --- # Dry-run:仅发现和提议,不写入任何文件 python3 run_technique_generator.py --dry-run # 针对特定的架构 python3 run_technique_generator.py --arch x64 # 使用不同的 provider / model python3 run_technique_generator.py --provider deepseek --model deepseek-chat ``` ### 流水线阶段 | 阶段 | Agent | 功能描述 | |---|---|---| | 1 | `StrategyDiscoveryAgent` | 扫描 `src/`,提取所有 340+ 个策略名称和类别,要求 LLM 总结覆盖空白 | | 2 | `TechniqueProposalAgent` | 根据目录,提出一种真正新颖的技术,包含原理说明、目标指令和方法 | | 3 | `CodeGenerationAgent` | 生成符合 `strategy_t` 的完整 `.h` + `.c` 实现,以 `strategy.h`/`utils.h`/`mov_strategies.c` 作为参考 | | 4 | `ImplementationAgent` | 将文件写入 `src/`,修补 `strategy_registry.c`(include → 前置声明 → 注册调用),运行 `make` | ### 选项 ``` --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 ``` ### 要求 ``` # 安装 Python 依赖项(使用 AjintK framework) pip install anthropic tenacity httpx pyyaml # 或者使用 uv(更快) uv pip install -r AjintK/requirements.txt ``` 该流水线已通过 **DeepSeek** (`deepseek-chat`) 和 **Anthropic** (`claude-sonnet-4-6`) 验证。 在典型的运行中,它会发现 340 多个策略,提出一种技术(例如,针对 SSE/AVX 指令的 VEX 前缀重新编码),生成约 200 行 C 代码,并生成一个干净的构建——完全无需人工干预。 有关架构详情和如何使用新 agent 扩展流水线,请参见 [docs/AGENT_MENAGERIE.md](docs/AGENT_MENAGERIE.md)。 ## 开发 - 现代化的 `C`,具有高度模块化 - 测试套件:`bash tests/run_tests.sh`(参见 [tests/README.md](tests/README.md)) - 代码风格:Clang-Format(配置:[.clang-format](.clang-format)),运行 `make format` - 分析工具:Cppcheck,Valgrind - Docker:`docker build -t byvalver .`(参见 [Dockerfile](Dockerfile)) - 贡献指南:参见 [CONTRIBUTING.md](CONTRIBUTING.md) - 路线图:参见 [ROADMAP.md](ROADMAP.md) ## 文档 完整文档可在 [docs/](docs/) 目录中找到: | 文档 | 描述 | |---|---| | [docs/USAGE.md](docs/USAGE.md) | 包含示例的综合使用指南 | | [docs/BUILD.md](docs/BUILD.md) | 构建说明和特定平台的注意事项 | | [docs/TUI_README.md](docs/TUI_README.md) | 交互式 TUI 文档 | | [docs/DENULL_STRATS.md](docs/DENULL_STRATS.md) | 去空化策略目录 | | [docs/OBFUSCATION_STRATS.md](docs/OBFUSCATION_STRATS.md) | 混淆技术文档 | | [docs/BAD_BYTE_PROFILES.md](docs/BAD_BYTE_PROFILES.md) | 坏字节配置文件参考 | | [docs/BADBYTEELIM_STRATS.md](docs/BADBYTEELIM_STRATS.md) | 扩展消除策略 | | [docs/STRATEGY_HIERARCHY.md](docs/STRATEGY_HIERARCHY.md) | 策略组织和优先级 | | [docs/ADVANCED_STRATEGIES.md](docs/ADVANCED_STRATEGIES.md) | 高级转换技术 | | [docs/WHITEPAPER.md](docs/WHITEPAPER.md) | 技术白皮书 | | [docs/AGENT_MENAGERIE.md](docs/AGENT_MENAGERIE.md) | Agent 流水线:自动技术生成 | ## 疑难解答 - 依赖项:验证 `Capstone`/`NASM`/xxd - 构建:检查 PATH_MAX,头文件 - ML:确保模型路径正确 - 空字节:确认输入格式,依赖项 对于持续存在的问题,请使用详细模式并检查日志 如果在特定的 shellcode 上坏字节清除失败,请考虑向注册表中添加针对性的策略。 ## 许可证 `byvalver` 在 [UNLICENSE](./UNLICENSE) 许可下自由发布于世。
标签:ARM64, C++, DNS 反向解析, Shellcode, TUI, x64, x86, 中高交互蜜罐, 二进制漏洞利用, 代码混淆, 坏字节清理, 客户端加密, 恶意软件开发, 技术调研, 指令集架构, 数据展示, 数据擦除, 文件处理, 汇编编码, 红队, 编码器, 编译器, 网络安全, 解码器, 逆向工具, 隐私保护