Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
obfuscation_detection — Plug-in per Binary Ninja per identificare codice offuscato e altri costrutti di codice interessanti | Kitploit
Strumenti/GitHubGitHub/mrphrazer/obfuscation_detection
Analisi StaticaReverse EngineeringAnalisi MalwareAnalisi di BinariAnalisi del Firmware
GitHubmrphrazer/obfuscation_detection

obfuscation_detection

Plug-in per Binary Ninja per identificare codice offuscato e altri costrutti di codice interessanti

Vedi Repository
672743 mesi faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Rilevamento dell'offuscamento (v2.4)

Autore: Tim Blazytko

Rileva automaticamente codice offuscato e altre interessanti strutture di codice

Descrizione:

Obfuscation Detection è un plugin per Binary Ninja che rileva codice offuscato e interessanti costrutti di codice (ad es. macchine a stati) nei binari. Dato un binario, il plugin semplifica l'analisi identificando le posizioni del codice che potrebbero meritare un'analisi più approfondita durante il reverse engineering.

Basandosi su varie euristiche, il plugin individua funzioni che contengono costrutti di codice complessi o insoliti. Tali costrutti possono implementare

  • codice offuscato
  • macchine a stati e protocolli
  • comunicazione con server C&C
  • routine di decrittazione delle stringhe
  • algoritmi crittografici

I seguenti articoli del blog forniscono ulteriori informazioni sulle euristiche sottostanti e ne mostrano i casi d'uso:

  • Automated Detection of Control-flow Flattening
  • Automated Detection of Obfuscated Code
  • Statistical Analysis to Detect Uncommon Code
  • Identification of API Functions in Binaries

Alcuni esempi di casi d'uso si trovano in examples. Inoltre, il talk REcon "Unveiling Secrets in Binaries using Code Detection Strategies" mostra alcuni casi d'uso. Le slide sono disponibili qui; la registrazione è disponibile qui.

Caratteristiche principali

  • identifica costrutti di codice interessanti in binari di grandi dimensioni
  • evidenzia le istruzioni disallineate nella vista a grafo di Binary Ninja
  • implementazione efficiente e indipendente dall'architettura
  • eseguito come attività in background
  • etichetta automaticamente le funzioni identificate con l'euristica o l'utilità corrispondente
  • può essere utilizzato in modalità UI e headless

Installazione

Lo strumento può essere installato utilizzando il gestore plugin di Binary Ninja.

Per la versione headless, seguire questi passaggi:

root@kitploit:~
git clone https://github.com/mrphrazer/obfuscation_detection.git
cd obfuscation_detection

# install obfuscation_detection
pip install .

Utilizzo

Il plugin può essere utilizzato nell'interfaccia utente e in modalità headless.

Interfaccia utente

Scegliere Plugins -> Obfuscation Detection per eseguire singole euristiche, oppure Plugins -> Obfuscation Detection -> Utils per eseguire singole rilevazioni di utilità. Il comando Plugins -> Obfuscation Detection -> All esegue tutte le euristiche e tutte le utilità insieme.

Menu del plugin

I risultati vengono visualizzati nella finestra Log:

Log di Binary Ninja

Facendo clic sugli indirizzi delle funzioni identificate, Binary Ninja naviga alla funzione selezionata.

Modalità headless

Per utilizzare il plugin in modalità headless, eseguire scripts/detect_obfuscation.py:

root@kitploit:~
$ python3 scripts/detect_obfuscation.py <binary>

Questo esegue tutte le euristiche e tutte le utilità. Per un output leggibile dalla macchina, utilizzare --json:

root@kitploit:~
$ python3 scripts/detect_obfuscation.py --json <binary>

Il payload JSON contiene tutti i risultati sotto la chiave detections. Ogni rilevazione ha un id stabile per l'automazione e un name leggibile dall'uomo. Ogni risultato di funzione etichettata include il tipo di tag e la descrizione utilizzati dal plugin Binary Ninja.

Per eseguire solo l'euristica della macchina a stati in modalità headless, utilizzare scripts/detect_state_machine.py:

root@kitploit:~
$ python3 scripts/detect_state_machine.py [--json] <binary>

Euristiche di rilevamento

Il plugin implementa varie euristiche di rilevamento per individuare diversi costrutti di codice. Di seguito descriviamo brevemente le singole euristiche e ne spieghiamo l'utilizzo.

Blocco di base grande

L'euristica del blocco di base grande identifica il 10% superiore delle funzioni con il numero medio più alto di istruzioni per blocco di base. Permette di rilevare

  • codice srotolato
  • implementazioni crittografiche
  • routine di inizializzazione
  • offuscamento aritmetico / Mixed Boolean-Arithmetic

Funzione complessa

L'euristica della funzione complessa identifica il 10% superiore delle funzioni con i grafi di controllo del flusso più complessi (basati sulla complessità ciclomatica). Permette di identificare

  • routine di smistamento e protocolli complessi
  • macchine a stati
  • funzioni offuscate con predicati opachi

Macchina a stati

L'euristica della macchina a stati utilizza proprietà della teoria dei grafi per identificare funzioni che implementano macchine a stati. Di solito, tali macchine a stati possono essere rappresentate come istruzioni switch che vengono smistate in un ciclo. L'euristica permette di identificare

  • smistamento di protocolli di rete
  • logica di parsing di file
  • comunicazione con server C&C / smistamento di comandi
  • control-flow flattening

Sequenza di istruzioni insolita

L'euristica della sequenza di istruzioni insolita esegue un'analisi statistica per identificare il 10% superiore delle funzioni i cui pattern di codice si discostano da una verità di base precalcolata. In questo modo, l'euristica permette di identificare

  • implementazioni crittografiche
  • uso intensivo di aritmetica a virgola mobile
  • offuscamento aritmetico / Mixed Boolean-Arithmetic
  • pattern di offuscamento generici

Istruzione sovrapposta

L'euristica dell'istruzione sovrapposta identifica funzioni con istruzioni disallineate (i byte dell'istruzione sono condivisi da due istruzioni diverse). L'euristica identifica

  • disassemblaggio rotto (ad es., dati interpretati come codice)
  • predicati opachi che saltano all'interno di altre istruzioni

Se l'euristica viene utilizzata nell'interfaccia utente di Binary Ninja, le istruzioni sovrapposte vengono anche evidenziate nella vista a grafo.

Funzione più chiamata

L'euristica della funzione più chiamata identifica il 10% superiore delle funzioni con il maggior numero di chiamate da funzioni diverse. In questo modo, l'euristica può identificare

  • routine di decrittazione delle stringhe
  • funzioni di libreria in binari collegati staticamente

Frequenza dei cicli

L'euristica identifica funzioni con un numero elevato di cicli. Queste funzioni potrebbero implementare

  • logica di parsing complessa per formati di dati strutturati
  • calcoli algoritmici intensivi

L'euristica aiuta anche a individuare potenziali colli di bottiglia nelle prestazioni.

Ciclo irriducibile

L'euristica identifica funzioni con strutture di ciclo rare e complesse che tipicamente suggeriscono

  • ottimizzazioni aggressive del compilatore
  • assembly scritto a mano
  • uso di istruzioni goto
  • codice offuscato

Ciclo di decrittazione XOR

L'euristica identifica funzioni che eseguono un'operazione XOR con una costante all'interno di un ciclo. In questo modo, l'euristica può identificare

  • routine di decrittazione delle stringhe
  • stub di decrittazione del codice
  • implementazioni crittografiche

Espressione aritmetica complessa

L'euristica identifica funzioni in cui le espressioni hanno più di un'operazione aritmetica e più di un'operazione booleana contemporaneamente. In questo modo, l'euristica può identificare

  • offuscamento aritmetico misto-booleano
  • routine di inizializzazione
  • implementazioni crittografiche

Sottografo duplicato

L'euristica utilizza un approccio iterativo di hashing del contesto per rilevare strutture multi-blocco ripetute all'interno del grafo di controllo del flusso di ciascuna funzione. Confrontando la firma dell'opcode di ogni blocco insieme alle firme dei suoi successori, l'euristica identifica sottografi duplicati o quasi duplicati in una singola funzione. Questo aiuta a individuare:

  • stub di offuscamento come piccole macchine a stati o blocchi di dispatcher clonati più volte
  • cicli srotolati o inlineati introdotti da ottimizzazioni del compilatore
  • logica di branching multi-via come divisori di intervallo e alberi decisionali
  • stub crittografici o di checksum ripetuti

Utilità

Il plugin include anche utilità più mirate per funzioni e regioni di codice interessanti. Rimangono disponibili nel sottomenu Utils; il comando All le esegue insieme alle euristiche più ampie.

Funzione di ingresso

Questa utilità identifica funzioni senza chiamanti noti. Queste funzioni potrebbero essere

  • punti di ingresso nel binario
  • destinazioni di salti indiretti in cui la gerarchia delle chiamate non è stata recuperata dal disassemblatore

Funzione foglia

Questa utilità identifica funzioni che non chiamano altre funzioni. Queste funzioni possono, ad esempio, essere funzioni che

  • sono state estratte dal compilatore per implementare funzionalità utilizzate in varie parti del codice
  • sono trampolini per altre funzioni
  • fanno parte di schemi di offuscamento del codice (ad es., calcoli estratti per offuscamento del flusso di controllo)

Funzione ricorsiva

Questa utilità identifica funzioni ricorsive — funzioni che chiamano se stesse direttamente o indirettamente. Le funzioni ricorsive possono indicare:

  • implementazioni algoritmiche come attraversamento di alberi o grafi
  • codice offuscato progettato per complicare l'analisi statica
  • implementazioni di algoritmi matematici o routine di parsing complesse
  • potenziali vulnerabilità di stack overflow dovute a ricorsione profonda

Entropia delle sezioni

Questa utilità valuta l'entropia di ogni sezione. L'entropia è una misura statistica di casualità con valori compresi tra 0 e 8. Sezioni con entropia vicina a 8 indicano un alto grado di casualità e possono suggerire:

  • codice impaccato o compresso
  • dati o codice crittografati
  • dati casuali

RC4

Questa utilità rileva potenziali implementazioni dell'algoritmo RC4 utilizzando marcatori euristici tipicamente associati all'algoritmo di schedulazione delle chiavi (KSA) e all'algoritmo di generazione pseudo-casuale (PRGA) di RC4. RC4 è ampiamente utilizzato nei malware per scopi quali:

  • decrittare stringhe e altri payload di dati
  • offuscare le comunicazioni di comando e controllo (C&C)

Contatti

Per maggiori informazioni, contattare @mr_phrazer.

Scarica lo strumento