> CraCk Me n.1 Di
^Spider^:SoLuTiOn < Realizzato da NoRpiUs
ToOLz
uTiLiZzATi: - Debugger ( Olly Dbg
)
SpiEgaZiOnE: Al mio amico |TonT| serviva
una mano per questo crack me.. non riusciva a fare il keygen cosi mi son messo
al lavoro e, dopo aver scritto il keygen giusto, ho deciso di scrivere un
tutorial. Bon, cominciamo. Bpx su GetDlgItemTextA e siamo qua:
CALL EDI ; prende il
nome CMP EAX,6 ;
confronta se il nome e' lungo 6 JNB SHORT Crackme1.00401239 ; se e' maggiore salta (e deve
saltare!!) PUSH 30 ; pusha i parametri della MessageBox MB_OK ecc... PUSH Crackme1.004050DC ; pusha la stringa "Lamer!" PUSH
Crackme1.004050AC ; pusha "Il nome deve essere
lungo 6 caratteri" PUSH ESI ; pusha l' hIstance CALL DWORD PTR
DS:[<&USER32.MessageBoxA>] ; richiama la
MessageBoxA
Beh il codice si
commenta da solo, grazie anche alle stringhe. La lunghezza del nome > 6.
Avanti. Ci sono un po' di righe dopo cmq arriva in questo punto dove dentro la
"CALL EDI" si prende il suo seriale:
CALL EDI
; prende il serial CMP
EAX,6 ; confronta se e'
lungo 6 JNB SHORT Crackme1.00401269 ; se
e' maggiore di 6 jumpa (e deve jumpare) PUSH
0 ; pusha i
parametri della MessageBoxA, MB_OK ecc... PUSH
Crackme1.004050A4 ; pusha la stringa
"Leim!" PUSH Crackme1.00405084 ; pusha "Il serial inserito è
errato." PUSH ESI ; pusha l' hIstance CALL DWORD PTR
DS:[<&USER32.MessageBoxA>] ; richiama la
MessageBoxA
Stessa storia di
prima. Controlla se il serial e' lungo piu di 6 caratteri se no esce. Ora siamo
arrivati al cuore del crack me... ovvero all'unico ciclo di creazione del
serial.
XOR ECX,ECX
; azzera il contatore Iniziociclo: MOVSX
EAX,BYTE PTR SS:[EBP+ECX-8] ; mette in eax ECXesima lettera del nome MOVSX
EDX,CL ; mette in edx il
contatore ADD EAX,EDX ; somma edx a eax MOV
EDI,1A ; mette 1Ah in
edi (26 decimale) CDQ
; non serve a un cazzo per il seriale IDIV
EDI ; divide eax
per 26 ADD DL,41 ; somma 41h al resto della divisione (65 decimale) XOR
DL,29 ; xora il
resto per 29h (41
decimale) NOP ; No OPeration MOV AL,BYTE PTR SS:[EBP+ECX-10]
; mette in al il ECXesima carattere del
seriale XOR AL,29 ; xora al per 29h (41 decimale) CMP
DL,AL ; confronta la
lettera del seriale col nome JNZ SHORT Crackme1.004012D7
; se sono diverse jumpa a "errore" INC
ECX ; incrementa
il contatore CMP ECX,6 ; confronta il contatore con 6 JB SHORT
Iniziociclo ; se e' minore torna
a inizio ciclo
La routine e' molto semplice... e si
puo' riassumere in queste fasi: - Prende lettera del nome - Aggiuge a questa lettera il contatore - Divide il risultato per 26 - Al resto aggiunge 65 e
controlla
Considerando che l'ultima operazione che fa con il
nome prima di confrontarlo e' uno xor con 29 ed e' pure l'ultima operazione che
fa con il seriale, si puo' fare a meno di implementarla nel keygen, in quanto e'
inutile xorare 2 valori per uno stesso numero e dopo confrontarli... non li si
xora e si confrontano direttamente. C'e' un altra cosa da notare: alla fine il
contatore lo confronta con 6 e on con la lunghezza del nome o del seriale, il
che vuol dire che al programma interessano solo i primi 6 caratteri del nome e
del seriale, dei restanti caratteri non gliene importa nulla. Ora pasto il
keygen finale:
#include <stdio.h> #include
<string.h> #include <stdlib.h>
main() {
int lun, i,
edx, eax; char nome[2000];
printf("Scrivi un nome: ");
scanf("%s",nome);
lun = strlen(nome); if (lun < 6)
{ printf("Nome troppo corto, minimo 6 caratteri");
exit(1); }
printf("Il seriale e': "); for ( i = 0; i < 6;
i++) { eax = nome[i]; eax += i; edx = eax %
26; edx += 65; printf("%c",edx); } }
Ok abbiamo finito questo semplice crack me di
^Spider^. C ya. |