Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: Caster en 5 Marzo 2015, 23:03 pm



Título: Problema con CrackMe cruehead 1.0
Publicado por: Caster en 5 Marzo 2015, 23:03 pm
Buenas!

Os comento: estoy leyendo los tutoriales de ricardo Narvaja sobre cracking. Ahora mismo estoy casi en el final de la primera parte. Hasta ahora lo que se es que cuando introduzco el serial primero comprueba si en el "Name" contiene numeros, y si los tiene muestra dos mensajes diferentes de "No luck", he llegado hasta la parte del código donde hace esta comprobación:

Código:
CPU Disasm
Address   Hex dump          Command                                  Comments
00401389  |.  3C 41         |CMP AL,41
0040138B  |.  72 1F         |JB SHORT 004013AC

Va comparando caracter a caracter y salta en el primer número que encuentre, entonces he estado jugando con el el flag CF para que, aunque haya un número, no se realice el salto. Si el salto no se realiza, pasa a la comprobación del segundo mensaje:

Código:
CPU Disasm
Address   Hex dump          Command                                  Comments
00401241  |.  3BC3          CMP EAX,EBX
00401243  |.  74 07         JE SHORT 0040124C

Si EAX y EBX son iguales, salta a un call que llama al mensaje bueno, entonces, se supone, que cuando ya he conseguido saltarme la primera comprobacion viene a esta, y si antes de ejecutar el crackme pongo el ZF a 1, saltará al mensaje bueno. El problema es que no lo hace, y no entiendo el por qúe, ya que he probado a poner un BP en dicho salto, activar el ZF y haciendo eso si que muestra el mensaje bueno. Espero haber explicado más o menos bien.

Un saludo.


Título: Re: Problema con CrackMe cruehead 1.0
Publicado por: MCKSys Argentina en 5 Marzo 2015, 23:57 pm
y si antes de ejecutar el crackme pongo el ZF a 1, saltará al mensaje bueno. El problema es que no lo hace, y no entiendo el por qúe, ya que he probado a poner un BP en dicho salto, activar el ZF y haciendo eso si que muestra el mensaje bueno. Espero haber explicado más o menos bien.

Si cambias el flag al iniciar el programa, el mismo cambiarás 1 millón de veces antes de llegar al salto. La instrucción que setea el flag de cero (y la que tiene en cuenta el JE) es el CMP de 401241.

No importa si pones el ZF en 1 en la instruccion previa o 1000 instrucciones antes: el CMP la modificará. Por eso te funciona cuando pones el BP en el JE.

Para ver lo que te digo, pon un BP en el CMP, cuando Olly pare, pon el ZF en 1. Luego de hacer F7 u F8, si EAX no es igual a EBX, entonces el ZF no cambiará. Si son iguales, cambiará a 0. Y el JE saltará según el ZF.

Saludos!


Título: Re: Problema con CrackMe cruehead 1.0
Publicado por: Caster en 7 Marzo 2015, 02:05 am
Entendido. Muchas gracias.