Unpackare dll "UPX"

Stato
Discussione chiusa ad ulteriori risposte.
M

marpar

Ciao a tutti,
sono alle prime armi e vorrei fare un unpack manuale usando Olly della dll allegata? Riuscite a darmi una mano?
ArriCiao
Grazie:asd:
 
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 :D

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
 
Perfetto!!
Grazie!!

Ha funzionato a meraviglia.
Ma poichè l'appettito vien mangiando.... Ti chiedo.

Come mai se provo a sostituire la dll compressa con quella dumpata il software si blocca?
Ciao
 
o perchè ha un controllo, oppure perchè è stata unpackata male :D
prova ad unpackarla con upxshield (una interfaccia grafica per upx che lo rende molto pratico da usare)

Preddy
 
come volevasi dimostrare si tratta di un UPX non standard, pertanto lo si puo' unpackare solo in modo manuale :)
 
Stato
Discussione chiusa ad ulteriori risposte.