[Protezione] FSG v2.0

Stato
Discussione chiusa ad ulteriori risposte.

simogeta

Utente Silver
23 Aprile 2008
49
10
0
68
Salve a tutti oggi mentre facevo un crackme mi sono accorto di una protezione insolita

rpgnk9.png


come posso rimuoverla? Finora mi sono trovato di fronte solo ed escusivamente ad UPX...


:confused:

Saluti,
Simogeta. ^^
 
ooohh molto facile! Ovviamente io quando posso parlo di manual unpacking, perchè da li c'è sempre da imparare.
Allora olly ce l'hai, procurati ImportRec, anzi te lo uppo io bello aggiornato e con vari plugin ciappa:
DOWNLOAD ImportRec 1.7c
come per tutti i file compressi l'obiettivo principale è trovare l'OEP
bene è compresso con fsg 2.0, premesso questo vediamo un metodo per fare un bel maual unpacking, che da sempre tanta soddisfazione

-apri il crackme in olly
-premi F7 una sola volta. Come noterai il registro ESP è diventato rosso, significa che è cambiato.
-seleziona il registro ESP, poi premi con il tasto e scegli "Follow in Dump"
-guarda in basso a sinistra dove c'è il dump esadecimale. Ora evidenzia con il mouse i primi 4 byte (es di 4 byte: 00 10 40 00)
i piu' pratici avranno già capito che 00 10 14 non è altro che 401000 al contrario :D (tipico OEP)
-batti F8 per 3 volte e ti troverai su un codice simile a questo
MOVS BYTE PTR ES:[EDI], BYTE PTR DS:[ESI]
se guardi ESI contiene l'indirizzo originale dell'oep cioè 41000

ok questo è servito a solo scopo didattico ed informativo. premi CTRL+F2 per ricaricare il progetto

Arriviamo al nocciolo. La tipica signature di FSG è la seguente
Codice:
004001CD  ^78 F3            JS SHORT UNPACKME.004001C2
004001CF   75 03            JNZ SHORT UNPACKME.004001D4
004001D1   FF63 0C          JMP DWORD PTR DS:[EBX+C]
il codice all'offset 004001D1 indovina cosa fa? ti spara direttamente all'OEP, proprio quando il codice è bello decompresso.
percio posizionati su 004001D1 e premi F2 per piazzare un break point
ora runna con F9
-bene in un attimo ti trovi su 004001D1, ora premi F7 per eseguire un solo passo e...
ti ritrovi nell'OEP!!!
premi CTRL+A per rianalizzare il codice e vedrai che tutto appare piu' chiaro
-è il momento di dumpare il processo
-sempre in olly vai nel menu Plugin->Olly Dump-> Dump Debugged Process
-Togli lo spunto da Rebuild Import, in quanto la IT la sistemeremo noi a con ImportRec dopo.
-dove c'è scritto Entry Point [xxxxx] -> Modify [xxxx]
annotati quello in Modify
-ora premi Dump, e salva l'eseguibile con un nuovo nome. NON CHIUDERE OLLY, dobbiamo ancora fixare la import table
-Apri ImportRec
-dalla lista dei processi scegli il tuo crackme
-sotto dove leggi OEP, modifica quello originale in quello che ti sei annotato in olly (il Modify)
-ora premi il tasto a fianco [IAT AutoSearch], ti uscirà un messaggio tipo:
---------------------------
Found something!
---------------------------
Found address which may be in the Original IAT. Try 'Get Import'.
(If it is not correct, try RVA: 00001000 Size:0001C000)

-premi OK
-premi il tasto Get Imports, e nella lista sopra ti appariranno tutte le imports sistemate
-premi [Fix Dump], scegli il file che prima hai dumpato con olly ed hai finito :)
ora hai il tuo eseguibile unpackato.

Certo era piu' semplice prendere un unpacker, ma non avremo imparato assolutamente nulla. E poi vuoi mettere la soddisfazione!

Ciauz
Predator
 
Predator ha detto:
ooohh molto facile! Ovviamente io quando posso parlo di manual unpacking, perchè da li c'è sempre da imparare.
Allora olly ce l'hai, procurati ImportRec, anzi te lo uppo io bello aggiornato e con vari plugin ciappa:
DOWNLOAD ImportRec 1.7c
come per tutti i file compressi l'obiettivo principale è trovare l'OEP
bene è compresso con fsg 2.0, premesso questo vediamo un metodo per fare un bel maual unpacking, che da sempre tanta soddisfazione

-apri il crackme in olly
-premi F7 una sola volta. Come noterai il registro ESP è diventato rosso, significa che è cambiato.
-seleziona il registro ESP, poi premi con il tasto e scegli "Follow in Dump"
-guarda in basso a sinistra dove c'è il dump esadecimale. Ora evidenzia con il mouse i primi 4 byte (es di 4 byte: 00 10 40 00)
i piu' pratici avranno già capito che 00 10 14 non è altro che 401000 al contrario :D (tipico OEP)
-batti F8 per 3 volte e ti troverai su un codice simile a questo
MOVS BYTE PTR ES:[EDI], BYTE PTR DS:[ESI]
se guardi ESI contiene l'indirizzo originale dell'oep cioè 41000

ok questo è servito a solo scopo didattico ed informativo. premi CTRL+F2 per ricaricare il progetto

Arriviamo al nocciolo. La tipica signature di FSG è la seguente
Codice:
004001CD  ^78 F3            JS SHORT UNPACKME.004001C2
004001CF   75 03            JNZ SHORT UNPACKME.004001D4
004001D1   FF63 0C          JMP DWORD PTR DS:[EBX+C]
il codice all'offset 004001D1 indovina cosa fa? ti spara direttamente all'OEP, proprio quando il codice è bello decompresso.
percio posizionati su 004001D1 e premi F2 per piazzare un break point
ora runna con F9
-bene in un attimo ti trovi su 004001D1, ora premi F7 per eseguire un solo passo e...
ti ritrovi nell'OEP!!!
premi CTRL+A per rianalizzare il codice e vedrai che tutto appare piu' chiaro
-è il momento di dumpare il processo
-sempre in olly vai nel menu Plugin->Olly Dump-> Dump Debugged Process
-Togli lo spunto da Rebuild Import, in quanto la IT la sistemeremo noi a con ImportRec dopo.
-dove c'è scritto Entry Point [xxxxx] -> Modify [xxxx]
annotati quello in Modify
-ora premi Dump, e salva l'eseguibile con un nuovo nome. NON CHIUDERE OLLY, dobbiamo ancora fixare la import table
-Apri ImportRec
-dalla lista dei processi scegli il tuo crackme
-sotto dove leggi OEP, modifica quello originale in quello che ti sei annotato in olly (il Modify)
-ora premi il tasto a fianco [IAT AutoSearch], ti uscirà un messaggio tipo:
---------------------------
Found something!
---------------------------
Found address which may be in the Original IAT. Try 'Get Import'.
(If it is not correct, try RVA: 00001000 Size:0001C000)

-premi OK
-premi il tasto Get Imports, e nella lista sopra ti appariranno tutte le imports sistemate
-premi [Fix Dump], scegli il file che prima hai dumpato con olly ed hai finito :)
ora hai il tuo eseguibile unpackato.

Certo era piu' semplice prendere un unpacker, ma non avremo imparato assolutamente nulla. E poi vuoi mettere la soddisfazione!

Ciauz
Predator

o_O! e chi ci sarebbe arrivato xD
Grazie con questo post sei diventato uno dei miei 6 idoli viventi :D
Anche se poi è stata una delusione:

Codice:
00401170  |> \33C0            XOR     EAX, EAX
00401172  |.  EB 05           JMP     SHORT Crackme.00401179
00401174  |>  1BC0            SBB     EAX, EAX
00401176  |.  83D8 FF         SBB     EAX, -1
00401179  |>  85C0            TEST    EAX, EAX
0040117B      75 07           JNZ     SHORT Crackme.00401184
0040117D  |.  68 30E44000     PUSH    Crackme.0040E430                                      ;  ASCII "Congrats you have got the password\n"
00401182  |.  EB 05           JMP     SHORT Crackme.00401189
00401184  |>  68 54E44000     PUSH    Crackme.0040E454                                      ;  ASCII "Sorry, The password was incorrect\n"
00401189  |>  E8 42030000     CALL    Crackme.004014D0
0040118E  |.  83C4 04         ADD     ESP, 4
00401191  |.  68 78E44000     PUSH    Crackme.0040E478                                      ;  ASCII "pause"
00401196  |.  E8 55020000     CALL    Crackme.004013F0
0040119B  |.  8B8C24 BC000000 MOV     ECX, DWORD PTR SS:[ESP+BC]
004011A2  |.  83C4 04         ADD     ESP, 4
004011A5  |.  33CC            XOR     ECX, ESP
004011A7  |.  33C0            XOR     EAX, EAX
004011A9  |.  E8 07000000     CALL    Crackme.004011B5
004011AE  |.  81C4 BC000000   ADD     ESP, 0BC
004011B4  \.  C3              RETN
004011B5   $  3B0D 04004100   CMP     ECX, DWORD PTR DS:[410004]

quando ti trovi davanti ad una cosa del genere ti passa la volglia visto il fatto che basta cambiare un instruzione per avere tt i seriali corretti.
Saluti,
Simogeta.
 
Stato
Discussione chiusa ad ulteriori risposte.