concurso 8 crackslatinos

25
SOLUCION AL CONCURSO #8 CRACKSLATINOS FECHA Julio 2010 VICTIMA concurso 8crackslatinos“SunshineCrackme1” keygenme #2 bydeurus del URL DESCARGA http://crackmes.de/users/deurus/keygenme02/download PROTECCION Name + Serial + Keyfile OBJETIVO Registrarlo sin modificar nada y hacer un KEYGEN (generador de licencia valida) DIFICULTAD Novato (un poco confuso pero sencillo) CRACKER ALEJANDRO TORRES (TORRESCRACK) http://www.facebook.com/yo.torrescrack www.torrescrack.blogspot.com

Upload: pio777

Post on 27-Nov-2015

7 views

Category:

Documents


2 download

TRANSCRIPT

SOLUCION AL CONCURSO #8

CRACKSLATINOS

FECHA Julio 2010

VICTIMA concurso 8crackslatinos“SunshineCrackme1” keygenme #2

bydeurus del

URL DESCARGA http://crackmes.de/users/deurus/keygenme02/download

PROTECCION Name + Serial + Keyfile

OBJETIVO Registrarlo sin modificar nada y hacer un KEYGEN

(generador de licencia valida)

DIFICULTAD Novato (un poco confuso pero sencillo)

CRACKER ALEJANDRO TORRES (TORRESCRACK)

http://www.facebook.com/yo.torrescrack

www.torrescrack.blogspot.com

INTRODUCCION:

Hola , este tutorial ya lo tenia hace un buen rato , es de como

logre registrar el crackme “sunshine” posteado en el concurso

#8 de crackslatinos donde fui miembro hace tiempo donde

igual postee la solucion, este es un nivel algo sencillo pero

tiene algunas cosillas que me confundieron durante unos

momentos lo cual merece un tutorial , espero no haberme

extendido mucho y no aburrirlos , empezamos….

EXPLORANDO AL ENEMIGO:

Le pasamos el RDG Packerhaber que nos dice y vemos esto:

Vemos que es un visual C++ y según el el RDG ese el v.8.0,

ok ya revisado que no haya packer seguimos

Bien Ahora lo abrimos con el ollydebugger y lo corremos

hasta que nos salga la ventana que nos pide nombre de

usuario y contraseña y ahora escribiremos cualquier

contraseña veamos :

Uhmm bien vemos tambien que no hay mensaje de “chico

malo” entonces debemos entrar por otro lado , tal vez por

medio de las apis que capturan el texto , presionamos en el

ollyctrl.+ N y vemos las apis que utiliza el programa y

busquemos alguna sospechosa veamos

Uhmm si nos fijamos al final de la imagen estara la api

“GetDlgItemTextA” , ok listo , entonces vamos al

commandbar y ponemos un BP en la API y corremos veamos

Ahora corremos y presionamos el boton para que pare al

guardar el texto , veamos

Veemos que caimos al inicio de la api , ok ahora salgamos de

ella y caemos aquí veamos:

Ok si vemos en eax tenemos el largo de nuestro nombre , en

nuestro caso “0B” en decimal es 11 , ok seguimos traceando

hasta pasar las apis que guardan nuestro nombre de usuario

y contraseña hasta que llegamos a un call veamos:

Uhm vemos que debajo del call compara si eax vale 0 y en

caso de serlo nos manda fuera jeje, entremos en el haber que

carajos hace jeje veamos

Veemos que al inicio de la rutina hay una api encargada de

ver cuanto mide nuestra contraseña falsa y si es cero nos

hecha fuera y mas abajo vemos esto:

Uhmm solo de verla , veo que hace unas comprobaciones de

nuestro serial , por ejemplo compara cada carácter de

nuestro serial , con los numeros de 0 a 9 y si es menor a 0

(30 en hex) o mayor a 9 (39 en hex) y en caso de serlo nos

manda a un trozo de codigo que compara si es menor a “a”

(61 en hex) o mayor a “f” (66 en hex) y en caso de serlo

compara si es menor a “A” (41 en hex) o mayor a “F” (46 en

hex) y en caso de serlo no manda a un pedazo de codigo que

hara que eax retorne con 0 y tomara el salto que habiamos

visto , uhm todo apunta a que verifica que el serial sean

puros digitos hexadecimales (si ponen atención se

darancuenta) , entonces debemos de tratar de que nuestro

serial este dentro de lo requerido jejejee , por ejemplo en mi

caso mi serial “123456789” entra dentro de lo requerido jeje

, bien seguimos y veemos que hace con nuestro serial falso

veamos:

Vemos que a cada carácter de mi serial le resta 30 por

ejemplo mi serial es:

Ascii

1 2 3 4 5 6 7 8 9

Hex

31 32 33 34 35 36 37 38 39

Quedando

1 2 3 4 5 6 7 8 9

Y los guarda en la direccion que apunta [esi] y después

Dezplasa el contenido de [esi] 4 bit ala izquierda quedando al

final de todo el bucle asi mi serial trucho veamos

Y bien ahora que ya tenemos el resultado salimos del call y

vemos esto:

Vemos que no nos hecha afuera ,uff nos salvamos ejjeje ,

seguimos traceandoaver que otra cosa nos pide jeje,

seguimos hasta que vemos otra pequeña rutina veamos:

Vemos que va tomando cada carácter de nuestro nombre de

usuario y lo pone en después sumara cada carácter con el que

sigue hasta terminar con nuestro nombre y ecxcontendra el

resultado final , un ejemplo

Ascii:

t + o + r + r + e + s + c + r + a + c + k

Hexadecimal:

74 + 6f + 72 + 72 + 65 + 73 + 63 + 72 + 61 + 63 + 6B

Igual a = 4A3

Veamos pasemos el bucle y veamos el resultado en ecx

Ok seguimos traceandoaver que es lo que hace con ese

resultado jeje , seguimos traceando con f8 hasta que vemos

esto

Vemos que mueve a eax la longitud de nuestro serial falso y

después le resta 5 a eax y compara que eax no sea mayor

que 3 , uhm otra condicion que debe cumplir el serial , carajo

al ser mi serial 9 , entonces 9 – 5 = 4 y

4 > 3 entonces , demonios nos hecha afuera pongamos un

bp en la comparación y reescribamos un serial , por ejemplo

de 8 caracteres jeje , veamos:

Ok ahora vemos que pasamos por otra de las condiciones que

debe tener nuestro serial jeje , seguimos traceando y otro

poco abajo vemos esto

Vemos que mueve a eax , lo que se encuentra en la direccion

de memoria 0x4043d8 , uhmm???? Pero no recuerdo que se

guardara algo hay, y al no tener nada hay dentro nos

mandara para afuera el salto que viene , carajo ya decia que

no era tan faciljejeje , UHMM! listo! , me situo en donde va a

guardar en eax los datos y hacemos click derecho en

“FindReferencestoAddressconstant” veamos:

Y veremos lo siguiente :

Uhmm vemos que hay una direccion sospechosa donde

mueve el contenido de ecx a la direccion que nos interesa ,

vayamos a ese lugar y veamos :

Vemos muchas comprobaciones pero

vayamos al principio de la rutina y pongamos un bp para que

lo sigamos , paso por paso jeje veamos:

Ok ya que pongamos El bp al principio de la rutina , ahora

reiniciemos y veamos cuando para :

Ok ya paro, y traceamos poco a poco hasta que llegamos a

una api interesante veamos:

Veamos el stack

Uhmm al parecer ,ami punto de vista intenta abrir un archivo

.key , pero busquemos en Google para que se utiliza esa

funcion , veamos lo que encontramos

Uhmm entonare un gran ejemplo de cómo usarla para saber

el tamaño de un archivo y al fijarnos del ejemplo y ver en el

olly el programa un poco mas abajo estan las mismas apis

veamos

Pues esta tan claro como el agua , que con la funcionfopen_s

, busca el archivo data.key y al no hayar nada devuelve error

y nos saca por medio de este salto veamos:

Carajo , entonces pongamos BP en ese salto y creamos un

archivo data.key (con el contenido que quieran) en la

carpeta donde esta el crackme y reiniciamos el programa para

que pare en el salto condicional veamos:

OK ahora al para veremos que ahora si tomara el salto ,

vamos por buen camino jeje ,ahora sigue que compruebe el

tamaño del archivo como en el ejemplo que les mostremas

arriba , ahora seguimos traceando y veremos esto:

Si miran arriba en el ejemplo veran que la funcionftell

devuelve el tamaño del archivo y al pasar esa funcion

veremos devuelve en eax el tamaño de nuestro archivo en mi

caso 14 y vemos que mueve eax y lo compara con 0A (10 en

decimal) , uhm entonces ya sabemos que el archivo data.key

debe de tener 10 caracteres , entonces ponemos un BP en el

salto condicional y ponemos los 10 caracteres al archivo y

volvamos a caer en el salto veamos

Ok ahora el salto es tomado y podemos seguir adelante ,

seguimos traceando , haber is encontramos algo mas y

pasamos por la funcion que lee los datos del archivo y hasta

que llegamos a un bucle veamos de que se trata:

Uhmmveemos que coge cada carácter del archivo data.key y

hace unas cuantas cosillas por hay , eso lo veremos al crear el

keygen , por ahora nos interesa ver que mas hace con el key

falso , vayamos a al final del bucle y pongamos un bp y

corramos para que para hay ,veamos:

Al parecer un poco mas abajo salimos de la rutina , bien pues

entonces recordemos , a donde estabamos hace un rato ,

donde toma los datos de la memoria y los compara vayamos

hay , veamos:

Veemos que ahora ya no toma el salto veamos:

OK muy bien seguimos bien jeje , ahora vemos que unas

lineas abajo lo que hace es tomar el resultado de las

operaciones que hizo con los datos del archivo .key en mi

caso “ 14 “ y sumarlos el resultado de la suma de los

caracteres de nuestro serial en mi caso “4A3” y después ya

obtenido el resultado en mi caso “4B7” lo suma con el

resultado de las restas que le hizo a mi serial trucho en mi

caso es el siguiente :

y el resultado de las sumas es este:

uhmjeje y una lineamas abajo la compara nuestro

resultado trucho con el resultado correcto , uhmm como le

haremos para que después de las sumas el valor sea

“004010B0” , pues analizemos

Si el resultado de las operaciones que le hizo a los caracteres

del data.keyes : 14

Y el resultado de la suma entre cada uno de los caracteres de

mi nombre de usuario es : 4A3

Entonces eso quiere decir que solo hace falta poner un key

que al sumarlo con esos nos de el resultado 4010B0 ,

ponemos en la calc lo siguiente :

EL RESULTADO DE : 14 + 4A3 es = 4B7

Entonces:

Menos

Es igual a:

Y por fin , tenemos el key valido , lo probamos y veemos lo

siguiente :

Bien ahora solo falta hacer el keygen , en mi caso lo hare con

el RADASM (MASM) ustedes pueden hacerlo donde mas les

guste jeje

Bien ya cree mi keygen , no tiene muy buena fachada debido

alaFLOJERA (MEXICO) , FIACA (ARGENTINA)jeje pero algo es

algo , solo debemos escribir el nombre y en automatico al

escribir genera un serial valido con un archivo .key para que

acepte todo corectamente .veamos como quedo y lo

probamos

OJO , el keygen debe estar en la misma carpeta del programa

, porque genera un archivo .key que hace que la validación

sea exitosa y entonces probamos la contraseña que nos da el

keygen y veamos:

UFF ..por fin jeje terminamos , espero no se hayan aburrido ,

un saludo a todos y espero con este tutorial haber enseñado

algunas cosas a los que apenas están comenzando , por

ejemplo que siempre al final de todo se logran las cosas si

podemos analizar todo perfectamente y entender los

diferentes sistemas de proteccion

Agradecimientos: A todos los que alguna vez me apoyaron en

seguir adelante y los que colaboraron conmigo en diferentes

proyectos , familia ,amigos y a ti por leer este escrito.

Alejandro Torres (torrescrack)

e-mail: [email protected]