Visual, block-based Red Team exploit factory. Build multi-stage exploit chains by dragging blocks — no boilerplate, no guesswork.
ViperForge is intended exclusively for authorized penetration testing, CTF competitions, and security research in controlled lab environments.
Using this tool against systems you do not own or lack explicit written permission to test is illegal. The authors assume no liability for misuse.
Three-pane layout: Exploit Block Palette (left) · Canvas (center) · Parameters + Live Preview (right).
Drag blocks onto the canvas, chain them with the ▼ connector, fill in parameters — hit GENERATE EXPLOIT.
ViperForge v2.0 is a node-based exploit builder. Each exploit module is a block you place on a canvas. Connect blocks with arrow connectors to define the attack flow. ViperForge generates a single, clean Python exploit script from the entire chain — with deduped imports, a shared CTX context dictionary, and an optional XOR-encoded shellcode payload.
- Visual chain building — See your attack flow as a graph. No more copy-pasting boilerplate between scripts.
- 0-Day Builder micro-blocks — Compose primitive operations (socket, send/recv, encode, XOR, HTTP, file I/O…) into custom exploit flows from scratch.
- Evasion-first payloads — C shellcode is compiled with GCC, XOR-encoded with a random key, and embedded as a self-decoding Python
ctypes/mmapstub. No two outputs are identical. - Chain validator — Detects broken chains (missing sockets, undefined variables, empty fields) before generation.
- Dual interface — Full GUI for visual building; Rich-powered CLI for headless/terminal-only workflows.
| Feature | Description |
|---|---|
| 🧩 Visual Block Builder | Drag-and-drop exploit blocks on an infinite canvas |
| 🔗 Chain Mode | Connect blocks to generate multi-stage exploit scripts |
| ⚡ Live Code Preview | Python syntax-highlighted output updates in real time |
| 🛡️ Chain Validator | Pre-generation static analysis — catches errors before generation |
| 💾 Workspace Save / Load | Save your block canvas to JSON and reload it later |
| 🔐 Polymorphic XOR Encoder | Random key · ctypes/mmap self-decoding shellcode stub |
| ⚙️ C Payload Compiler | Auto-compiles .c sources → raw shellcode via gcc + objcopy |
| 🌐 36 Exploit Modules | 18 classic exploits + 18 Builder micro-blocks |
| 🖥️ CLI Mode | Full --cli shell with Rich formatting and Chain Builder mode |
Compose custom exploit flows from primitive operations. Designed to be chained together into a flat sequential script with a shared CTX dictionary.
| Module | Description |
|---|---|
builder_socket |
Create a TCP network socket |
builder_send |
Send data via socket |
builder_recv |
Receive data from socket |
builder_recv_until |
Receive until a pattern is matched (with timeout) |
builder_pack |
Pack integers/bytes into a struct buffer |
builder_p32_p64 |
Fast pack an integer to 32/64-bit little-endian |
builder_http_req |
HTTP GET / POST request |
builder_b64encode |
Base64 encode a variable |
builder_b64decode |
Base64 decode a variable |
builder_urlencode |
URL-encode a string |
builder_hex |
Hex encode or decode a variable |
builder_xor |
XOR a bytes variable with a key |
builder_shell_cmd |
Execute a local shell command (blocking / non-blocking) |
builder_read_file |
Read a local file into a variable |
builder_write_file |
Write a variable to a local file |
builder_print |
Print a message or variable to console |
builder_sleep |
Pause execution for N seconds |
builder_custom |
Inject arbitrary Python code |
| Module | Description |
|---|---|
bof_remote |
Remote Buffer Overflow via TCP |
bof_local |
Local Buffer Overflow (CLI Arguments / Stdin) |
rop_chain |
Return-Oriented Programming (ROP) Chain Generator |
format_string |
Format String Arbitrary Memory Write |
heap_uaf |
Heap Exploitation — Use-After-Free |
| Module | Description |
|---|---|
web_lfi |
Local File Inclusion → RCE (Log Poisoning) |
web_sqli |
Blind SQLi → RCE via INTO OUTFILE |
web_ssti |
Server-Side Template Injection (Jinja2/Flask) |
web_cmd_exec |
OS Command Injection via HTTP (Base64-encoded, WAF-evasive) |
web_xxe |
XML External Entity (XXE) Data Exfiltration |
web_deserialization |
Insecure Deserialization (Python Pickle) |
web_ssrf |
SSRF Internal Port Scanner |
| Module | Description |
|---|---|
privesc_suid |
SUID PATH Hijacking |
privesc_sudo_token |
Sudo Token Hijacking via /proc/[pid]/mem |
| Module | Description |
|---|---|
network_ftp_anon |
FTP Anonymous Login & Payload Upload |
network_smb_relay |
SMB Relay Attack (Wrapper) |
| Module | Description |
|---|---|
crypto_padding_oracle |
Padding Oracle Attack Automation |
| Module | Description |
|---|---|
ad_kerberoasting |
Kerberoasting Attack Automation (Impacket) |
- Python 3.10+
- GCC + binutils (for C payload compilation)
sudo apt install gcc binutils gcc-multilib
- Python dependencies:
pip install -r requirements.txt
requirements.txt:
PyQt6>=6.6.0
jinja2>=3.1.0
rich>=13.0.0
qtawesome>=1.3.0
# Clone the repository
git clone https://github.com/MrEx-Right/ViperForge.git
cd ViperForge
# Install Python dependencies
pip install -r requirements.txt
# Launch the GUI (default)
python viperforge.py
# Or launch the CLI
python viperforge.py --clipython viperforge.py- Double-click a block in the left palette to add it to the canvas.
- Click the ▼ connector at the bottom of a block and then click another block to chain them.
- Select a block and fill in its parameters in the right panel.
- Watch the live code preview update as you type.
- Click GENERATE EXPLOIT — choose a save path and the script is written instantly.
Toolbar actions:
| Button | Action |
|---|---|
| 💾 Save WS | Save current canvas state to a JSON workspace file |
| 📂 Load WS | Restore a previously saved canvas |
| 🗑️ Clear Canvas | Remove all blocks and connectors |
| 🔥 GENERATE EXPLOIT | Validate chain and generate the Python exploit script |
Canvas shortcuts:
| Input | Action |
|---|---|
| Scroll wheel | Zoom in / out |
| Middle mouse drag | Pan canvas |
Delete / Backspace |
Delete selected blocks or connectors |
| Right-click a block | Edit · Replace with another module · Delete |
python viperforge.py --cliSelect Single Exploit Mode to run the parameter wizard for a single module, or Chain Builder Mode to compose a multi-block chain interactively and generate the script in one step.
Before generating, ViperForge runs a static analysis pass on the block chain:
| Check | Severity |
|---|---|
builder_send/recv/recv_until used without a preceding builder_socket |
❌ Error |
| A block reads a variable not produced by any earlier block | |
builder_custom has an empty CODE field |
❌ Error |
builder_pack / builder_p32_p64 VALUE is not a valid integer/hex |
❌ Error |
builder_sleep SECONDS is not a valid number |
❌ Error |
builder_http_req URL does not start with http:// or https:// |
|
builder_read_file / builder_write_file FILE_PATH is empty |
❌ Error |
| Builder blocks and classic exploit blocks mixed in the same chain |
Errors block generation. Warnings are shown but do not prevent script output.
Scripts are saved to the output/ directory. Chain scripts include:
#!/usr/bin/env python3shebang- Auto-generated header with the block/module list
- Builder chains — flat sequential code with deduped imports and a shared
CTX = {}dict - Classic chains — each module wrapped in
stage_N_name()functions, called bymain() - Hybrid chains — builder blocks as flat code, classic modules as staged functions
Pre-built C payload sources in templates/payloads/:
| File | Description |
|---|---|
execve.c |
Linux execve("/bin/sh") — 32-bit x86 position-independent |
win_exec.c |
Windows shellcode via PEB parsing + API hashing (no import table) |
Payloads are compiled with GCC (-m32 -fno-stack-protector -z execstack -nostdlib -static), raw .text bytes extracted with objcopy, XOR-encoded with a random key, and embedded as a ctypes/mmap self-decoding Python stub.
1. Create a Jinja2 template in templates/exploits/my_exploit.j2:
#!/usr/bin/env python3
# ViperForge — my_exploit
import socket
r = socket.create_connection(("{{ RHOST }}", {{ RPORT }}))
# ... your exploit logic2. Register the module in viperforge/registry.py:
ExploitDef(
id=37, name="my_exploit", category="Binary Exploitation",
description="My Custom Exploit",
template="my_exploit",
options=[
ExploitOption("RHOST", "Target IP Address", "127.0.0.1"),
ExploitOption("RPORT", "Target Port", "4444"),
],
),ViperForge automatically discovers the new module — it appears in both the GUI palette and the CLI menus immediately.
viperforge.py ──────────────────────────────────────────────────
│ │
▼ (--cli) ▼ (default) │
viperforge/cli/shell.py viperforge/gui/ │
Rich-powered interactive shell ┌─────────────────────┐│
├─ Single Exploit Mode │ main_window.py ││
└─ Chain Builder Mode │ block_palette.py ││
│ canvas.py ││
│ block_item.py ││
│ connector.py ││
│ param_panel.py ││
│ preview_panel.py ││
└─────────────────────┘│
│ │
──────────────────────────┘ │
▼ │
viperforge/engine.py (Jinja2 rendering + chain assembly)
│
┌────────────┴────────────┐
▼ ▼
viperforge/compiler.py viperforge/encoder.py
(C source → shellcode) (XOR encode + ctypes/mmap stub)
│
▼
viperforge/validator.py (pre-generation chain analysis)
viperforge/registry.py (36 ExploitDef entries)
viperforge/session.py (per-block option storage)
| Package | Version | Purpose |
|---|---|---|
PyQt6 |
≥ 6.6.0 | GUI framework (PyQt5 also supported) |
jinja2 |
≥ 3.1.0 | Exploit template rendering |
rich |
≥ 13.0.0 | CLI formatting and interactive prompts |
qtawesome |
≥ 1.3.0 | FontAwesome icons in the GUI |
This project is licensed under the GNU General Public License v3.0 (GPLv3).
You are free to use, study, modify, and distribute this software under the terms of the GPLv3. Any derivative works must also be distributed under the same license.
See LICENSE for the full license text, or visit gnu.org/licenses/gpl-3.0.

