
Strumento basato su Python per generare Shellcode da PIC C
SHGenOB è uno strumento basato su Python progettato per generare shellcode da codice Position Independent Code (PIC) scritto in C. Automatizza il processo di compilazione del codice C, estrae la sezione .text e, opzionalmente, cripta lo shellcode risultante utilizzando la crittografia XOR.
Questo progetto è interamente basato su questo di hasherezade.
Nota importante per gli utenti di SHGenOB: Affinché questo strumento di generazione di shellcode funzioni correttamente, il codice C nel file di input deve essere scritto come codice Position Independent (PIC). Lo strumento presuppone che il codice fornito segua i principi e le caratteristiche del PIC come descritto di seguito.
Il codice Position Independent (PIC) è un tipo di codice macchina che può essere eseguito indipendentemente dal suo indirizzo di memoria assoluto. Questa caratteristica rende il PIC particolarmente utile nella creazione di shellcode, librerie condivise e alcuni tipi di malware. Le caratteristiche principali del PIC includono:
Il PIC è essenziale in scenari in cui l'indirizzo di caricamento esatto del codice non è noto in anticipo, rendendolo un concetto cruciale nello sviluppo di shellcode e in alcune aree della programmazione di sistema. Quando si utilizza SHGenOB, assicurarsi che il codice C di input segua questi principi PIC per generare shellcode efficaci e affidabili.
pip install pefile argparse
Eseguire lo script dalla riga di comando con la seguente sintassi:
python shgenob.py --code-file <percorso_del_file_c> [--masm-file <percorso_del_file_masm>] [--debug] [--xor-key <chiave>]
Argomenti:
--code-file o -cf: (Obbligatorio) Percorso del file main.c contenente il codice PIC--masm-file o -mf: (Opzionale) Percorso di un file .masm esterno da includere per logica assembly aggiuntiva nello shellcode--debug o -d: (Opzionale) Abilita la modalità debug (salta la pulizia dei file intermedi)--xor-key o -xk: (Opzionale) Chiave XOR per criptare lo shellcode (formato: AA,BB,CC)Esempi:
# Utilizzo base
python shgenob.py --code-file main.c
# Con file MASM esterno
python shgenob.py --code-file main.c --masm-file custom_logic.masm
# Con tutte le opzioni
python shgenob.py --code-file main.c --masm-file custom_logic.masm --debug --xor-key AA,BB,CC
save_to_file(content, filename): Salva il contenuto fornito in un file nella directory correntecleanup(): Elimina i file intermedi (.asm, .exe, .obj, .lnk) nella directory correntexor_encrypt(shellcode, key): Cripta lo shellcode usando XOR con la chiave fornitainsert_shellcode_into_loader(formatted_shellcode, loader_file): Inserisce lo shellcode nel template del loaderextract_text_section(file_path, key): Estrae la sezione .text da un file PE e opzionalmente la criptafind_file(root_dir, file_name): Cerca un file nella directory data e nelle sue sottodirectoryrun_command_with_vcvars(command, vcvars_path): Esegue un comando con le variabili d'ambiente di Visual Studio impostatecompile_cpp_file(cpp_file, vcvars_path, output_exe): Compila un file C++ usando il compilatore Visual Studiomodify_asm_file(asm_file): Modifica il file assembly generato per la compatibilità con lo shellcodemain(cpp_file, args): Funzione principale che orchestra il processo di generazione dello shellcodeUsare il flag --debug per saltare il processo di pulizia e ispezionare i file intermedi. Utile per la risoluzione dei problemi e per comprendere il processo di generazione dello shellcode.
I contributi per migliorare SHGenOB sono benvenuti. Seguire questi passaggi: