Bravo! Ho scritto un minidebugger al suo interno. Quando il crackme è debuggato intervengono obbligatoriamente gli int 2d ed olly li gestisce discretamente, tra l'altro è l'unico debugger che ci riesce. Unica cosa rimane il fastidioso offuscamento del codice.
Ma adesso ti mostro come una iniezione di codice renda il crackme "autopulente"
-apri il crackme con LordPe,
-cambia l'Entry Point da 1000 a 0000150B, premi SALVA e chiudiamo LordPe
-apri il crackme in Olly (forse ci firàun messaggio, premiamo ok)
-ora siamo ad 0000150B
-inserisci questo codice
Codice:
0040150B MOV EAX, 401000
00401510 INC EAX
00401511 CMP EAX, 4014AC
00401516 JE 00401000
0040151C CMP WORD PTR DS:[EAX], 2DCD
00401521 JNZ SHORT 00401510
00401523 MOV WORD PTR DS:[EAX], 9090
00401528 MOV BYTE PTR DS:[EAX+2], 90
0040152C JMP SHORT 00401510
ora lo commento
0040150B MOV EAX, 401000
mette in EAX l'EP originale cioè 401000h
00401510 INC EAX
incrementa di +1 EAX (come fosse un ciclo for)
00401511 CMP EAX, 4014AC
confronta l'attuale valore di EAX se è uguale a 4014AC (cioè la fine del programma 004014AC RETN)
00401516 JE 00401000
se la condizione del CMP è vera allora significa che ha passato tutto il file e salta pertanto all'EP.
se invece non è alla fine del file allora prosegue con:
0040151C CMP WORD PTR DS:[EAX], 2DCD
verifica se il il valore WORD in EAX è 2DCD (cioè int 2d)
00401521 JNZ SHORT 00401510
se la condizione sopra NON è vera allora salta su a 401510 e riprende ad incrementare il contatore, altrimenti:
00401523 MOV WORD PTR DS:[EAX], 9090
sostituisce il codice all'offset di EAX con 9090 cioè nop nop
in questo modo pulisce via il codice offuscante.
00401528 MOV BYTE PTR DS:[EAX+2], 90
siccome il codice offuscante è di 3 byte (CD DB E8)aggiungo un altro nop
0040152C JMP SHORT 00401510
riprende con il ciclo.
inserisci il codice, metti un bp 401000 e premi F9, vedi come il codice iniettato ti ripulisce dall'offuscamento.
Preddy