Tutorial Del Crackme Tr4ceflow Por Flamer

Bueno como siempre lo analizamos con el RDG Detector para saber en que lenguaje esta hecho y con que esta protegido e aquí la imagen:

                                 

Bueno como ven esta compilado en MinGW v3.2.x y estamos de suerte no esta empacado así que las cosas parecen que están a nuestro favor, ahora lo abrimos con el OllyDbg y antes que nada vemos si corre el crackme con el ollyDbg esto es solo para ver sino tiene métodos Anti-Debuger, damos F9 y vemos que se ejecuta perfecto.



Ahora  como dice el autor hay que quitar el mensaje que aparece cuando ejecutamos el crackme, para eso damos clic Derecho-------Search for-------- referenced text strings---para buscar el String del mensaje que es “To train your skills remove me too” como sebe en la imagen siguiente:



Ahora damos doble clic y nos lleva hasta aquí



Justo en la api del MessageBoxA, lo que aremos es nopear desde la dirección 00401399 hasta 004013BD, dirán por que también la línea 004013BD  y les contesto por que en línea 004013BD se le resta 10 al registro ESP por que mando llamar la api MessageBoxA y si nopeamos la api y se hace la resta al registro ESP el programa marcara error así que la nopeamos también y quedara algo así


Bueno ahora aguardamos los cambios y buscaremos como registrarlo e ingreso “Flamer” como nombre y como serial “123456” al darle clic me arroja la frase “Stupid boy. Do it better” que es la frase que nos arroja cuando ingresamos un serial erróneo.
Para eso buscamos en los string a ver que encontramos



Y como ven también esta la frase “Great you did it! Write a keygen and get in touch.” Que es la que nos muestra cuando ingresamos el serial correcto.
Ahora damos doble clic y ponemos un break point en la línea 00401337 y damos F9, se detiene justo en el break point, luego traseamos con F8 hasta el rent el cual nos lleva hasta la línea 004016EF
 

Y como ven mas arriba en la línea 004016DA vemos que hay un call antes del salto JNZ y creo que es el de validación, así que ponemos un BreakPoint en la línea 004016D0 y damos F9 e ingresamos al CALL con F7


Como ven en la línea 00401427 que es la  api GetDlgItemTextA  carga la palabra “Flamer” al registro EBX y el valor de 6 al registro EAX por que 6 por que es el numero de caracteres de la palabra “Flamer”.


Luego en la línea 00401431 vemos que le resta 2 a el registro EAX y acto seguido lo compara si es menor o igual a 3 el cual si no cumple nos rebota y no podemos seguir.
Bueno con esto concluyo que el campo nombre solo puede contener de 2 a 5 caracteres nomas, así que ingresamos “Flame” después en la línea 00401471 nos topamos con otro ciclo el cual convierte las minúsculas del campo nombre a mayúsculas




Con lo cual concluyo que con solo mayúsculas tendremos que trabajar luego en la línea 00401494 nos topamos con otro ciclo el cual esta encargado de buscar el carácter que contenga el valor ASCII  menor y acto seguido lo almacena en ECX


Después a este valor sele es restado 2 en la línea 0040149F


Bueno si no entienden se los explico, en “FLAME” el carácter menor es “A” que su valor corresponde a 65 bueno esto en la resta quedaría así:
2 -  65= - 63
Después en la 004014AD nos topamos con otro ciclo en este toma el valor de -63 y se lo suma a cada carácter del nombre pero en cada vuelta el valor de -63 aumenta 1, así que en la segunda vuelta es -62 y en la tercera vuelta es -61


Y el resultado es guardado en la misma dirección de la que obtenemos esto:



Luego en la línea 0040155D carga el valor 6 a EAX que es el numero de caracteres que son de la clave, después en la línea siguiente le resta 8 y el resultado es comparado con 2, en el cual para que no rebote y podamos seguir el valor de EAX en la línea 00401564 debe ser menor o igual a 2


Asi que concluyo que el campo serial solo puede contener de 8 a 10 caracteres.
Luego en la línea 004015A5 nos topamos con otro ciclo que verifica cada digito del serial ingresado de que sean números y no letras




Luego en la línea 004015CE lee el valor 7 por que el valor 7? Por que es el primer valor de la tabla de arriba.
Luego en la línea 004015D6 lee el valor 24 y en la línea siguiente a este sele incrementa 1 y se convierte en 25
Después en la línea 004015DD el serial ingresado es dividido por el 25 y en la línea 004015DF el residuo obtenido es comparado con el 7 obtenido en la tabla anterior y si el residuo es 7 continuamos.
Luego seguimos hasta la línea 004015FA el cual suma EDX que vale 1 mas 27 el cual nos da 28 luego en la línea siguiente a EDI sele pasa el valor 28 + 1 lo cual EDI Valera 29.
 Bueno en la línea 00401607 el serial es dividido por el 29
Después el residuo obtenido es comparado con la E que es el segundo valor de la tabla el cual tiene que ser igual para seguir
Después nos regresamos a la línea 004015FA donde ahora EDX vale 2 + 28 obtenemos 2A y en la línea siguiente EDI toma el valor de EDX + 1 y nos da 2B
Después este 2B divide el serial donde el residuo tendrá que ser igual a el tercer valor de la tabla.
Bueno creo que ya le agarraron el royo a este ciclo por que ya me enfade de explicar jejeje pero les adelanto los siguientes valores que dividen al serial que son 2F y 35

Bueno ahora aquí empieza lo bueno de este reto, como ya se supone que entienden los requisitos o filtros (y va a decir “como ya entienden la generación del serial” pero como ven no se genera ningún serial en este crackme lo tenemos que crear nosotros) que el serial deberá llevar para pasar todos esos obstáculos dirán como la aremos para generara el serial, bueno por eso digo que aquí empieza lo bueno.
Antes de empezar quiero aclarar que no encontré el serial valido para “FLAME” y mi keygen se basa en un algoritmo que encuentra seriales al asar no encuentra seriales de nombres fijos es una lastima pero es lo mejor que pude hacer bueno empecemos.
Primero agarramos un número al asar del rango 10000000 al 9999999999  yo voy a elegir el 123456789 y este será nuestro serial temporal
Segundo agarramos una letra al asar de las primeras letras del abecedario yo en mi keygen escogí las primeras 5 (A, B, C, D, E) por que son las mas menores.
3- acomodar la posición de la letra que escogimos en el nombre valido, si no entienden aquí se los explico.
Si escogimos la D al asar y como esta D estará en el nombre pregúntense cual es su posición en el nombre si es la primera letra, la segunda, la tercera, cuarta o quinta letra, bueno pues aquí les tengo una tabla que hice para las letras.


Esto funciona para las 5 letras nomas que yo en la tabla puse la pura D para no enredarlos ya que elegimos la D al asar pero pueden sustituirla por A, B, C o E.
Ejemplo si la letra D la pusimos en la posición 4 el residuo de la división del número al asar que elegimos tendrá que ser 5 o si la pusimos en la posición 2 el residuo tiene que ser 3.
Y pregunta si no nos da el residuo correcto?  e   aquí  la fuerza bruta que utilice, le sumamos o le restamos al numero aleatorio que elegimos entre el rango 10000000 y 9999999999 pero al sumar y restar no se pasen de este rango y dirán uff de aquí que le atines, pues no mi lógica no me fallo y son pocos los números por intentar el cual si lo haces con un programa, los encuentra muy rapido.
Bueno supongamos que pusimos la D en la posición 1 el residuo tendrá que ser 2, ahora toca encontrar las demás letras del nombre valido.

Para eso usamos mi programa para no tener que usar la calculadora y el notepad y estar sacando cuentas



Como ven puse “123456789” y lo que me devuelve, pero en la primera línea esta 36 así que le aumento 1 y me queda “123456790”, luego  le doy checar


Como vemos en la primera línea me devuelve 0 pero yo necesito 2 así que al numero 123456790 le aumento 2 y me quedaría 123456792 luego le doy checar



Como ven ya tenemos el serial pero falta encontrar el nombre valido para este serial y como aviamos dicho la D al principio


Bueno sumamos 65 + 11=77
Y ¿dirán por que 65 mas 11? por que al primero sele resto 66 y como decíamos mas arriba el numero ira disminuyendo y pues toca 65 mas el residuo de la segunda  línea de el otro campo de texto.
A continuación los resultados para no hacer el tutorial más largo:

66  +  2  = D
65  + 11 = L
64  + 8   = H
63  + 12 = K
62  + 23 = U

OJO: el primer carácter del nombre no necesaria mente tiene que ser D también puede ser A, B, C o E para el serial “123456792” pero las demás letras variarían.




Descargar archivos:
www.mediafire.com/download/h0k9tf7lzfcmi50/Solucion_Por_Flamer_Del_Reto_Tr4ceflow.rar

Bueno amigos eso es todo saludos Flamer y espero les haya gustado