2012-04-25 22 views
9

Mi stavo solo chiedendo: come si fa a smontare un file binario auto-modificante? Immagino che non puoi usare OLly o IDA perché sono dei disassemblatori statici, giusto? Cosa succede con il disassemblatore se salti nel mezzo di un'istruzione? E come si analizzano i motori metamorfici?Disassemblaggio del codice auto-modificante

+0

Uno non desidera criticare la tua domanda troppo duramente. Forse proprio non lo capisco! Tuttavia, potrebbe non essere il tipo di domanda a cui si può rispondere in alcuni paragrafi. – thb

risposta

10

Sia OllyDbg che IDA non sono solo analizzatori statici, ma possono anche eseguire il codice. IDA può anche eseguire il tuo codice da remoto e, per quanto ne so, può anche eseguire il debugging incorporato. Ovviamente se si "interrompe" l'esecuzione del programma ad un certo punto e si dà un'occhiata allo smontaggio, esso (in entrambi i programmi) rifletterà lo stato corrente del programma, incluse le eventuali modifiche apportate su se stesso.

Cosa succede con il disassemblatore se salti nel mezzo di un'istruzione?

Secondo la mia esperienza, sia il suddetto disassemblatore può gestire questa situazione. Ad esempio, vedere qui, come OllyDbg gestisce, ecco uno screenshot quando EIP è 00892C0E:

OllyDbg before

E quando faccio EIP = 00892C0F, che è nel mezzo di un'istruzione:

OllyDbg after

come si vede, semplicemente ri-disassembla l'istruzione, rendendola un opcode diverso (ma ancora valido).

E come si analizzano i motori metamorfici?

Proprio come qualsiasi altro codice. I trucchi che stai menzionando (saltando in mezzo a un'istruzione, modificando se stesso) erano popolari un po 'di tempo fa, quando i disassemblatori e il debugger non erano così intelligenti come adesso.

Ovviamente l'analisi statica può essere molto difficile, ma è comunque possibile analizzare i file binari completamente offline e decifrare il "morphing" (nella tua mente) per avere l'idea di cosa farà il codice. Ma quando puoi usare un debugger live, puoi semplicemente vedere a cosa serve il codice.

Naturalmente, tutto questo è una corsa senza fine tra chi scrive il codice e chi lo analizza. Chi vince dipende da chi si arrende prima.

+1

Volevo solo citare questo, perché è così vero :) "Naturalmente, tutto questo è una gara senza fine tra chi scrive il codice e chi lo analizza. Chi vince dipende da chi si arrende prima". –

1

Ollydbg gestirà tali situazioni.

La funzionalità che stai cercando è 'Analizza'. Ri-smontare le nuove istruzioni nella posizione e aggiornare la finestra della CPU con il codice aggiornato.

Si supponga che l'istruzione all'indirizzo X effettui alcune modifiche auto-modificanti. Dopo aver eseguito quella istruzione, è possibile eseguire il comando 'Analizza'. Questo è re-disassemblare il codice attorno a quel basicblock e aggiornare la CPU con le istruzioni aggiornate.

Per analizzare, fare clic con il pulsante destro del mouse nella posizione desiderata nella finestra della CPU e fare clic su Analisi> Analizza codice. La scelta rapida è Ctrl-A.