Crack Me 0.2 by Red Mx
Autor: Red Mx
Nombre: Crack Me 0.2
Fecha: 26 de mayo de 2009
Tamaño: 8,44 KB
Compilador y/o Packer: MEW 1.2 / Visual Basic (código nativo)
Objetivos: Conseguir la clave correcta.
Dificultad: 1-2 (1-10).
Realizamos un análisis con RDG Packer Detector:
Notamos que está comprimido con MEW 1.2 intentemos descomprimirlo abramos el crackme con OllyDBG, Nos avisa que está comprimido:
Intentemos buscar el OEP con el método de memory breakpoint on execution, esto se puede hacer a través de de un pluguin o ollydbg parcheado 5:
Presionamos M y colocamos un Memory breakpoint on access en la sección CODE
*En realidad es un MBPX por el pluguin:
Le damos RUN, esperamos un poco y se detiene en 00401210:
removamos el análisis del código y nos quedará:
Dumpeamos con ollydump:
Vamos a reparar la IAT, Nos vamos search->all intermodular call's y buscamos una que apunte a la IAT, en este caso rtcMsgBox:
Le damos doble click y nos aparecerá lo siguiente:
ahora Follow in dump->Memory Address y buscamos el Inicio y el final en la IAT en este caso:
Inicio:00401000
Final:004010C0
Largo:C0
colocamos los datos en ImportREC:
No hay ninguna IAT redireccionada :
presionamos fix dump, seleccionamos el archivo dumpeado previamente por Ollydump, intentemos ver si se ha desempaquetado correctamente:
Funciona de maravilla, ahora intentemos colocar un serial:
Antes de presionar OK nos dirigimos a la sección code y colocamos un Memory Break point on execution (Con el pluguins), ahora le damos OK y se detendrá a continuación:
004025C0 . 816C24 04 3B0>SUB DWORD PTR SS:[ESP+4],3B
004025C8 . E9 A3050000 JMP dmp_.00402B70
Si seguimos traceando llegaremos hasta el siguiente OP code:
en el cual deberemos cambiar el FLAG S para que salte, debido a que notoriamente se puede visualizar una string que no es conveniente pushear
Si seguimos traceando una vez modificado el flag s llegaremos a un call encargado de devolver la fecha:
en mi caso 01/09/2011, luego de esto elimina los /:
si seguimos traceando pasando por la concatenación de dos series de string muy llamativas y un conjunto de otras operaciones llegaremos a la siguiente call:
si entramos con F7 a la call llegaremos a la siguiente call encargado de revertir la string:
Luego de seguir traceando llegaremos a una comparación a través de __vbaVarTstEq:
Entremos a la call con F7 llegando hasta el push 0, una vez detenidos ahí hacemos click derecho en EAX y presionamos follow in stack y veremos lo siguiente:
esto es comparado con edx (follow in stack) en mi caso UND3R es decir compara:
5642345645648784564156116456456110290104164214614321777407216721791241671010
con
UND3R
__vbaVarTstEq devuelve en EAX un número distinto de 0 si las dos string comparadas son iguales, notaremos que el resultado se dirige a ESI y luego se realiza un TEST SI,SI luego la comparación final JE SHORT en la cual si __vbaVarTstEq devuelve 0 en EAX JE saltará
Probemos con la string comparada:
pero, ¿para qué el crackme obtuvo la fecha?
Recordamos que la fecha en mi caso era: 01/09/2011, luego se eliminaron los /
01092011 luego se concatenó con las string llamativas y luego se revirtió la string:
5642345645648784564156116456456110290104164214614321777407216721791241671010
por lo cual lo que está con rojo debería ser la variable del serial del crackme