
takes shellcode bad-bytes and banishes them, returning cleaned shellcode with preserved functionalities
Overview • Quick Start • Interactive TUI • Targeted Bad-Byte Elimination • Bad-Byte Profiles • Features • Architecture • System Requirements • Dependencies • Building • Installation • Usage • Obfuscation Strategies • Denullification Strategies • ML Training • Agent Menagerie • Development • Troubleshooting • License
byvalver is a CLI tool built in C for automatically eliminating (or "banishing") bad-bytes from x86/x64/ARM/ARM64 shellcode while maintaining complete functional equivalence
NEW in v4.0: Cross-Architecture Support
| Architecture | Maturity | Strategies | Notes |
|---|---|---|---|
| x86 (32-bit Intel/AMD) | Stable v4.2 | 150+ | Production-tested, full coverage |
| x64 (64-bit Intel/AMD) | Stable v4.2 | 150+ | Default architecture, production-tested |
| ARM (32-bit) | Experimental v0.1 | 7 core | Limited testing, core instructions only |
| ARM64 (AArch64) | Experimental v0.1 | Basic | Framework ready, minimal strategies |
--arch flagv4.0.1 Bug Fixes:
can_handle logic for pass-through strategiesNEW in v4.2: Enhanced x64 Support
is_64bit_register(), is_extended_register(), build_rex_prefix()The tool uses the Capstone disassembly framework to analyze instructions and applies over 175+ ranked transformation strategies to replace bad-byte-containing code with equivalent alternatives
The generic bad-byte banishment framework provides 2x usage modes:
--bad-bytes option allows specification of arbitrary bytes to banish (e.g., --bad-bytes "00,0a,0d" for newline-safe shellcode)--profile option uses pre-configured bad-byte sets for common exploit scenarios (e.g., --profile http-newline, --profile sql-injection, --profile alphanumeric-only)Supports Windows, Linux, and macOS
CORE TECH:
C implementation for efficiency and low-level controlCapstone for precise disassemblyNASM for generating decoder stubs[!NOTE] Null-byte elimination (
--bad-bytes "00"or default): WELL-TESTED / Generic bad-byte elimination (--bad-bytes "00,0a,0d"etc.): NEWLY IMPLEMENTED

Get started with byvalver in minutes:
OPTION 1: FROM GITHUB (RECOMMENDED)
curl -sSL https://raw.githubusercontent.com/umpolungfish/byvalver/main/install.sh | bash
OPTION 2: BUILD FROM SOURCE
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):
byvalver input.bin output.bin
USING BAD-BYTE PROFILES:
# 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
MANUAL BAD-BYTE SPECIFICATION:
# banish null bytes and newlines
byvalver --bad-bytes "00,0a,0d" input.bin output.bin
ADVANCED FEATURES:
# 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
Always verify your transformed shellcode:
# Check for remaining bad bytes
python3 verify_denulled.py --bad-bytes "00,0a,0d" output.bin
# Verify functional equivalence
python3 verify_functionality.py input.bin output.bin
byvalver supports multiple architectures via the --arch flag:
x86 (32-bit Intel/AMD) - Fully supported with 150+ strategies
byvalver --arch x86 --bad-bytes "00" x86_shellcode.bin output.bin
x64 (64-bit Intel/AMD) - Fully supported (default)
byvalver --arch x64 --bad-bytes "00,0a,0d" x64_shellcode.bin output.bin
ARM (32-bit) - Experimental support with basic strategies
byvalver --arch arm --bad-bytes "00" arm_shellcode.bin output.bin
ARM64 (AArch64) - Experimental support with basic strategies
byvalver --arch arm64 --bad-bytes "00,0a" arm64_shellcode.bin output.bin
Notes:
Process entire directories:
# 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 includes an interactive TUI (Text User Interface) with 1:1 CLI feature parity.
The TUI provides an intuitive, visual interface for all bad-byte banishment operations, including:
Launch the TUI with the --menu flag:
byvalver --menu
The TUI provides 9x main menu options covering all CLI functionality:
The batch processing screen provides real-time feedback:
[============== ] 52/100 files)Biphasic, PIC, XOR, ML)Load and save configurations in INI-style format:
[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
See example.conf for a complete configuration template.
2x input methods available:
00,0a,0d)Interactive mode requires the ncurses library to be installed on your system:
# Ubuntu/Debian
sudo apt install libncurses-dev
# CentOS/RHEL/Fedora
sudo dnf install ncurses-devel
# macOS (with Homebrew)
brew install ncurses
The application will automatically detect if ncurses is available and enable TUI support accordingly.
The TUI support is conditionally compiled based on ncurses availability:
make - Includes TUI if ncurses is availablemake with-tui - Builds with TUI support (fails if ncurses not available)make no-tui - Builds without TUI support for smaller binarySINGLE FILE PROCESSING:
byvalver --menuBATCH PROCESSING:
byvalver --menuCONFIGURATION MANAGEMENT:
my_config.conf)The TUI has been tested with:
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.
The --bad-bytes option allows you to specify any set of bytes to banish from your shellcode.
byvalver operates by:
"00,0a,0d")--bad-bytes "00" or default): High success rate (100% on test corpus)--bad-bytes "00,0a,0d"): Success rate may vary significantly depending on:
--bad-bytes feature with your specific use case and validate the outputverify_denulled.py --bad-bytes "XX,YY" to confirm all bad bytes were eliminatedThe generic bad-byte feature provides a foundation for:
[!CAUTION] Using
--bad-byteswith 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 withverify_denulled.pybefore deployment.
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.
| Profile | Difficulty | Bad Bytes | Use Case |
|---|---|---|---|
null-only | ░░░░░ Trivial | 1 | Classic buffer overflows (default) |
http-newline | █░░░░ Low | 3 | HTTP headers, line-based protocols |
http-whitespace | █░░░░ Low | 5 | HTTP parameters, command injection |
url-safe | ███░░ Medium | 23 | URL parameters, GET requests |
sql-injection | ███░░ Medium | 5 | SQL injection contexts |
xml-html | ███░░ Medium | 6 | XML/HTML injection, XSS |
json-string | ███░░ Medium | 34 | JSON API injection |
format-string | ███░░ Medium | 3 | Format string vulnerabilities |
buffer-overflow | ███░░ Medium | 5 | Stack/heap overflows with filtering |
command-injection | ███░░ Medium | 20 | Shell command injection |
ldap-injection | ███░░ Medium | 5 | LDAP queries |
printable-only | ████░ High | 161 | Text-based protocols (printable ASCII only) |
alphanumeric-only | █████ Extreme | 194 | Alphanumeric-only shellcode (0-9, A-Z, a-z) |
# 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 Contexts (eliminates NULL, LF, CR):
byvalver --profile http-newline payload.bin http_safe.bin
SQL Injection (eliminates NULL, quotes, semicolons):
byvalver --profile sql-injection payload.bin sql_safe.bin
Alphanumeric-Only (extreme difficulty - only allows 0-9, A-Z, a-z):
byvalver --profile alphanumeric-only payload.bin alphanum.bin
For detailed profile documentation, see docs/BAD_BYTE_PROFILES.md.
This success rate applies specifically to null-byte (
\x00) elimination, which has been extensively tested and optimized.
170+ strategy implementations covering virtually all common null-byte sources and general bad-byte patterns (multiple new strategy families added in v3.0, v3.6, v3.7, v3.8, v4.0, and v4.1):
CALL/POP and stack-based immediate loadingPEB traversal with hashed API resolutionPEB traversal for multiple DLL loadingSALC, XCHG, and flag-based zeroingLEA for arithmetic substitutionShift and arithmetic value constructionPUSH string buildingSIB and displacement rewritingSALC+REP STOSB for buffer initializationFPU stack-based immediate encodingXLAT table-based byte translationLAHF/SAHF flag preservation chainsBCD arithmetic obfuscation (AAM/AAD)ENTER/LEAVE stack frame alternativesPOPCNT/LZCNT/TZCNT bit counting for constantsSIMD XMM register immediate loadingJECXZ/JRCXZ zero-test jump transformationsMOV, ADD/SUB, XOR, LEA, CMP, PUSH, and moreThe engine employs multi-pass processing (obfuscation → denulling) with robust fallback mechanisms for edge cases
v3.8 CRITICAL IMPROVEMENTS: Multi-Strategy Fix for http-whitespace Profile
Real-world performance data from processing 184 diverse shellcode samples:
📊 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 mode adds anti-analysis obfuscation prior to denulling:
Maturity: Beta v2.0 — Trained on null-byte elimination datasets. Needs retraining for generic bad-byte use cases.
Architecture:
[!WARNING] ML mode is experimental and requires further training/validation with the new architecture.
-r)--pattern "*.bin")XOR, etc.)BATCH PROCESSING OUTPUT EXAMPLE:
===== 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] For batch processing large shellcode collections, use
--no-continue-on-errorto identify problematic files early, then process successfully with--patternto exclude failures. The--verboseflag helps track progress and identify which strategies work best for your specific shellcode corpus. Files are only counted as successful when they contain zero remaining bad bytes - partial success is treated as failure.
C array, Python bytes, hex stringXOR encoding with decoder stub (--xor-encode 0xDEADBEEF)--pic)When using --stats flag, byvalver provides detailed analytics:
STRATEGY USAGE STATISTICS:
FILE COMPLEXITY ANALYSIS:
BATCH PROCESSING SUMMARY:
EXAMPLE OUTPUT:
===== 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 tools for validation:
verify_denulled.py: Ensures zero bad bytes (supports --bad-bytes for custom verification)verify_functionality.py: Checks execution patternsverify_semantic.py: Validates equivalencebyvalver employs a modular strategy-pattern design:
C compiler, Make, Git (recommended)Capstone (v4.0+), NASM (v2.13+), xxdUbuntu/Debian:
sudo apt update
sudo apt install build-essential nasm xxd pkg-config libcapstone-dev clang-format cppcheck valgrind
macOS (Homebrew) — macOS Tahoe 26 (AND NEWER):
# Core build deps
brew install capstone nasm pkg-config
# xxd is typically already present at /usr/bin/xxd on macOS.
# If it isn't available for some reason, install Vim (xxd is bundled with it):
brew install vim
Recent changes were made to improve macOS/Homebrew compatibility (notably on Apple silicon + Homebrew prefix /opt/homebrew):
Makefile and makefile to use CPPFLAGS during compilation and LDLIBS during linking, so pkg-config-discovered Capstone flags are honored.pkg-config from .../include/capstone to .../include so the project’s #include <capstone/capstone.h> resolves correctly.Diff summary (high level):
$(CC) $(CFLAGS) -c ... → $(CC) $(CFLAGS) $(CPPFLAGS) -c ...$(CC) $(CFLAGS) -o ... $(LDFLAGS) → $(CC) $(CFLAGS) $(CPPFLAGS) -o ... $(LDFLAGS) $(LDLIBS)CAPSTONE_CFLAGS := pkg-config --cflags capstone → normalized to an include path compatible with <capstone/capstone.h># 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): Same as Ubuntu/Debian.
Use the Makefile for builds:
make (optimized executable)make debug (symbols, sanitizers)make release (-O3, native)make static (self-contained)make train (bin/train_model)make clean or make clean-allCustomization:
make CC=clang CFLAGS="-O3 -march=native" CPPFLAGS="$(pkg-config --cflags capstone)"
View config: make info
Global install:
sudo make install
sudo make install-man
Uninstall:
sudo make uninstall
From GitHub:
curl -sSL https://raw.githubusercontent.com/umpolungfish/byvalver/main/install.sh | bash
byvalver [OPTIONS] <input> [output]
KEY OPTIONS:
-h, --help: Help-v, --version: Version-V, --verbose: Verbose-q, --quiet: Quiet--bad-bytes BYTES: Comma-separated hex bytes to banish (default: "00")--profile NAME: Use predefined bad-byte profile (e.g., http-newline, sql-injection)--list-profiles: List all available bad-byte profiles--biphasic: Obfuscate + denull--pic: Position-independent--ml: ML strategy selection--xor-encode KEY: XOR with stub--format FORMAT: raw|c|python|hexstring-r, --recursive: Recursive batch--pattern PATTERN: File glob--no-preserve-structure: Flatten output--no-continue-on-error: Stop on error--menu: Launch interactive TUI menuEXAMPLES:
# 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
The obfuscation pass of byvalver (enabled via --biphasic) applies anti-analysis techniques:
MOV Register Exchange: XCHG/push-pop patternsMOV Immediate: Arithmetic decompositionArithmetic Substitution: Complex equivalentsMemory Access: Indirection and LEAStack Operations: Manual ESP handlingConditional Jumps: SETcc and movesUnconditional Jumps: Indirect mechanismsCalls: PUSH + JMPControl Flow Flattening: Dispatcher statesInstruction Substitution: Equivalent opsDead Code: Harmless insertionsRegister Reassignment: Data flow hidingMultiplication by One: IMUL patternsNOP Sleds: Variable paddingPolymorphic NOP Insertion: Multiple NOP equivalents (XCHG EAX,EAX, LEA, MOV)Constant Unfolding: Break immediates into arithmetic operationsRegister Renaming: XCHG-based register substitutionStack Spill Obfuscation: Stack-based arithmetic operationsInstruction Reordering: NOP-inserted instruction shufflingRuntime Self-Modification: Self-modifying code generationOverlapping Instructions: Multi-interpretation byte sequencesJump Decoys: Fake targetsRelative Offsets: Calculated jumpsSwitch-Based: Computed flowBoolean Expressions: De Morgan equivalentsVariable Encoding: Reversible transformsTiming Variations: DelaysRegister State: Complex manipulationsStack Frames: Custom managementAPI Resolution: Complex hashingString Encoding: Runtime decodingConstants: Expression generationDebugger Detection: Obfuscated checksVM Detection: Concealed methodsPriorities favor anti-analysis (high) over simple substitutions (low).
See OBFUSCATION_STRATS for detailed strategy documentation.
The core denull pass uses over 170 strategies:
MOV STRATEGIESNEG, NOT, XOR, Shift, ADD/SUB decompositionsNEG, XOR, ADD/SUBCALL/JMP indirectsTESTSIB addressingPUSH optimizationsCALL/POP, PEB hashing, SALC, LEA arithmetic, shifts, stack strings, etc.LEA alternativesStrategies are prioritized and selected via ML or deterministic order
The modular registry allows easy addition of new strategies to handle emerging shellcode patterns.
See DENULL_STRATS for detailed strategy documentation.
Build trainer: make train
Run: ./bin/train_model
./shellcodes/./ml_models/byvalver_ml_model.binModel auto-loaded at runtime with path resolution.
# Smoke test
./bin/byvalver --ml shellcodes/linux_x86/execve.bin output.bin
# Check registry initialization
./bin/byvalver --ml test.bin output.bin 2>&1 | grep "ML Registry"
# Expected: "ML Registry] Initialized with XXX strategies"
# Batch processing with learning
./bin/byvalver --ml --batch shellcodes/linux_x86/*.bin output/
# View metrics
cat ml_metrics.log
RECOMMENDATION: ML mode needs retraining with diverse bad-byte datasets before production use. Currently optimized for null-byte banishment only.
byvalver ships an AI-powered agent pipeline (agents/) that can autonomously discover gaps in the strategy registry, propose a novel bad-byte elimination technique, generate a complete C implementation, and wire it into the project — all in a single command.
The pipeline is built on the AjintK multi-provider agent framework and supports Anthropic, DeepSeek, Qwen, Mistral, and Google as LLM backends.
# 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
| Stage | Agent | What it does |
|---|---|---|
| 1 | StrategyDiscoveryAgent | Scans src/, extracts all 340+ strategy names and categories, asks the LLM to summarise coverage gaps |
| 2 | TechniqueProposalAgent | Given the catalog, proposes one genuinely novel technique with rationale, target instruction, and approach |
| 3 | CodeGenerationAgent | Generates a complete .h + .c implementation conforming to strategy_t using strategy.h/utils.h/mov_strategies.c as reference |
| 4 | ImplementationAgent | Writes files to src/, patches strategy_registry.c (include → forward decl → register call), runs 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
# Install Python dependencies (uses AjintK framework)
pip install anthropic tenacity httpx pyyaml
# Or with uv (faster)
uv pip install -r AjintK/requirements.txt
The pipeline has been validated with DeepSeek (deepseek-chat) and Anthropic (claude-sonnet-4-6).
On a typical run it discovers 340+ strategies, proposes a technique (e.g. VEX prefix re-encoding for SSE/AVX instructions), generates ~200 lines of C, and produces a clean build — fully unattended.
See docs/AGENT_MENAGERIE.md for architecture details and extending the pipeline with new agents.
C with modularitybash tests/run_tests.sh (see tests/README.md)make formatdocker build -t byvalver . (see Dockerfile)Full documentation is available in the docs/ directory:
| Document | Description |
|---|---|
| docs/USAGE.md | Comprehensive usage guide with examples |
| docs/BUILD.md | Build instructions and platform-specific notes |
| docs/TUI_README.md | Interactive TUI documentation |
| docs/DENULL_STRATS.md | Denullification strategy catalog |
| docs/OBFUSCATION_STRATS.md | Obfuscation technique documentation |
| docs/BAD_BYTE_PROFILES.md | Bad-byte profile reference |
| docs/BADBYTEELIM_STRATS.md | Extended elimination strategies |
| docs/STRATEGY_HIERARCHY.md | Strategy organization and priority |
| docs/ADVANCED_STRATEGIES.md | Advanced transformation techniques |
| docs/WHITEPAPER.md | Technical whitepaper |
| docs/AGENT_MENAGERIE.md | Agent pipeline: auto-technique generation |
Capstone/NASM/xxdFor persistent issues, use verbose mode and check logs
If bad-byte banishment fails on specific shellcode, consider adding targeted strategies to the registry.
byvalver is sicced freely upon the Earth under the UNLICENSE.