How do you start analysis? Do you start at main and spread out from there, or do you have a better method?
Inizia ad esaurire le analisi di base (sia dinamiche che statiche) - enumera le esportazioni, le importazioni, l'uso delle funzioni, le syscalls, le dipendenze winapi, mutex, dll, le stringhe e un po 'di grepping.
Esegui analisi dinamiche su sandbox di base per giungere ad alcune, anche se parzialmente parziali e possono essere in qualche modo sbagliati, puoi ora trovare diverse teorie su alcune delle principali funzioni di eseguibile / dll.
che diceva, se stiamo parlando di java / .net ecc. - naturalmente, compili i file, ma non c'è pratica comune sull'uso di malware in tali ambienti.
Se individuate le chiamate di funzione a qualcosa di sospetto - diciamo che l'exec prova a scrivere su alcuni file di sistema / valori di registro critici, o distribuendo strani file con nome - dovreste essere preoccupati (o felici, a seconda del vostro hat-color: ))
How do you find and identify important functionality, or particular functionality that you're interested in?
Le stringhe possono essere utili: puoi individuare qualcosa di sospetto come una stringa che inizia con cmd.exe ... o anche nomi di host, combinazioni di password utente e oter
Resource Hacker e dependance walker sono strumenti di base per enumerare esportazioni, importazioni e risorse incluse.
La funzionalità più importante deve quasi sempre essere decodificata in IDA o analogo strumento di analisi statica.
How do you map out high level control flow?
Se tutto quanto sopra non funziona, le funzionalità grafiche di IDA sono eccezionali e possono essere utilizzate per questo.
How do you manage the helper routines you've identified? I find bookmarks to be insufficient, and notepad to be too primitive.
IDA ha un sistema di commenti, opzioni di colorazione, rinomina e altro.
Per il processo di overwhole mi piace tracciare le cose quando necessario, è il modo più chiaro per farlo - anche su visio.
How do you avoid getting lost in the avalanche of assembly code?
Non hai quasi mai rev-engineering su livello ASm TUTTO il codice disponibile. Alcuni sono più efficienti nell'analisi dinamica (Olly e Immunity sono fantastici - Immunity è un fork di Olly con molti colpi di scena) e non è mai necessario che tutto il codice venga invertito per poterlo capire.
Ho un codice colore in IDA e continuo a rinominare le parti già invertite con qualcosa di più sensato di "loc_402BBD"
Any other tricks / tips for approaching these kinds of tasks?
- Non rimanere mai bloccato in uno stato mentale, può portarti un sacco di problemi - pensa al codice di analisi per giorni e poi a ottenere una parte che cambia totalmente il tuo modo di vedere le cose, orribile.
- Fai pratica, molto, non c'è niente di simile, credimi.