[Reto] Diofanto's Crackme

Iniciado por PeterPunk77, 23 Noviembre 2011, 01:56 AM

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

PeterPunk77

Buenas a todos,
aquí les traigo un nuevo y sencillo crackme para Windows.
Éste es bastante más sencillo que el Dioniso's o al menos a mi me lo parece y para cada nombre existen multitud de seriales válidos.
Parchearlo no tiene ninguna ciencia (con cambiar un byte es suficiente) pero puede que algún novato quiera practicarlo.
El siguiente grado de dificultad sería pescar un serial válido realizando un programita de fuerza bruta. Indicado para novatos avanzados o con ganas de aprender.
Y por último (lo que harán MCKSys Argentina, _Enko , .:UND3R:. , ...) es programar un keygen con múltiples seriales válidos para cada nombre (sin usar fuerza bruta claro está).

link 1 -> http://www.megaupload.com/?d=0WPEQFSF
link 2 -> http://www.2shared.com/file/aQskIPBy/Diofantos_Crackme.html

Suerte a todos.
Saludos.

_Enko

un keygenme prolijo en masm, y como toque extra fpu  :silbar:


Flamer

Estodo biejon Descargado los dos crackmes
::)

MCKSys Argentina

#3
Cita de: PeterPunk77 en 23 Noviembre 2011, 01:56 AM
Y por último (lo que harán MCKSys Argentina, _Enko , .:UND3R:. , ...) es programar un keygen con múltiples seriales válidos para cada nombre (sin usar fuerza bruta claro está).

Es obligatorio????  ;D

Si hago un tiempito, lo miro...  :silbar:

Saludos!

AH!!!

"Transeúnte, esta es la tumba de Diofanto: es él quien con esta sorprendente distribución te dice el número de años que vivió. Su niñez ocupó la sexta parte de su vida; después, durante la doceava parte su mejilla se cubrió con el primer bozo. Pasó aún una séptima parte de su vida antes de tomar esposa y, cinco años después, tuvo un precioso niño que, una vez alcanzada la mitad de la edad de su padre, pereció de una muerte desgraciada. Su padre tuvo que sobrevivirle, llorándole, durante cuatro años. De todo esto se deduce su edad."

:D
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


Flamer

Bueno mi duda sobre este crackme
nombre=flamer
serial=1234-67890abc
en la direccion 0040111C le pasan a EAX el valor de mi serial(los primeros 4 caracteres) en hexadesimal que lo podemos ver en el dump y queda asi EAX=34333231 y despues en la siguiente linea se inicializa ECX=4 despues una resta SUB AL,41 despues una comparacion CMP AL,1A y despues un salto JNB que es el del flags c el cual para que salte EAX tiene que ser menor a ECX que bale 4
mi pregunta es que seriaal tengo
que insertar para que en el dump valga 0 que EAX=0000005A

Flamer

Uff disculpen las molestias el serial quedaria asi para que saltara
nombre=flamer
serial=ZZZZ-67890abc

saludos ;D

MCKSys Argentina

#6
Mi primer analisis (rústico)


USER:
CRCNAME = 50554E4B
for i = 0 to len(user)
   CRCNAME = tablita(low_byte(CRCNAME) xor user[i]) XOR (CRCNAME / 256)

Luego, CRCNAME es un DWORD, de donde salen: CRCNAME[0], CRCNAME[1], CRCNAME[2] y CRCNAME[3]


SERIAL:
4 chars + "-" + 8 chars
ABCD-0123ABCD
s1 + "-" + s2

s1 tiene chars desde 41h a 5Bh ("A" - "Z")
cada char de s1 se le resta 41h. se obtiene t1.

suma = t1[0] + t1[1] * 26 + t1[2] * 676 + t1[3] * 17576
suma debe ser mayor que 1000!

s2 tiene chars HEXA (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)
cada char de s2 se le resta 30h. se obtiene t2.

for pos = 0 to 8
b1 = (8 - pos - 1) * 4
sum_s2 += t2[pos] * 2^b1

abs((sum_s2 * sum_s2 * CRCNAME[3]+1) + (suma * -1) + (sum_s2^4 * CRCNAME[1]+1)) < 0.25 ==> Serial correcto


En estos días veo de reversear bien y hacer el KG.

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


_Enko

#7
Yo lo unico que tuve tiempo de  sacar es que forzosamente los primeros 4 caracteres son "MMBA" para que sea igual a 1000 (3E8h).
Aunque ahora que lo veo hoy, la suma no debe ser igual a ese numero sino mayor xD


Pablo Videla

Voy a tener que aprender hacer este tipo de cosas  :xD

Flamer

Una pregunta amigos
nombre=FLAMER
serial=ABCD-01234567
mi duda es en la direccion 004011D9
lo que en tiendo que la instruccion FLD carga o le pasa el valor 2,998817e-38 a ST0 pero mi duda es de donde sale ese valor
saludos