Holas a todos los colegas, acabo de regresar de mis vacaciones (se acabo la gozadera) con un dolor de cabeza que para que, veran lo que en un principio parecia facil se ha vuelto un dilema y me refiero al CrackMe que pertenece a los Retos de Julio especificamente al VBCrackMe2...
Aqui estan todos los retos:
http://ultrashare.net/hosting/dl/5a58d57055
En este caso es un VB6 y hay que hallar un Code el cual se le pasa como argumento al ejecutar la aplicacion (vbcrackme codigo), lo primero que hice fue verlo en paños menores asi que le pedi a mi amigo VBDecompiler que lo analizara y obtuve como resultado esto
Como pueden apreciar trabaja al arrancar la aplicacion (Form_Activate) y asi como sobre 2 botones (Check y Click) que contiene la misma:
Apis que usa:
Un resumen de lo que hace:
Pues el programa al arrancar verifica si se le paso algun argumento y de aqui hay 2 posibilidades:
1 - Si no le paso ningun argumento o el argumento no es el correcto el programa escribe 6 bytes de basura en el comienzo del codigo del evento click del boton Unlock haciendo que cuando se de click este nos diga Nope, el tiene un manejador de errores que si no me equivoco lo que hace es tratar de controlar el error que se produce por la basura de los 6 bytes mandandonos ese mensaje de Nope.
2 - En caso de que nuestro code sea el correcto pues no escribe nada en el boton Unlock y al dar click este nos da el mensaje (If your password is correct the code is now unlocked) activando algun tipo de Flag (quizas pone una variable a True o algo parecido) que permite al boton Check verificar si el serial que introducimos es correcto o no.
Lo realizado por mi:
Mirando el codigo encontre que este realiza un XOR con una cadena (6¯'GšÎ)
Decidi pasarle como parametro esa cadena y vean lo que me dice SmartCheck:
No pude mostrarles la comparacion completa pero pueden apreciar algunas y que el XOR da cero, ahora lo que me inquieta es la linea que tengo seleccionada y es que el esta haciendo un LEN a una STRING vacia y dice que le devuelve 6 bytes, ahora cuando lo tire contra el OLLY este me muestra esto:
Disculpen que se vea asi pero bueno lo esencial se ve si descargan la veran mejor.
En la parte 1 es dentro del CALL LEN y como ven va a mover ESP+4 a EAX que es la direccion que esta en la 2 con el valor 00000000 resultado del FOR, despues cuando hace el TEST EAX, EAX no hace el JE porque EAX vale la direccion 0015000C y entonces hace las 2 operaciones restantes guardandose un 6, el que vemos en el SmartCheker.
Aqui viene mi pregunta supongo que el code que puse no es el correcto?
Ayuda... Gracias