Hola a tod@s
es que estaba viendo la solucion por que no lograba encontrar la clave viendo esta respuesta aclare varias cosas que no entendia pero tengo una gran duda como hace UNDER para saber que el valor que hay en 00402150 es exactamente 1F 2C 37 36 3B 3D 28 19 3D 26 1A 31 2D 3B 37 3E de antemano agradezco su gran ayuda
Citar
Si vemos el crackme está empaquetado, si no me equivoco con UPX.
Lo desempaquetamos.
Ya desempaquetado buscamos referencias de string, encontrarás la de que el serial es correcto, lo que debes dirigirte a ella y subir hasta el push ahí si miras abajo OllyDBG mostrará de donde es llamado ese procedimiento encargado de mostrar el mensaje, te darás cuenta que viene por consecuencia de un salto condicional si te vas a el, verás un poco más arriba dos call que utilizan parámetros de la pila, si entras verás que lo primero que hace es tomar la pass y pasarla a mayúscula, luego de pasarla a mayúscula realiza un cifrado XOR del password ingresado junto con la string:
Messing_in_bytes
Mientras va cifrando el resultado va sobre escribiendo el password introducido:
0040217E
luego de esto lo compara con:
00402150 1F 2C 37 36 3B 3D 28 19 3D 26 1A 31 2D 3B 37 3E
Por lo que si el password cifrado con la string Messing_in_bytes no es igual a los bytes ubicados en 00402150, nos mostrará un mensaje de error.
Por suerte el cifrado XOR es bidireccional lo cual puede ser invertido sin ningún problema, debemos plantearnos la siguiente pregunta: ¿Que serial necesito introducir para que cuando se cifre con la string me de como resultado el serial ubicado en 00402150?.
Si Serial introducido XOR String (Messing_in_bytes) = contenido address 00402150 (serial correcto)
al ser bidireccional
Serial correcto (X)= String (Messing_in_bytes) XOR contenido address 00402150
Lo cual nos dará la siguiente tabla:
Código:
HEX-ASCCI=R I D E R S O F T H E S T O R M
Lo desempaquetamos.
Ya desempaquetado buscamos referencias de string, encontrarás la de que el serial es correcto, lo que debes dirigirte a ella y subir hasta el push ahí si miras abajo OllyDBG mostrará de donde es llamado ese procedimiento encargado de mostrar el mensaje, te darás cuenta que viene por consecuencia de un salto condicional si te vas a el, verás un poco más arriba dos call que utilizan parámetros de la pila, si entras verás que lo primero que hace es tomar la pass y pasarla a mayúscula, luego de pasarla a mayúscula realiza un cifrado XOR del password ingresado junto con la string:
Messing_in_bytes
Mientras va cifrando el resultado va sobre escribiendo el password introducido:
0040217E
luego de esto lo compara con:
00402150 1F 2C 37 36 3B 3D 28 19 3D 26 1A 31 2D 3B 37 3E
Por lo que si el password cifrado con la string Messing_in_bytes no es igual a los bytes ubicados en 00402150, nos mostrará un mensaje de error.
Por suerte el cifrado XOR es bidireccional lo cual puede ser invertido sin ningún problema, debemos plantearnos la siguiente pregunta: ¿Que serial necesito introducir para que cuando se cifre con la string me de como resultado el serial ubicado en 00402150?.
Si Serial introducido XOR String (Messing_in_bytes) = contenido address 00402150 (serial correcto)
al ser bidireccional
Serial correcto (X)= String (Messing_in_bytes) XOR contenido address 00402150
Lo cual nos dará la siguiente tabla:
Código:
Código:
M e s s i n g _ i n _ b y t e s
00402150 1F 2C 37 36 3B 3D 28 19 3D 26 1A 31 2D 3B 37 3E
4D 65 73 73 69 6E 67 5F 69 6E 5F 62 79 74 65 73
XOR = 52 49 44 45 52 53 4F 46 54 48 45 53 54 4F 52 4D
HEX-ASCCI=R I D E R S O F T H E S T O R M