Unpacking Neolite 2
From UIC
Neolite 2 Unpacking
Contents |
| Infos | |
|---|---|
| Author: | §-Death_Reaver-§ |
| Email: | death.reaver@leonardo.it |
| Website: | deathreaver.altervista.org |
| Date: | 07/09/2005 (dd/mm/yyyy) |
| Level: |
|
| Language: | Italian |
| Comments: | |
Tools
Ollydbg
ImportRec
Esempio
Un qualsiasi editor esadecimale
Essay
Prima di cominciare vi faccio notare una cosa: Se andate (sotto XP) in C:\Documents and settings\<nome utente>\SendTO ( una cartella nascosta) e ci mettete dentro un collegamento a Olly e/o a IDA etc. potete, facendo click con il destro su un file exe e scegliendo invia a e successivamente OllyDBG, caricare direttamente il file exe dentro olly senza la solita Olly->File->Open Fico no!?
Ora cominciamo: Prima di tutto caricate il programma in allegato con Olly (potete farlo anche con il metodo sopra citato) e vi ritroverete dinanzi a questo codice:
Come potete vedere la prima istruzione un JMP. Eseguitelo e vi ritroverete qui:
La prima cosa che salta allocchio quella call: non prende parametri a quanto pare, ma prima di essere eseguita il programma fa dei lavoretti con eax. E a quanto si vede dopo, la call restituisce lindirizzo a cui JMP a 0043815A ci spedir.
Per: Molti come me sanno che un JMP EAX in un programma packato MOLTO sospetto. Infatti se lo si esegue si ci ritrova a 004012A5 che come potete immaginare il nostro OEP (Naturalmente in tutti i programmi cavia di Que lOEP questo, cambia solo il codice del packer)
Ora che siamo posizionati sullindirizzo 004012A5 siamo pronti a fare un po di dumping:
Aprite OllyDump e deselezionate la casella Rebuild Import in basso e Dumpate il processo. ORA NON CHIUDETE OLLY!!!
Sicuramente limport table disintegrata o come minimo contiene i dati relativi agli import del packer E NON del programma packato. Quindi ora apriamo ImportRec (anche se il lavoro di rebuilding si pu fare benissimo con un HexEditor*) e per prima cosa scegliamo il processo chiamato in questo caso Neolite.exe. Ora premiamo il pulsante IAT autosearch che far trovare la iat a ImportRec il quale scriver il relativo indirizzo nel box affianco. Ora che Abbiamo lindirizzo della IAT Premiamo Get Import e ImportRec Ci mostrer i suoi risultati. In questo caso troviamo due risultati positivi (Kernel32 e User32). Che culo!. Ok ora possiamo premere il fatidico pulsante Fix Dump che corregger un dump con i dati trovati. Scegliamo quindi il nostro dump e avremo un bel programmino funzionante!!!!
___________________________________________________________
- Guardando il risultato con un PeEditor (o con lHexEditor) si nota che ImportRec non ha fatto altro che aggiungere una sezione chiamata mackt dove ha posizionato una nuova IT con le sue varie tavole (nomi, thunk etc.).
Volendo fare a mano ( che devo dire d pi soddisfazione J ) basta fare:
1) incrementare il valore di NumberOfSection nel FileHeader
2) Modificare il valore di SizeOfImage nellOptional Header secondo lallineamento delle sezioni (se lallineamento perfetto basta aggiungere 1000)
3) Aggiungere una entry nella section table
4) Aggiungere X byte a fine file (dove X pari in questo caso a 1000)
In questo modo abbiamo aggiunto una sezione. Ora basta preservarsi 15 Dword: 5 per Kernel32, 5 per User32 e 5 NULL per indicare la fine dellIT. Quindi scrivere i nome degli import da qualche parte e fategli puntare i rispettivi membri name delle entry della import table. Poi bisogna armarsi di pazienza e riempire le thunk data puntate degli OFT con gli indirizzi che puntano alle strutture Import_By_Name o azzerare il valore degli OFT nellIT e riempire la IAT (FT) con gli indirizzi delle funzioni importare.
____________________________________________________________
PS. Se volete sapere i miei gusti, io non mi piace tanto usare sia i PeEditor che ImportRec(anche se a volte necessario J ). Preferisco un buon HexEditor
Note Finali
Ringrazio tutti quelli del forum e della mailing list.
Disclaimer
I documenti qui pubblicati sono da considerarsi pubblici e liberamente distribuibili, a patto che se ne citi la fonte di provenienza. Tutti i documenti presenti su queste pagine sono stati scritti esclusivamente a scopo di ricerca, nessuna di queste analisi è stata fatta per fini commerciali, o dietro alcun tipo di compenso. I documenti pubblicati presentano delle analisi puramente teoriche della struttura di un programma, in nessun caso il software è stato realmente disassemblato o modificato; ogni corrispondenza presente tra i documenti pubblicati e le istruzioni del software oggetto dell'analisi, è da ritenersi puramente casuale. Tutti i documenti vengono inviati in forma anonima ed automaticamente pubblicati, i diritti di tali opere appartengono esclusivamente al firmatario del documento (se presente), in nessun caso il gestore di questo sito, o del server su cui risiede, può essere ritenuto responsabile dei contenuti qui presenti, oltretutto il gestore del sito non è in grado di risalire all'identità del mittente dei documenti. Tutti i documenti ed i file di questo sito non presentano alcun tipo di garanzia, pertanto ne è sconsigliata a tutti la lettura o l'esecuzione, lo staff non si assume alcuna responsabilità per quanto riguarda l'uso improprio di tali documenti e/o file, è doveroso aggiungere che ogni riferimento a fatti cose o persone è da considerarsi PURAMENTE casuale. Tutti coloro che potrebbero ritenersi moralmente offesi dai contenuti di queste pagine, sono tenuti ad uscire immediatamente da questo sito.
Vogliamo inoltre ricordare che il Reverse Engineering è uno strumento tecnologico di grande potenza ed importanza, senza di esso non sarebbe possibile creare antivirus, scoprire funzioni malevoli e non dichiarate all'interno di un programma di pubblico utilizzo. Non sarebbe possibile scoprire, in assenza di un sistema sicuro per il controllo dell'integrità, se il "tal" programma è realmente quello che l'utente ha scelto di installare ed eseguire, né sarebbe possibile continuare lo sviluppo di quei programmi (o l'utilizzo di quelle periferiche) ritenuti obsoleti e non più supportati dalle fonti ufficiali.

