Está en la página 1de 6

Descarga del CrackME. Preparativos.

Este programa lo hice con MASM32 en ensamblador y es de nivel 0 patatero


para principiantes. Est programado en cdigo nativo a 32 bits.

Un CrackME es un programa (es un reto) diseado para que lo intentes


crackear.

Lo puedes descargar desde aqu:


Descarga CrackME y varios ejemplos

Dirgete a la carpeta asm02, el CrackME se llama asm02.exe.


Qu necesitaremos?

Antes de comenzar ten preparados estos 2 programas:

* El depurador OllyDBG, sin ningn plugin.


* Resource Hacker v3.6.0.92 en espaol

Ests preparado? Vamos a ello!


Analizando con OllyDBG

Ejecuta asm02.exe para que veas su funcionamiento. Simplemente escribe


una contrasea en el cuadro de texto 1, y pulsa el botn Probar 2, no har
nada hasta que escribas el password correcto. La X 3 es para cerrar el
programa y el ? 3 es para abrir una ventana con informacin bsica.

CrackME 0.2

Abre asm02.exe con OllyDBG. Observa las primeras lneas del cdigo:

00401000 >> push 0


00401002 |. call 004011CC
<jmp.&kernel32.GetModuleHandleA>

00401007 |. mov dword ptr ds:[403000],eax


0040100C |. call 0040120E
<jmp.&comctl32.InitCommonControls>

00401011 |. push 0
00401013 |. push 40102E
00401018 |. push 0
0040101A |. push 65
0040101C |. push dword ptr ds:[403000]
00401022 |. call 004011D8
<jmp.&user32.DialogBoxParamA>

00401027 |. push 0
00401029 \. call 004011C6

; <jmp.&kernel32.ExitProcess>

Nos encontramos en la primera instruccin en 401000 >>. En qu


deberamos fijarnos? Si eres programador de C++ seguramente tengas claro
que hay varias formas de iniciar una aplicacin para Windows. En este caso,
nos encontramos en el hilo principal del programa. Comienza en 00401000 y
termina en 0040129 con un ExitProcess.

En el cdigo podemos ver que existen a la vista 4 llamadas a las API de


Windows (funciones que se encuentran en las libreras de Windows). Si
buscas informacin de cada una de ellas, vers que la que nos interesa es

DialogBoxParamA. DialogBoxParamA crea un cuadro de dilogo modal. A esta


funcin hay que pasarle 5 datos:

DialogBoxParamA, dato1, dato2, dato3, dato4, dato5


DialogBoxParamA, hInst, pTemplate, hOwner, DlgProc, lParam

Aunque todos ellos son importantes, nos vamos a centrar solamente en los
datos 2 y 4. Si tienes un poquito de experiencia vers que los datos de dicha
funcin se van empujando directamente en la pila: observa desde 00401011
hasta 0040101C. Para saber exactamente los datos de la funcin, pulsaremos
repetidamente (con asm02.exe cargado en OllyDBG) la tecla F8 y nos
detendremos en 00401022.

00401000 /. push 0
00401002 |. call 004011CC
<jmp.&kernel32.GetModuleHandleA>

00401007 |. mov dword ptr ds:[403000],eax


0040100C |. call 0040120E
<jmp.&comctl32.InitCommonControls>

00401011 |. push 0
00401013 |. push 40102E
00401018 |. push 0
0040101A |. push 65
0040101C |. push dword ptr ds:[403000]
00401022 >> call 004011D8
<jmp.&user32.DialogBoxParamA>

00401027 |. push 0
00401029 \. call 004011C6

; <jmp.&kernel32.ExitProcess>

Observa ahora la pila en OllyDBG, vers algo similar a esto:

0012FF78 00400000 |hInst = 00400000


0012FF7C 00000065 |pTemplate = 65
0012FF80 00000000 |hOwner = NULL
0012FF84 0040102E |DlgProc = asm02.0040102E
0012FF88 00000000 \lParam = NULL
Dato2 de DialogBoxParamA: pTemplate

Este dato suele ser el recurso del cuadro de dilogo. Como puedes ver,
corresponde a 65hexadecimal. 65h = 101decimal. Abre ahora asm02.exe
desde el editor de recursos Resource Hacker, busca 101 y vers qu recurso
va a ser mostrado.

Resource Hacker

Puedes ver que es un cuadro de dilogo, la ventana que vemos al ejecutar el


programa.
Dato4 de DialogBoxParamA: DlgProc

Este dato es muy importante. Observa que corresponde a 0040102E. Qu


significa esto? Es un puntero a los procedimientos de la ventana que va a ser
creada. Los mensajes de dicho dilogo van a ser procesados en esta
direccin: 0040102E. Por ejemplo; cuando se inicia la ventana, cuando se
dibuja, cuando se pulsa un botn, cuando se cierra etc. En resumen, el cdigo
que nos interesa analizar est a partir de 0040102E.

Vamos, por lo tanto, a listar el principio de ese cdigo:

0040102E /. push ebp


0040102F |. mov ebp,esp
00401031 |. mov eax,dword ptr ss:[ebp+C]
00401034 |. cmp eax,110
00401039 |. jnz short 004010BA
...

Qu significa ese cdigo? El procedimiento DlgProc tiene una serie de


parmetros que no vamos a ver en este artculo, simplemente quiero que
observes esto:

00401031 |. mov eax,dword ptr ss:[ebp+C]

Pone en el registro eax un valor hexadecimal que corresponde a un mensaje


de Windows. Esto es importantsimo y te aclarar muchsimas dudas. T
puedes pararte con OllyDBG en 00401034 y observar los valores que el
registro eax va tomando.

Si observas el cdigo anterior, en 00401034 se comprueba si el mensaje de


Windows es 110 hexadecimal. Y qu mensaje es 110? Bueno, para
solucionar este pequeo inconveniente, cre en esta web una tabla que
puedes ordenar, con muchos mensajes de Windows y sus valores
hexadecimales y decimales. Ahora comprobars la importancia de esta tabla
a la que puedes acceder desde el siguiente enlace. Esa tabla, ordnala por
decimal y busca el valor 110hexadecimal o 272decimal. A qu mensaje de
Windows corresponde?

110 corresponde al mensaje: WM_INITDIALOG. Su nombre lo indica casi todo,


es decir, en 00401034 se est comprobando si el cuadro de dilogo se est
iniciando, antes incluso de ser mostrado.

Todas estas explicaciones se pueden alargar muchsimo. Seguiremos en el


siguiente artculo aprendiendo interesantes secretos...

También podría gustarte