> CraCk Me n.2:SoLuTiOn
< Realizzato da
NoRpiUs
ToOLz
uTiLiZzATi: - Debugger ( Olly Dbg ) -
No Hex Editor + Disassembler (Vero?? :) )
SpiEgaZiOnE: Eccoci di nuovo qua... il nostro crack me e' sempre
piuttosto semplice pero' un pochino piu difficile dell'altra volta :)
Apriamo il nostro bel debugger, un
bpx su GetDlgItemTextA e via:
LEA ESI,DWORD PTR DS:[4030F8] ; carica in esi il nome MOV AL,BYTE PTR
DS:[ESI] ; carica in al la
prima lettera del nome TEST
AL,AL ; controlla se il nome e' finito JE
EsciCiclo ; se sì, esce dal ciclo ADD
ECX,EAX ; somma eax a
ecx SUB ECX,30
; sottrae 30h (48 decimale) a
ecx XOR ECX,11D7 ; xora ecx con 11D7 (4567
decimale) ADD
ECX,20 ; adda a ecx 20h (32 decimale) INC
ESI ; passa alla lettera successiva del
nome JMP
InizioCiclo ; e torna all' inizio del ciclo
Ok, poco cambia dal primo crack me,
quindi proviamo a scriverci il nostro keygen fino a questo punto e dovrebbe
venire una cosa del genere:
main() { char *nome; int
lun, i, serial = 0;
printf("Scrivi il nome: ");
scanf("%s",nome);
lun = strlen(nome); for ( i = 0; i < lun;
i++) { serial += nome[i]; serial -= 48; serial
^= 4567; serial += 32; } }
Bon, andiamo
avanti con debugging :)
CALL CrackMe2.004012A1 ; richiama qualcosa di oscuro e misterioso CMP
EAX,EBX ;
confronta eax con ebx (ovvero il seriale inserito) JE
SerialeGiusto ; se sono uguali vai a "Seriale giusto!" JMP
SerialeSbagliato ;
se no vai a "Seriale Sbagliato!"
Tutto come prima, posizioniamoci
sulla calle premiamo F7 per andare a vedere cosa esegue il programma e arriviamo
qua:
MOV EAX,ECX ; mette il seriale che si era calcolato prima in eax ADD
EAX,1B ;
somma a eax 1B ( 27 decimale ) CALL
Call2 ;
chiama la Call2 RETN ; esce dalla Call1 ( ma prima fa la Call2! :P
)
Call2: MOV ECX,4E ; mette in ecx 4E ( 78 decimale ) MUL
ECX ;
moltiplica eax per 78 XOR EAX,4D2 ; xora eax con 4D2 ( ovvero
1234) SUB EAX,17 ; sottrae a eax 17 ( 23
decimale) RETN ; esce dalla Call2
Qua notiamo che il programma esegue 2
call in cui vi sono i soliti calcoletti del kazzo quindi continuiamo pure il
nostro keygen per la sua versione finale che sara' così:
#include <stdio.h> #include
<string.h>
main() { char *nome; int lun, i, serial =
0;
printf("Scrivi il nome: "); scanf("%s",nome);
lun =
strlen(nome); for ( i = 0; i < lun; i++) { serial +=
nome[i]; serial -= 48; serial ^= 4567; serial +=
32; }
serial += 27; serial *= 78; serial ^= 1234;
serial -= 23;
printf("Il seriale e': %d",serial); }
Prima di salutarvi volevo allegarvi
lo splendido keygen che mi ha fatto il grande kOrn[CsA] che trovate qua e la sua solizione che trovate qui. Anche per oggi e' tutto,
cya.
|