Unpacking binaries

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Identificazione di binari compressi

  • Mancanza di stringhe: È comune trovare che i binari compressi non abbiano quasi nessuna stringa.

  • Molte stringhe inutilizzate: Inoltre, quando un malware utilizza qualche tipo di pacchetto commerciale, è comune trovare molte stringhe senza riferimenti incrociati. Anche se queste stringhe esistono, ciò non significa che il binario non sia compresso.

  • È anche possibile utilizzare alcuni strumenti per cercare di individuare quale pacchetto è stato utilizzato per comprimere un binario:

Raccomandazioni di base

  • Inizia analizzando il binario compresso dal basso in IDA e risali. Gli unpacker escono una volta che il codice decompresso esce, quindi è improbabile che l'unpacker passi l'esecuzione al codice decompresso all'inizio.

  • Cerca JMP o CALL a registri o regioni di memoria. Cerca anche funzioni che pushano argomenti e un indirizzo di direzione e poi chiamano retn, perché il ritorno della funzione in quel caso potrebbe chiamare l'indirizzo appena pushato nello stack prima di chiamarlo.

  • Metti un breakpoint su VirtualAlloc poiché questo alloca spazio in memoria dove il programma può scrivere il codice decompresso. Esegui "run to user code" o usa F8 per arrivare al valore dentro EAX dopo l'esecuzione della funzione e "seguire quell'indirizzo nel dump". Non si sa mai se quella è la regione in cui verrà salvato il codice decompresso.

  • VirtualAlloc con il valore "40" come argomento significa Read+Write+Execute (qui verrà copiato del codice che necessita di esecuzione).

  • Mentre si decomprime il codice, è normale trovare diverse chiamate a operazioni aritmetiche e funzioni come memcopy o VirtualAlloc. Se ti trovi in una funzione che apparentemente esegue solo operazioni aritmetiche e forse qualche memcopy, la raccomandazione è cercare di trovare la fine della funzione (forse un JMP o una chiamata a qualche registro) o almeno la chiamata all'ultima funzione ed eseguire fino ad allora poiché il codice non è interessante.

  • Mentre si decomprime il codice, fai attenzione ogni volta che cambi regione di memoria, poiché un cambio di regione di memoria può indicare l'inizio del codice decompresso. Puoi facilmente scaricare una regione di memoria utilizzando Process Hacker (processo --> proprietà --> memoria).

  • Mentre si cerca di decomprimere il codice, un buon modo per sapere se si sta già lavorando con il codice decompresso (quindi puoi semplicemente scaricarlo) è controllare le stringhe del binario. Se in qualche punto esegui un salto (magari cambiando la regione di memoria) e ti accorgi che sono state aggiunte molte più stringhe, allora puoi sapere che stai lavorando con il codice decompresso. Tuttavia, se il pacchetto contiene già molte stringhe, puoi contare quante stringhe contengono la parola "http" e vedere se questo numero aumenta.

  • Quando scarichi un eseguibile da una regione di memoria, puoi correggere alcuni header utilizzando PE-bear.

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated