Buenas a todos,
aquí les traigo un nuevo y sencillo crackme para Windows.
Éste es bastante más sencillo que el Dioniso's (http://foro.elhacker.net/ingenieria_inversa/reto_dionisos_crackme-t345585.0.html) 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.
un keygenme prolijo en masm, y como toque extra fpu :silbar:
Estodo biejon Descargado los dos crackmes
::)
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
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
Uff disculpen las molestias el serial quedaria asi para que saltara
nombre=flamer
serial=ZZZZ-67890abc
saludos ;D
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!
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
Voy a tener que aprender hacer este tipo de cosas :xD
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
De momento no estoy como para publicar el keygen, tengo que hacer algunas optimizaciones.
User: Enko
Pass:
BEEC-40708291
SIFB-C04EE399
LUBD-C083963E
LQUA-C0398EFC
VFJB-C055417F
VFJB-C055417F
IVBA-3FBF9034
SIFB-C04EE399
LQUA-C0398EFC
ZWBA-3FC176AF
OVFQ-40C8DBBE
OVFQ-40C8DBBE
ZWBA-3FC176AF
Saludos.
Enhorabuena a todos. Ya veo que no ha durado nada el crackme. Pues nada, ahora a solucionar el Dioniso's.
Saludos.
Cita de: PeterPunk77 en 25 Noviembre 2011, 13:04 PM
Enhorabuena a todos. Ya veo que no ha durado nada el crackme. Pues nada, ahora a solucionar el Dioniso's.
Saludos.
No del todo.
la formula es esta:
abs(k4^2*k2 - k1 + k4^4*k3) = k5 > 0.25 y par.
k1,k2 y k3 dependen del crc del nombre.
k4 son los ultimos 8 digitos hexa del serial.
La solucion correcta, en teoria es despejar de la ecuacion k4. Es una ecuacion bicuadratica, por ende:
X = k4^2
de esa forma nos quedaria:
k3x^2 + k2x - k1-k5
Se despeja las dos raices de X y luego despejamso k^2 como sqrt(x) y nos da otras dos raices de K. En total 4 raices. (de las cuales usamos una sola).
Lo que no me sale es programar la fpu para que haga la resolvente y luego elegir la raiz correcta.
Saludos.
Perdona _Enko, pero no entiendo qué problema tienes.
Efectivamente el crackme no es más que una ecuación bicuadrada que evidentemente tiene 4 posibles soluciones y cualquiera de ellas debería ser válida. Yo sólo he hecho una prueba para comprobar que todo estuviese correcto y con la solución obtenida con los positivos de las raíces cuadradas no he obtenido ningún error.
Saludos.
No me llevo muy bien con la fpu.
Intente un par de veces resolver las raices de la bicuadratica pero no ha resultado...
No estaba seguro si eran mis pesimos conocimientos de matematica (no tenia ni idea de como se resolvia una cuadratica), o mis otras pesimas habiliades con la fpu.
voy a ver si en estos dias intento arreglar el tema con las raices y la fpu, o bien terminaria reescribiendo todo en C o algo parecido.
yo me doy ya me enfade con los crackmes (todos) ya medio coraje con todos los pendientes que tengo; eso me pasa por andar pidiendo crackmes. boy a tomar un descanso mejor por que no tengo pasiensia ni animos de seguir con el tema.
me quede con la instruccion FLD
al raton
saludos flamer
yo me doy ya me enfade con los crackmes (todos) ya medio coraje con todos los pendientes que tengo; eso me pasa por andar pidiendo crackmes. boy a tomar un descanso mejor por que no tengo pasiensia ni animos de seguir con el tema.
me quede con la instruccion FLD
al raton
saludos flamer
Cita de: Flamer en 1 Diciembre 2011, 16:33 PM
yo me doy ya me enfade con los crackmes (todos) ya medio coraje con todos los pendientes que tengo; eso me pasa por andar pidiendo crackmes. boy a tomar un descanso mejor por que no tengo pasiensia ni animos de seguir con el tema.
me quede con la instruccion FLD
al raton
saludos flamer
Creo que se debe a estás juntando muchos a mi me suele suceder y simplemente borro mi máquina virtual y parto de nuevo con 0 crackmes, tomo uno o dos y empiezo a trabajar con ellos, si no están a mi alcance intento nuevamente con otro,
Saludos
Keygen:
http://www.mediafire.com/?3myalaqt3iy5eg3
(genera 10 llaves aleatorias por intento)
Saludos.
Cita de: .:UND3R:. en 1 Diciembre 2011, 16:44 PM
Creo que se debe a estás juntando muchos a mi me suele suceder y simplemente borro mi máquina virtual y parto de nuevo con 0 crackmes, tomo uno o dos y empiezo a trabajar con ellos, si no están a mi alcance intento nuevamente con otro,
Saludos
Y porqué borras tu VM?, tan solo hasle un snapshot y listo.
Cita de: Иōҳ en 2 Diciembre 2011, 15:42 PM
Y porqué borras tu VM?, tan solo hasle un snapshot y listo.
O copiar y pegar el archivo del disco rigido ^^
Cita de: _Enko en 2 Diciembre 2011, 15:53 PM
O copiar y pegar el archivo del disco rigido ^^
Pues copio nuevamente el snaptshot
Saludos
Cita de: _Enko en 2 Diciembre 2011, 07:14 AM
Keygen:
http://www.mediafire.com/?3myalaqt3iy5eg3
(genera 10 llaves aleatorias por intento)
Saludos.
Enhorabuena Enko,
ya sabía que al final no ibas a tener ningún problema (aunque pensé que lo ibas a programar en asm32).
Por cierto, ese crackme es el Diofanto no el Dioniso:
Diofanto está considerado uno de los padres del algebra.
Dioniso era el dios griego del vino.
Saludos.
peterpunk, el crackme lo hice mitad/mitad. C/Asm
La parte del CRC la hice en asm (practicamente copypast de tu rutina original)
La parte del keygen en si, en C.
Para convertir un FLOAT a su representacion hex de 32 bit tambien tuve que usar asm inline. Usando un puntero y leyendo byte a byte me daba otro resultado.
Aqui el fuente:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <windows.h>
unsigned int __stdcall crc_check(char *, unsigned int);
unsigned int __stdcall crc_table();
unsigned int __stdcall _rand(unsigned int);
extern unsigned int randseed;
int main(void)
{
int iCount, tCount;
char serial[]= "1111-";
char user[] = "0000000000000000";
unsigned int kx, k1, k2, k3, k4, k5, r;
float r1,a,b,c;
printf("User: ");
scanf("%s", &user);
randseed = GetTickCount();
crc_table();
kx = crc_check(user, strlen(user));
for(tCount=0; tCount<=10; tCount++){
for(iCount=0; iCount<=3; iCount++)
serial[iCount] = (char) _rand(26);
k1 = (serial[3] * 0x44A8) + (serial[2] * 0x2A4) + (serial[1] * 0x1A) + (serial[0]) ;
for(iCount=0; iCount<=3; iCount++)
serial[iCount] += 65;
k2 = (kx & 0xFF) + 1;
k3 = ((kx >> 0x10) & 0xFF) + 1;
a = k3; //180
b = k2; //146
c = k1; //33k
r1 = (-b + sqrt(b * b + 4 * a * c)) / (2 *a);
r1 = sqrt(r1);
printf("%s", serial);
__asm{
push eax
mov eax, r1
mov r, eax
pop eax
}
printf("%X", r);
printf("\n");
}
system("pause");
return 0;
}
include '%fasminc%\win32a.inc'
format MS COFF
public crc_table as '_crc_table@0'
public crc_check as '_crc_check@8'
public _rand as '__rand@4'
public randseed as '_randseed'
section '.text' code readable executable
proc _rand, range
mov eax,[range]
imul edx, [randseed], 0x08088405
inc edx
mov [randseed], edx
mul edx
mov eax, edx
ret
endp
proc crc_table
push esi edi ebx
mov edi, 0xEDB8832D
inc edi
xor ebx, ebx
mov ecx, table
.crc_start:
movzx eax, bx
add eax, eax
mov dx, 0xFFF7
.first:
test al, 1
je .next
shr eax, 1
xor eax, edi
jmp .over
.next:
shr eax, 1
.over:
inc dx
jnz .first
mov [ecx], eax
inc ebx
add ecx, 4
cmp bx, 0x100
jnz .crc_start
pop ebx edi esi
ret
endp
proc crc_check, user, len
push esi edi ebx
mov ebx, [user]
mov esi, [len]
mov edi, 0x50554E4B
.crc_start:
mov edx, edi
mov eax, [ebx]
and eax, 0xFF
xor al, dl
mov eax, [eax*4+table]
shr edx, 8
xor eax, edx
mov edi, eax
inc ebx
dec esi
jnz .crc_start
not edi
mov eax, edi
pop ebx edi esi
ret
endp
section '.data' data readable writeable
randseed dd 0
table dd 0xFF dup ?
pd: A... Diofanto, asi la bicuadratica tiene mas sentido con el nombre.
Gracias por el buen crackme, podria ahora hacerlo completamente en asm ya que el problema no era la fpu, sino la resolvente estaba buggeada.