Questo è uno strumento che ho provato a realizzare intorno al 2018, ma che non ho mai concluso a causa della mia mancanza di competenze e di interesse nello sviluppo di GUI. Ora lo uso come scusa per imparare il moderno vibe coding, accelerato e migliorato dalla mia esperienza maturata con il mio primo tentativo.
Questo è decisamente un WIP, ma a mio parere è già più comodo da usare rispetto al metodo tradizionale di scrivere assembly, usare objdump, formattarlo, inserirlo in un programma C ed eseguirlo tramite GDB.
Funzionalità
Supporto Linux
Assembler x86_64
Debugger per architettura nativa (x86_64)
Assembler cross-architettura (x86, x86_64, ARM, ARM-Thumb, AArch64, RiscV) (disassembler non-x86 attualmente rotto, è necessario trovare un disassembler alternativo puramente in Rust)
Sintassi Intel
Sintassi AT&T
Riferimento alle syscall Linux x86_64
Packer di strutture di indirizzi IP
Visualizzatore/editor dei registri
Visualizzatore/editor della memoria
Rilevamento ed evidenziazione dei badchars
Formattazione multilingua dello shellcode (hex grezzo, Python, C, Rust)
Riferimento al set di istruzioni
Supporto in-browser tramite wasm
Supporto multipiattaforma (Windows, macOS)
Supporto al debug cross-architettura (tramite emulazione)
Debugger nativo per architetture non x86_64
Codifica del payload (es. compressione dello shellcode, cifratura, evitamento dei badchars)
Sistema di plugin per la codifica del payload (tramite plugin wasm)
Installazione
Per installare il progetto, puoi semplicemente installarlo usando cargo:
cargo install shellcide
Esecuzione
Per eseguire il progetto, clona il repository ed esegui:
cargo run
Per servire il progetto come sito web, esegui:
trunk serve
Demo
Licenza
Questo progetto è distribuito con doppia licenza MIT e Apache 2.0.