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 código nativo a 32 bits.

Un CrackME es un programa (es un reto) diseñado para que lo intentes
crackear.

Lo puedes descargar desde aquí:
Descarga CrackME y varios ejemplos

Dirígete a la carpeta asm02, el CrackME se llama asm02.exe.
¿Qué necesitaremos?

Antes de comenzar ten preparados estos 2 programas:

* El depurador OllyDBG, sin ningún plugin.
* Resource Hacker v3.6.0.92 en español

¿Estás preparado? ¡Vamos a ello!
Analizando con OllyDBG

Ejecuta asm02.exe para que veas su funcionamiento. Simplemente escribe
una contraseña en el cuadro de texto 1, y pulsa el botón 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 información básica.

CrackME 0.2

En el código podemos ver que existen a la vista 4 llamadas a las API de Windows (funciones que se encuentran en las librerías de Windows). push 0 00401029 \. Observa las primeras líneas del código: 00401000 >> push 0 00401002 |. call 004011C6 .&kernel32. push 65 0040101C |. mov dword ptr ds:[403000]. verás que la que nos interesa es . 00401011 |. En este caso. push dword ptr ds:[403000] 00401022 |. 00401027 |. push 0 00401013 |.eax 0040100C |. Si buscas información de cada una de ellas.&comctl32. call 004011CC <jmp.GetModuleHandleA> .&user32.exe con OllyDBG.InitCommonControls> . push 40102E 00401018 |.Abre asm02. push 0 0040101A |. <jmp. Comienza en 00401000 y termina en 0040129 con un ExitProcess.&kernel32.ExitProcess> Nos encontramos en la primera instrucción en 401000 >>. ¿En qué deberíamos fijarnos? Si eres programador de C++ seguramente tengas claro que hay varias formas de iniciar una aplicación para Windows.DialogBoxParamA> . call 0040120E <jmp. 00401007 |. call 004011D8 <jmp. nos encontramos en el hilo principal del programa.

lParam Aunque todos ellos son importantes.GetModuleHandleA> .&comctl32. 00401027 |.ExitProcess> .&user32.InitCommonControls> . dato1. mov dword ptr ds:[403000]. A esta función hay que pasarle 5 datos: DialogBoxParamA. push 0 00401002 |. Para saber exactamente los datos de la función.&kernel32. dato5 DialogBoxParamA. dato4. call 004011CC <jmp.DialogBoxParamA> . 00401007 |. hInst. Si tienes un poquito de experiencia verás que los datos de dicha función se van empujando directamente en la pila: observa desde 00401011 hasta 0040101C. hOwner. call 004011C6 .&kernel32. call 0040120E <jmp. push 0 00401029 \. pTemplate.eax 0040100C |. pulsaremos repetidamente (con asm02. dato3. 00401000 /. push 65 0040101C |. push 0 0040101A |. push 40102E 00401018 |. dato2. 00401011 |. nos vamos a centrar solamente en los datos 2 y 4. DlgProc.DialogBoxParamA. push 0 00401013 |.exe cargado en OllyDBG) la tecla F8 y nos detendremos en 00401022. DialogBoxParamA crea un cuadro de diálogo modal. push dword ptr ds:[403000] 00401022 >> call 004011D8 <jmp. <jmp.

cuando se cierra etc. a listar el principio de ese código: . Abre ahora asm02. Vamos. la ventana que vemos al ejecutar el programa. cuando se pulsa un botón. Por ejemplo. Como puedes ver. cuando se inicia la ventana. 65h = 101decimal. por lo tanto. En resumen. Dato4 de DialogBoxParamA: DlgProc Este dato es muy importante.Observa ahora la pila en OllyDBG. el código que nos interesa analizar está a partir de 0040102E. verás algo similar a esto: 0012FF78 00400000 |hInst = 00400000 0012FF7C 00000065 |pTemplate = 65 0012FF80 00000000 |hOwner = NULL 0012FF84 0040102E |DlgProc = asm02. Observa que corresponde a 0040102E. Los mensajes de dicho diálogo van a ser procesados en esta dirección: 0040102E. busca 101 y verás qué recurso va a ser mostrado.exe desde el editor de recursos Resource Hacker. cuando se dibuja. Resource Hacker Puedes ver que es un cuadro de diálogo. corresponde a 65hexadecimal. ¿Qué significa esto? Es un puntero a los procedimientos de la ventana que va a ser creada.0040102E 0012FF88 00000000 \lParam = NULL Dato2 de DialogBoxParamA: pTemplate Este dato suele ser el recurso del cuadro de diálogo.

en 00401034 se comprueba si el mensaje de Windows es 110 hexadecimal. cmp eax. para solucionar este pequeño inconveniente. Esa tabla.dword ptr ss:[ebp+C] Pone en el registro eax un valor hexadecimal que corresponde a un mensaje de Windows. ordénala por decimal y busca el valor 110hexadecimal o 272decimal. push ebp 0040102F |. Ahora comprobarás la importancia de esta tabla a la que puedes acceder desde el siguiente enlace. ¿Y qué mensaje es 110? Bueno. simplemente quiero que observes esto: 00401031 |. creé en esta web una tabla que puedes ordenar.110 00401039 |. antes incluso de ser mostrado. es decir. jnz short 004010BA .dword ptr ss:[ebp+C] 00401034 |. Tú puedes pararte con OllyDBG en 00401034 y observar los valores que el registro eax va tomando.0040102E /. ¿A qué mensaje de Windows corresponde? 110 corresponde al mensaje: WM_INITDIALOG. Si observas el código anterior. mov ebp. . en 00401034 se está comprobando si el cuadro de diálogo se está iniciando.esp 00401031 |.. mov eax.. Esto es importantísimo y te aclarará muchísimas dudas. con muchos mensajes de Windows y sus valores hexadecimales y decimales. mov eax. ¿Qué significa ese código? El procedimiento DlgProc tiene una serie de parámetros que no vamos a ver en este artículo. Su nombre lo indica casi todo.

Seguiremos en el siguiente artículo aprendiendo interesantes secretos...Todas estas explicaciones se pueden alargar muchísimo. .