upx è un ottimo compressore, e prevede nativamente pure la decompressione eccetto alcuni casi in cui si applicano delle alterazioni.
oh dunque, scrivere come unpackkare upx in modo automatico praticamente non ha senso percio' scrivero' come farlo in modo manuale.
Per trovare l'OEP di un exe/dll compresso con upx abbiamo molte possibilità, io ti illustrerò la via più veloce (molto veloce). We qui bisogna otimizzare i tempi
1) apriamo la dll in olly e diamo ok ai vari messaggi che ci avvertono che ci sono dati compressi/criptati
2) in upx è facilissimo trovare l'OEP perchè upx non protegge il codice ma lo comprime solamente.
premiamo 3 o 4 volte il tasto pagina giu' per scendere fino a quando non notiamo questo tipo di codice disassemblato:
Codice:
/*101DCEBE*/ POP EAX
/*101DCEBF*/ POPAD
/*101DCEC0*/ LEA EAX, DWORD PTR SS:[ESP-80]
/*101DCEC4*/ PUSH 0
/*101DCEC6*/ CMP ESP, EAX
/*101DCEC8*/ JNZ SHORT MGLS.101DCEC4
/*101DCECA*/ SUB ESP, -80
/*101DCECD*/ JMP MGLS.101051F5
/*101DCED2*/ DB 00
/*101DCED3*/ DB 00
/*101DCED4*/ DB 00
/*101DCED5*/ DB 00
/*101DCED6*/ DB 00
/*101DCED7*/ DB 00
/*101DCED8*/ DB 00
/*101DCED9*/ DB 00
/*101DCEDA*/ DB 00
/*101DCEDB*/ DB 00
/*101DCEDC*/ DB 00
/*101DCEDD*/ DB 00
/*101DCEDE*/ DB 00
/*101DCEDF*/ DB 00
/*101DCEE0*/ DB 00
/*101DCEE1*/ DB 00
/*101DCEE2*/ DB 00
/*101DCEE3*/ DB 00
...
...
mettiamo un bpx su
101DCECD JMP MGLS.101051F5
ma cosa succede sul codice che c'è prima? in pratica prima di quel Jump upx decomprime tutto
3) ora premiamo F9 e l'esecuzione si ferma all'offset 101DCECD dove abbiamo messo un brekpoint
4) Premiamo una sola volta F7 per steppare di un passo, e "magia" ci troviamo nell'OEP pronti per il dump
5) sempre in Olly dal menu Plugin->OllyDump-> Dump Debugged process
6) togliamo la spunta da Rebuild Import, annotiamoci il nuovo OEP (cioè 1051F5), premiamo il tasto [Dump]
Nel filtro (salva come) invece di Executable file(*.exe) mettiamo All files e come nome file scegliamo per esempio dump.dll. NON chiudere Olly
7) apri ImportRec, dalla lista scegli loaddll.exe, poi premi il tasto [Pick DLL] e scegli MGLS.DLL (per questo caso specifico)
8) in basso dove c'è OEP, al posto di 001DCCE0 metti quello che ti sei segnato prima 1051F5
9) premi [IAT AutoSearch], appariràun messaggio che dice:
---------------------------
Found something!
---------------------------
Found address which may be in the Original IAT. Try 'Get Import'.
(If it is not correct, try RVA: 00001000 Size:00152000)
---------------------------
OK
---------------------------
tu ovviamente premi ok poi premi il tasto [Get Imports], la lista della IT sara' tutta si Valid:YES
10) premi il tasto [Fix Dump], scegli il dump di prima dump.dll e cosi' sistemerai la IT, ottenendo una fila chiamato dump_.dll che è la tua dll unpackata
non vuoi fare l'unpacking manuale? scarica upxshell oppure usa upx con l'opzione -d
Ciauz
Predator