CrackMe#2 di Cruehead
Serial fishing

Data

by Kurdt Kobain

 

15/07/2001

UIC's Home Page

Published by Quequero

It's better to burn out than to fade away

Dai che sono semplici...I primi :)

Rock'n'roll High School

....

E-mail: [email protected]
Canale IRC Crack.it,nick RIP_Kurdt

....

Difficoltà

(x)NewBies ( )Intermedio ( )Avanzato ( )Master

 

Prosegue la saga sui crackme di cruehead...ora siamo al secondo


CrackMe#2 di Cruehead
Serial fishing

Written by Gbyte

Introduzione

Proveremo a capire come vengono confrontati i due seriali! Niente di più semplice.

Tools usati

SoftIce 

URL o FTP del programma

Sezione Crackme

Notizie sul programma

Ancora un piccolo crackme ... devo dire che è veramente semplice ... eh, non semplice ... una scemenza ... quindi lo consiglio a tutti coloro che non hanno mai usato il softice e vogliono imparare. Al lavoro!

Essay

Come prima cosa avviamo il programma e possiamo constatare che nella forme è identico al primo di cui già vi ho parlato in uno scorso tute. Andiamo in help|Enter password e possiamo notare che il prog. ci chiede di inserire una pass. senza alcun nome, quindi non vi sarà nessuna generazione di seriale...se è fisso! 
Bene, allora settiamo un bp sulla funzione GetDlgItemTextA e vediamo cosa fa il Sice...bene poppa non appena premiamo OK sul box! Con F11 usciamo dalla chiamata ad User32 e cominciamo a steppare con F10. Però prima vediamo dove viene salvato il nostro seriale:

:004012B3        PUSH 11

:004012B5        PUSH 0040217E <- qui

:004012BA        PUSH 000003E8

:004012BF        PUSH DWORD PTR [EBP+08]

:004012C2        CALL User32!GetDlgItemTextA <- chiamata x l'acquisizione del seriale

 

Andando avanti vedremo di essere catapultati in Kernel32 ed in User ma questo non ci interessa, torniamo nel nostro programma (guardate sempre in basso nella barra verde)! Ed ecco cosa abbiamo:

 

:00401223        CMP EAX,00

:00401226        JZ 004011E6

:00401228        PUSH 0040217E

:0040122D        CALL 00401365 <- chiamata per l'acquisizione del seriale

:00401232        PUSH 0040217E

:00401237        CALL 004013B8 <- chiamata del controllo

:0040123C        ADD ESP,04

:0040123F        TEST CL,CL <- test(ament)

:00401241        JZ 0040124A <- salta se cl=0 cioè se seriale esatto

:00401243        CALL 00401349 <- Errore

:00401248        JMP 004011E6

:0040124A        CALL 00401334 <- ben fatto

:0040124F        JMP 004011E6

 

questa è la parte centrale del controllo,vediamo due call poi un test cl,cl, un jz e poi di nuovo due call. Quindi con F8 entriamo nella prima call e osserviamo le istruzioni assembly:

 

 

:00401365        MOV BYTE PTR [00402118],00 <- sposta nel byte puntato il valore 0

:0040136C        MOV ESI,DWORD PTR [ESP+04]

:00401370        PUSH ESI

:00401371        MOV AL,BYTE PTR [ESI] <- sposta in al primo char

:00401373        TEST AL,AL 

:00401375        JZ  00000990 <- zero? Sei un coglione se non hai messo il seriale

:00401377        INC BYTE PTR [00402118] <- aumenta di 1 il valore del byte all'indirizzo 402118 (questo indirizzo è della memoria, non c'entra con gli indirizzi che trovate sulla sinistra delle istr. asm)

:0040137D        CMP AL,41 <- da qui in poi...calcoli del cazzo

:0040137F        JB  00401385

:00401381        CMP AL,5A

:00401383        JNB 00401388

:00401385        INC ESI

:00401386        JMP 00401371 <- ripete fino alla fine del seriale

:00401388        CALL 00000025

:0040138D        INC ESI

:0040138E        JMP 00401371 <- ripete fino alla fine del seriale

:00401390        POP ESI

:00401396        JMP 00401398 <- oh che bel salto! Mi sembra Fiona May

:00401398        RET 

 

Questa è tutta l'acquisizione della pass. avrete notato che alla fine non troviamo il nostro seriale in nessun registro e allora voi vi chiederete "Ma cosa diavolo ha combinato sto programma se ha fatto tutto sto casino per niente?" Risp:Semplice,al programma non gliene frega niente dei char che avete inserito, invece va a guardare il n° di char inseriti, infatti alla fine di questa call,all'indirizzo di memoria 00402118 (d 00402118), vedrete proprio il numero di char che avete inserito. Bene...andiamo avanti con la seconda call!

 

:004013B8        XOR EDI,EDI

:004013BA        XOR ECX,ECX

:004013BC        MOV CL,BYTE PTR [00402118] <- sposta in cl numero di char

:004013C2        MOV ESI,DWORD PTR [ESP+04]

:004013C6        MOV EDI,00402150

:004013C9        REPZ CMPSB <- questo non so di preciso cosa faccia ma una cosa è certa:diminuisce il valore di cl di 1 mentre aumenta di 1 quello di esi ed edi, a Que dillo tu cosa fa!

:004013CA        RET

 

Quindi usciti da questa call avremo in cl il numero dei char inseriti-1. Per avere il programma registrato cl deve essere = 0 (il salto deve avvenire, infatti la call di congratulazioni è la seconda) quindi il numero di char inseriti deve essere = 1 (1-1=0). Avete visto che scemenza, basta mettere nel box un qualsiasi char, uno solo però!

 

Kurdt Kobain

 

Note finali

 

Non ho parole . . . . . . . . . . . . . . . . . . . . . . . . . . .  quindi . . . . . . . . . . . . . . Come on people now, smile on your brother, everybody get together, try to love one another, right now . . . . . . . . . ahhhhhhhhhhhhhhhhhhhhhhhhhhhhhh. Ciave & buon crack a tutti!

 

 

Disclaimer

Vorrei ricordare che il software non va comprato e  ne rubato perchè lo trovate gratuitamente su questo sito.Non  dovete registrare il vostro prodotto facendovi mandare il seriale dall'autore perchè altrimenti che crackme sarebbe? 

Noi reversiamo al solo scopo informativo e di miglioramento del linguaggio Assembly.