シェルコードのバッドバイト追放者
概要 • クイックスタート • インタラクティブTUI • ターゲット指定のバッドバイト除去 • バッドバイトプロファイル • 機能 • アーキテクチャ • システム要件 • 依存関係 • ビルド • インストール • 使い方 • 難読化戦略 • ヌル除去戦略 • MLトレーニング • エージェント メナジェリー • 開発 • トラブルシューティング • ライセンス
byvalver は、C で構築されたCLIツールで、x86/x64/ARM/ARM64 シェルコードから bad-bytes を完全な機能等価性を維持しながら自動的に除去(「追放」)します。
v4.0 の新機能: クロスアーキテクチャ対応
--arch フラグによる Capstone モードの自動選択v4.0.1 バグ修正:
can_handle ロジックを修正v4.2 の新機能: x64 サポートの強化
is_64bit_register()、is_extended_register()、build_rex_prefix()このツールは Capstone 逆アセンブルフレームワークを使用して命令を解析し、ランク付けされた 175 以上の変換戦略を適用して、bad-byte を含むコードを同等の代替コードに置き換えます。
汎用 bad-byte 追放フレームワークは、2 種類の使用モードを提供します:
--bad-bytes オプションで、追放する任意のバイトを指定できます(例: 改行セーフなシェルコード用に --bad-bytes "00,0a,0d")--profile オプションは、一般的なエクスプロイトシナリオ向けの事前設定済みバッドバイトセットを使用します(例: --profile http-newline、--profile sql-injection、--profile alphanumeric-only)Windows、Linux、macOS に対応
コア技術:
C 実装CapstoneNASM[!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 (デフォルト):```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
変換したシェルコードは必ず検証してください:```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-bit)** - 基本的な戦略による実験的サポート```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
**注記:**
- ARM/ARM64 サポートはコア命令(MOV、算術演算、ロード/ストア)に重点を置いています
- ARM にはよりシンプルな bad-byte プロファイルを使用してください(例:ヌルバイトのみ)
- ARM/ARM64 を選択した場合、実験的警告が表示されます
- 基本的なアーキテクチャ不一致検出により、シェルコードが誤ったアーキテクチャであると思われる場合に警告します
- 自動アーキテクチャ検出は将来のリリースで計画されています
### バッチ処理
ディレクトリ全体を処理します:```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
### MAIN FEATURES:
TUI は、CLI の全機能を網羅する 9x のメインメニューオプションを提供します:
1. **Process Single File** - 視覚的なフィードバック付きで個々の shellcode ファイルを処理します
2. **Batch Process Directory** - ライブ進行状況の追跡でディレクトリ全体を処理します
3. **Configure Processing Options** - biphasic モード、PIC 生成、ML、verbose、dry-run を切り替えます
4. **Set Bad Bytes** - 手動入力、または 13 種類の定義済みプロファイルから選択します
5. **Output Format Settings** - 5 つの出力形式(raw、C、Python、PowerShell、hexstring)から選択します
6. **ML Metrics Configuration** - ML 戦略の選択とメトリクスの追跡を設定します
7. **Advanced Options** - XOR エンコーディング、タイムアウト、制限、検証設定
8. **Load/Save Configuration** - INI スタイルの設定ファイル管理
9. **About byvalver** - バージョンとヘルプ情報
### VISUAL FILE BROWSER:
- **Directory navigation** は、矢印キーまたは vi スタイルの j/k キーを使用します
- **File/directory distinction** は [FILE] と [DIR] インジケーターで表示します
- **File size display** は人間が読みやすい形式(B、KB、MB、GB)で表示します
- **Extension filtering**(例: *.bin)
- **Intelligent path handling** - ファイルパスが指定された場合は自動的に親ディレクトリへ移動します
- **Sorted display** - ディレクトリを先頭に、その後にアルファベット順
- **Multiple selection modes**:
- ファイル選択モード: ディレクトリ内を移動し、ファイルのみを選択
- ディレクトリ選択モード: バッチ処理用のディレクトリを選択
- 両方モード: ファイルまたはディレクトリのいずれかを選択
### BATCH PROCESSING WITH LIVE UPDATES:
バッチ処理画面は **リアルタイムフィードバック** を提供します:
- **Progress bar** 処理済みファイルを表示(例: `[============== ] 52/100 files`)
- **Configuration display** アクティブな設定を表示:
- 使用した bad bytes の数とプロファイル
- 処理オプション(`Biphasic`、`PIC`、`XOR`、ML)
- 出力形式
- **Live file statistics** 色分けされたステータス付き:
- 完了: X / Y(試行ファイル数 / 合計)
- ✅ 成功(GREEN)- 残りの bad bytes がゼロ
- ❌ 失敗(RED)- エラーまたは残りの bad bytes
- 成功率(パーセント)
- **Current file display** 太字テキストで表示
- **Next file preview** 黄色/暗いテキストで表示
- **Dynamic strategy statistics table** 以下を表示:
- **All active strategies**(10 戦略の制限なし)
- **Full strategy names**(最大 50 文字、切り詰めなし)
- 戦略ごとの成功/失敗数
- 成功率パーセンテージ
- パフォーマンスによる色分け(緑 ≥80%、黄 50-79%、赤 <50%)
- 50ms ごとにリアルタイム更新
### CONFIGURATION MANAGEMENT:
**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
The application will automatically detect if ncurses is available and enable TUI support accordingly.
### BUILD OPTIONS:
The TUI support is conditionally compiled based on ncurses availability:
- Default build: `make` - Includes TUI if ncurses is available
- Force TUI build: `make with-tui` - Builds with TUI support (fails if ncurses not available)
- Exclude TUI: `make no-tui` - Builds without TUI support for smaller binary
### EXAMPLE WORKFLOWS:
**SINGLE FILE PROCESSING:**
1. Launch TUI: `byvalver --menu`
2. Select "1. Process Single File"
3. Browse for input file using visual file browser
4. Browse for output file location
5. Start processing and view results
**BATCH PROCESSING:**
1. Launch TUI: `byvalver --menu`
2. Select "2. Batch Process Directory"
3. Browse for input directory containing shellcode files
4. Browse for output directory
5. Configure file pattern (default: <file>.bin) and recursive option
6. Start batch processing and watch live progress with strategy statistics
**CONFIGURATION MANAGEMENT:**
1. Configure all options in the TUI (bad bytes, output format, ML, etc.)
2. Select "8. Load/Save Configuration"
3. Save current configuration to a file (e.g., `my_config.conf`)
4. Later: Load the configuration file to restore all settings
### PERFORMANCE NOTES:
- **Single file processing**: Instant visual feedback, <1 second for typical shellcode
- **Batch processing**: 50ms delay between files for visual updates
- **Large directories (100+ files)**: Scanning may take 1-2 seconds
- **Strategy initialization**: 2-5 seconds on first run (one-time cost per session)
### TERMINAL COMPATIBILITY:
The TUI has been tested with:
- GNOME Terminal
- Konsole
- xterm
- iTerm2 (macOS)
- Windows Terminal (WSL)
- tmux/screen (works but may have color limitations)
**Minimum recommended terminal size**: 80x24 characters (100x30 or larger recommended for full strategy table during batch processing)
For complete TUI documentation, troubleshooting, and advanced usage, see [TUI_README.md](https://github.com/umpolungfish/byvalver/blob/main/TUI_README.md).
## TARGETED BAD-BYTE BANISHMENT
### OVERVIEW
The `--bad-bytes` option allows you to specify any set of bytes to banish from your shellcode.
### IMPLEMENTATION DETAILS
`byvalver` operates by:
1. Parsing the comma-separated hex byte list (e.g., `"00,0a,0d"`)
2. Using an O(1) bitmap lookup to identify bad bytes in instructions
3. Applying the same 153+ transformation strategies used for null-byte elimination
4. Verifying that the output does not contain the specified bad bytes
### EXPECTED BEHAVIOR
- **Null bytes only** (`--bad-bytes "00"` or default): High success rate (100% on test corpus)
- **Multiple bad bytes** (`--bad-bytes "00,0a,0d"`): Success rate may vary significantly depending on:
- Which specific bytes are marked as bad
- Complexity of the input shellcode
- Frequency of bad bytes in the original shellcode
- Whether effective alternative encodings exist for the specific bad byte set
### RECOMMENDATIONS
1. **For production use:** Stick with default null-byte banishment mode
2. **For experimentation:** Test the `--bad-bytes` feature with your specific use case and validate the output
3. **Always verify:** Use `verify_denulled.py --bad-bytes "XX,YY"` to confirm all bad bytes were eliminated
4. **Expect variability:** Some shellcode may not be fully cleanable with certain bad byte sets
### FUTURE IMPROVEMENTS
The generic bad-byte feature provides a foundation for:
- Strategy optimization for specific bad byte patterns
- Automated discovery of new strategies targeting common bad byte combinations
- ML model retraining with diverse bad byte training data
- Extended testing and validation
> [!CAUTION]
> Using `--bad-bytes` with multiple bad bytes significantly increases the complexity of the transformation task. Some shellcode may become impossible to transform if too many bytes are marked as bad, as the tool may run out of alternative encodings. Start with small bad byte sets (e.g., `"00,0a"`) and expand gradually while testing the output. Always verify the result with `verify_denulled.py` before deployment.
## BAD-BYTE PROFILES
### OVERVIEW
Users can also choose **bad-byte profiles** - pre-configured sets of bytes for common exploit scenarios. Instead of manually specifying hex values, use profile names that match your context.
### AVAILABLE PROFILES
| プロファイル | 難易度 | バッドバイト数 | ユースケース |
|---------|-----------|-----------|----------|
| `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 | シェルコマンドインジェクション |
| `ldap-injection` | ███░░ 中 | 5 | `LDAP` クエリ |
| `printable-only` | ████░ 高 | 161 | テキストベースのプロトコル(印刷可能なASCIIのみ) |
| `alphanumeric-only` | █████ 極限 | 194 | 英数字のみのシェルコード(0-9, A-Z, a-z) |
### USAGE```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
詳細なプロファイルのドキュメントについては、[docs/BAD_BYTE_PROFILES.md](https://github.com/umpolungfish/byvalver/blob/main/docs/BAD_BYTE_PROFILES.md) を参照してください。
## 機能
### 高いNULLバイト除去成功率
<div align="center">
<strong>一般的かつ複雑なNULLバイト発生源を代表する多様なテストコーパスにおいて、100%のNULLバイト除去を達成しました。</strong>
</div>
> この成功率は、特にNULLバイト(`\x00`)の除去に適用されるものであり、広範囲にわたってテストおよび最適化されています。
### 高度な変換エンジン
170以上のストラテジ実装により、ほぼすべての一般的なNULLバイト発生源と一般的なbadバイトパターンをカバーしています(v3.0、v3.6、v3.7、v3.8、v4.0、v4.1で追加された新しいストラテジファミリーも多数含む):
- `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の新機能**: 条件付きジャンプオペコードのbadバイト除去(JE/JNE/JG/JL のbadオペコード)
- **v3.7の新機能**: レジスタ間転送のbadバイトオペコード(MOV/XCHG の代替)
- **v3.7の新機能**: スタックフレームポインタのbadバイト除去(PUSH/POP EBP の代替)
- **v3.7の新機能**: ModR/M および SIB バイトのbadバイト除去(代替レジスタ組み合わせ)
- **v3.7の新機能**: マルチバイト即値の部分badバイト(ローテーション最適化)
- **v3.7の新機能**: ビット演算即値のbadバイト(AND/OR/XOR/TEST とレジスタ)
- **v3.7の新機能**: 1バイトオペコード置換(INC/DEC/PUSH/POP の代替)
- **v3.7の新機能**: 文字列命令プレフィックスのbadバイト(REPプレフィックスをループに変換)
- **v3.7の新機能**: オペランドサイズプレフィックスのbadバイト(16ビットから32ビットへの変換)
- **v3.7の新機能**: セグメントレジスタのbadバイト検出(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ベースのNULL回避)
- **v4.0の新機能**: ARM算術ストラテジ(SUB変換を伴うADD)
- **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ストラテジ互換レイヤー(128以上のx86ストラテジをx64で有効化)
- **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 のNULL除去)
- **v4.2の新機能**: LEA x64変位ストラテジ(REXプレフィックスによる大きな変位の処理)
- **v4.2の新機能**: 拡張レジスタサポート(R8-R15レジスタエンコードユーティリティ)
- `MOV`、`ADD/SUB`、`XOR`、`LEA`、`CMP`、`PUSH` などを包括的にサポート
エンジンはマルチパス処理(難読化 → ヌルバイト除去)を採用し、エッジケースに備えた堅牢なフォールバックメカニズムを備えています。
**v3.8 重大な改善**: http-whitespaceプロファイル向けマルチストラテジ修正
- **問題**: ハードコードされたbadバイトにより79.1%の失敗率(158ファイル中125ファイルが失敗)
- **特定された根本原因**:
- 15のストラテジファイルにわたって、ハードコードされたSIBバイト 0x20(SPACE)が45以上
- 条件付きジャンプのコアロジックが、検証なしにbadバイトスキップオフセットを使用
- 部分レジスタ最適化がbadバイトを直接書き込む
- 優先度HIGHの5つのストラテジファイルに追加のハードコードされたbadバイト
- **実装された解決策**:
- 3層フォールバック(STANDARD → DISP8 → PUSHPOP)を備えた集中型プロファイル対応SIB生成
- badバイトを回避するための条件付きジャンプスキップオフセットへの動的NOPパディング
- 分解を用いた部分レジスタ値のインテリジェントなバイト構築
- ハードコードされたバイトをプロファイル対応の代替手段へ系統的に置換
- **影響**: **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個の多様なシェルコードサンプルを処理した実世界のパフォーマンスデータ:```
📊 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` モードは、denulling の前に解析対策用の難読化を追加します:
- 制御フロー平坦化
- ディスパッチャパターン
- レジスタ再割り当て
- 状態難読化
- デッドコード挿入
- NOPスレッド
- 命令置換
- 等価演算
- スタックフレーム操作
- API 解決の隠蔽
- 文字列エンコーディング
- 定数エンコーディング
- アンチデバッグ
- VM 検出技術
### MLを活用した戦略選択
> **成熟度: Beta v2.0** — nullバイト除去データセットで学習済み。一般的な bad byte のユースケースには再学習が必要です。
**アーキテクチャ**:
- **One-hot 命令エンコーディング** (51次元) がスカラ命令IDを置き換えます
- **コンテキストウィンドウ** (現在 + 過去3件の4命令のスライディングバッファ)
- **固定特徴抽出** (命令ごとに安定した84次元レイアウト)
- **安定した戦略レジストリ** (一貫したNN出力マッピングを保証)
- **全層逆伝播** (入力→隠れ層→出力)
- **ソフトマックス + 交差エントロピー損失に対する正しい勾配計算**
- **出力マスキング** (ソフトマックスの前に無効な戦略をフィルタリング)
- **He/Xavier 初期化** (適切な重み初期化のため)
- 3層フィードフォワードニューラルネットワーク (336→512→200)
- 成功/失敗フィードバックからの適応学習
- 予測、精度、信頼度を追跡
- 決定的順序へのグレースフルフォールバック
> [!WARNING]
> ML モードは実験的であり、新しいアーキテクチャでのさらなるトレーニング/検証が必要です。
### バッチ処理
- 再帰的ディレクトリ走査 (`-r`)
- カスタムファイルパターン (`--pattern "*.bin"`)
- 構造の保持または平坦化
- エラー時続行または厳格モード
- すべてのオプションと互換性あり (biphasic, PIC, `XOR` など)
- **拡張出力**:
- ファイルごとのサイズ変換と比率
- 失敗時の詳細な bad byte の特定
- サマリーの成功/失敗率
- 失敗したファイルのリスト (最初の10件をインライン表示)
- 厳格な成功定義: 残存 bad byte のあるファイルは失敗としてマーク
**バッチ処理出力例:**```
===== 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] 大量のシェルコードコレクションをバッチ処理する場合、
--no-continue-on-errorを使用して問題のあるファイルを早期に特定し、その後--patternで失敗したものを除外して正常に処理します。--verboseフラグは進行状況の追跡と、特定のシェルコードコーパスに最適な戦略の特定に役立ちます。ファイルは 残りの不良バイトがゼロ の場合のみ成功と見なされます - 部分的な成功は失敗として扱われます。
C 配列、Python bytes、16進文字列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: ヌルバイト除去のためのデヌル化
- 戦略最適化のためのMLレイヤー
- スケーラブルな処理のためのバッチシステム
<div align="center">
<img src="https://assets.kitploit.com/production/public/readmes/9982/8d3a1e20481460fedecaecda6f87bc21355fbbb1f1ef58d7fef4427eda36a381.png" alt="戦略カテゴリの分類" width="700">
</div>
## システム要件
- **OS**: Linux(Ubuntu/Debian/Fedora)、macOS(Homebrew使用)、Windows(WSL/MSYS2経由)
- **CPU**: x86/x64(最新命令セット対応)
- **RAM**: 空き1GB
- **Disk**: 空き50MB
- **Tools**: `C`コンパイラ、Make、Git(推奨)
## 依存関係
- **コア**: GCC/Clang、GNU Make、`Capstone` (v4.0+)、`NASM` (v2.13+)、xxd
- **オプション**: Clang-Format、Cppcheck、Valgrind
- **MLトレーニング**: 数学ライブラリ(同梱)
### インストールコマンド
**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 (シンボル、サニタイザー)make release (-O3、ネイティブ)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`: 除外するカンマ区切りの16進バイト(デフォルト: "00")
- `--profile NAME`: 定義済みの bad-byte プロファイルを使用(例: http-newline, sql-injection)
- `--list-profiles`: 利用可能なすべての bad-byte プロファイルを一覧表示
- `--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 Register Exchange: XCHG/push-pop パターンMOV Immediate: 算術分解Arithmetic Substitution: 複雑な等価表現Memory Access: 間接参照と LEAStack Operations: 手動 ESP ハンドリングConditional Jumps: SETcc と moveUnconditional Jumps: 間接的な仕組みCalls: PUSH + JMP優先順位は、単純な置換(低)よりも解析対策(高)を重視します。
詳細な戦略ドキュメントについては、OBFUSCATION_STRATS を参照してください。
コアの denull パスは 170 以上の戦略を使用します:
MOV 戦略NEG、NOT、XOR、Shift、ADD/SUB による分解NEG、XOR、ADD/SUBCALL/JMP 間接TESTSIB アドレッシングPUSH 最適化CALL/POP、PEB ハッシュ、SALC、LEA 算術、シフト演算、スタック文字列などLEA の代替戦略は ML または決定論的な順序で優先順位付けされ、選択されます
モジュール式レジストリにより、新しいシェルコードパターンに対応する戦略を簡単に追加できます。
詳細な戦略ドキュメントについては、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モードは、本番運用前に多様なbad-byteデータセットで再トレーニングする必要があります。現在はnull-byteの排除のみに最適化されています。
## エージェント・コレクション
`byvalver` には、**AI搭載のエージェントパイプライン**(`agents/`)が同梱されており、戦略レジストリのギャップを自律的に発見し、新規のbad-byte除去テクニックを提案し、完全なC実装を生成してプロジェクトに組み込むことができます。すべてを単一のコマンドで実行できます。
このパイプラインは [AjintK](https://github.com/umpolungfish/byvalver/blob/main/AjintK) マルチプロバイダーエージェントフレームワーク上に構築されており、LLMバックエンドとして **Anthropic**、**DeepSeek**、**Qwen**、**Mistral**、**Google** をサポートしています。
### クイックスタート```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 を参照してください。
Cbash tests/run_tests.sh(tests/README.md を参照)make format を実行docker build -t byvalver .(Dockerfile を参照)完全なドキュメントは docs/ ディレクトリにあります:
Capstone/NASM/xxd を確認問題が解決しない場合は、verboseモードを使用してログを確認してください
特定のシェルコードでbad-byte除去が失敗する場合は、対象を絞った戦略をレジストリに追加することを検討してください。
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 | 基本 | フレームワーク対応、最小限の戦略 |
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: 秘匿された方法| ステージ | エージェント | 処理内容 |
|---|
| 1 | StrategyDiscoveryAgent | src/ をスキャンし、340以上のストラテジー名とカテゴリを抽出し、LLMにカバレッジギャップの要約を依頼します |
| 2 | TechniqueProposalAgent | カタログを基に、根拠、対象命令、アプローチを含む真に新しい1つの手法を提案します |
| 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 | Denullification(ヌルバイト除去)戦略カタログ |
| docs/OBFUSCATION_STRATS.md | 難読化テクニックのドキュメント |
| docs/BAD_BYTE_PROFILES.md | Bad-byteプロファイルリファレンス |
| docs/BADBYTEELIM_STRATS.md | 拡張除去戦略 |
| docs/STRATEGY_HIERARCHY.md | 戦略の構成と優先順位 |
| docs/ADVANCED_STRATEGIES.md | 高度な変換テクニック |
| docs/WHITEPAPER.md | 技術ホワイトペーパー |
| docs/AGENT_MENAGERIE.md | エージェントパイプライン:自動テクニック生成 |