Ayudita con un craqueo

Iniciado por xAnubiSx, 29 Octubre 2007, 20:12 PM

0 Miembros y 2 Visitantes están viendo este tema.

xAnubiSx

hola gente, como estan ?

miren hace poco empeze a ver este tema del craking, y esta muy bueno... lei todos los tutoriales de la pagina, han salido todo re bien !

mi pregunta es:

intente ver si puedo crackear un software, el "1st smtp Server". lo cual lo hice a medias. esta echo en Delphi, no tiene protección.

[Edit] Pongo la url, por si quieren ver el programa. http://www.emailarms.com/products/1st_smtp.html [/Edit]

tiene una ventana de registro que aparece cada vez que arranco el programa y cada determinado tiempo se vuelve a abrir. lo que hice fue poder poner cualquier numero de registro y me lo tome como valido el tema es que cuando lo cierro y lo abro aparece y sigue apareciendo al transcurrir un determinado tiempo en ejecución.

que cosas tendria que ver, para poder crackearlo bien :D o conseguir un serial valido (que no lo pude encontrar :S )

salu2

Karman

El código es muy simple... tenes que simplemente buscar tu famoso mensaje ("invalid code"), subís un poco (la pantalla) y ves que hay un salto que desemboca ahí... te vas al salto, y ves que se compara un registro si es distinto de 0 (test bl,bl) pero antes se guarda en bl: eax (acumulador) y antes una llamada a una función... por lógica eax contendrá el valor de retorno de esa función, entonces es esa llamada la que hace el checkeo del serial, analizas el código de la función y hay varias comprobaciones... el tema es que si pones puntos de comprobación van a saltar a cada rato, porque le programa tiene un timer y cada cierta cantidad de tiempo vuelve a comparar la clave...
entonces seteás un breakpoint en la llamada a la función y cuando se detiene entras a debugearla y encontráis lo siguiente:


:004EC910 53                      push ebx
...
:004EC91E E82980F1FF              call 0040494C  <- longitud de clave
:004EC923 83F80E                  cmp eax, 0000000E <-tiene que ser igual a 14
...
:004EC92A 803830                  cmp byte ptr [eax], 30  <- primer dígito = 0
...
:004EC937 80780231                cmp byte ptr [eax+02], 31 <- 3º = 1
...
:004EC945 80780332                cmp byte ptr [eax+03], 32 <- 4º = 2
..
:004EC953 80780433                cmp byte ptr [eax+04], 33 <- 5º = 3
...
:004EC961 80780734                cmp byte ptr [eax+07], 34 <- 8º = 4
...
:004EC96F 80780839                cmp byte ptr [eax+08], 39 <- 9º = 9

:004EC97D 80780A35                cmp byte ptr [eax+0A], 35 <- 11º = 5
...
:004EC989 83FE07                  cmp esi, 00000007 <- coinciden todos??
:004EC98C 0F94C3                  sete bl <- serial válido
...
:004EC994 C3                      ret


un ejemplo de serial válido sería:  0X123XX49X5XXX

S2

xAnubiSx

#2
muchas gracias por responder !
(estoy revisando el code)

Pregunta, que hace la función (test bl,bl).
el algoritmo que compara si el serial es valido, seria

cmp byte ptr [eax+02], 31

y si es asi, esa operación, como se explica el funcionamiento... :S ( estoy entendiendo de a poco, en la facu recien empezamos con assembler y me la vuela bastante... :D)

graicas !!!

Karman

Cita de: xAnubiSx en 30 Octubre 2007, 18:57 PM
Pregunta, que hace la función (test bl,bl).

test x,y equivale a if(x&y), en el caso test bl,bl , se compara que bl sea distinto de 0 y se guarda el resultado en las banderas del procesador...

Cita de: xAnubiSx en 30 Octubre 2007, 18:57 PM
el algoritmo que compara si el serial es valido, seria

cmp byte ptr [eax+02], 31

en realidad son todos los

cmp byte ptr [eax+X], Y

y el

cmp esi, 00000007

Cita de: xAnubiSx en 30 Octubre 2007, 18:57 PM
y si es asi, esa operación, como se explica el funcionamiento... :S ( estoy entendiendo de a poco, en la facu recien empezamos con assembler y me la vuela bastante... :D)

el serial que coloques se almacena en el registro del acumulador (eax) y mediante los índices se puede ir recorriendo cada caracter:

key: hola

byte [eax]='h'
byte [eax+1]='o'
byte [eax+2]='l'
byte [eax+3]='a'

con:

cmp byte ptr [eax+X], Y

se compara cada uno de los caracteres con Y1,Y2,...,Yn
si son iguales se incremente el registro esi... y si:

cmp esi, 00000007 <- los siete carateres coinciden(fíjate que hay 7 comparaciones en el código)

sete bl <- serial válido

S2

xAnubiSx

#4
La Verdad que mil gracias!!!

me esta gustando mas esto que programar en visual, o pascal (lo que me dan en la facu :D )

salu2

Offtopic: Buena tu pagina ! ya me registre :D


[Edit] de Casualidad como veo donde guarda la informacion de registro, porque quiero investigarlo un poco mas al programa, y desinstale. borre todo limpie el registro, pero sigue registrado :S [/edit]

Karman

Cita de: xAnubiSx en 30 Octubre 2007, 20:10 PM
[Edit] de Casualidad como veo donde guarda la informacion de registro, porque quiero investigarlo un poco mas al programa, y desinstale. borre todo limpie el registro, pero sigue registrado :S [/edit]

La verdad que ni idea... ya desinstale tb el programa, pero tendría que aparecer en las cadenas de texto que el programa utiliza... fijate ahí...

S2