Illusor v1.0 [SOLVED By Whivel]

Stato
Discussione chiusa ad ulteriori risposte.

Predator

Utente Storico
11 Giugno 2007
3,203
47
1,268
900
Ecco pronto il secondo crackme scritto in assembler :em171:
Regole:
- trovale un seriale valido
- eliminare il messaggio di chiusura
- patchare per far accettare qualsiasi seriale (opzionale)
- scrivere un keygen, l'algoritmo è facile facile (opzionale)

Difficolta': non so.

Dowload:
http://www.nexenteam.net/predator/reversing/crackme/Illusor_v1.rar

Predator
 
RE: Illusor v1.0 [UNSOLVED]

risolto tutto^^ a tempo record.....

per la difficoltà darei 6/7... soprattutto per i sistemi anti attach e per i sistemi per non far fare lo stepping

ah, devo ringraziarti..... hai reso meno noiosa una giornata...... anche se avrei dovuto studiare
 
RE: Illusor v1.0 [UNSOLVED]

ecco le soluzione..... nessun tutorial.... non ho fatto molto, sono andato più ad intuito
 
RE: Illusor v1.0 [UNSOLVED]

Whivel sei stato velocissimo :D
vedo che l'offuscazione del codice non ti ha creato problemi, bravo bravo.
c'è un modo per de-offuscare il codice rendendolo praticamente come non fosse offuscato, chissa' se qualcuno scoprirà come :)
 
il fatto è che ho capito più o meno come funziona..... quegli interrupt che interessano il seh solo se non da debugger e altro ancora..... ma ho il tempo di analizzarlo a fondo....
 
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
 
avevo pensato a togliere gli int, ma poi mi dave errori di accesso alla memoria (ovviamente)..... quindi ho messo solo i bp dove mi servivano evitando in questo modo di incorrere nella violazione della memoria e negli int 2d
 
si tanto l'ho scritto giusto per informazione aggiuntiva, perchè l'avevi già risolto :)
 
hai fatto bene..... più cose si sanno meglio è.... ^^
 
Stato
Discussione chiusa ad ulteriori risposte.