Bueno, ya te han dado varias respuestas a tus preguntas, pero aún asi:
Tuviste algún problema para ejecutar el crackme y debuggear? Instalé algunas protecciones básicas y quería saber si te topaste con ellas o si directamente ni las vistes.
La primera protección es mandar cerrar los procesos típicos del olly
La segunda fue ocultar la API MessageBoxA, en lugar de cargarla de forma normal, usé GetProcAddress
La tercera protección es algo más compleja: Se genera un thread adicional e inyecto un código ASM en dicho thread para ejecutarlo, dejo el source:
Por lo visto los plugins de Olly también lo protegen de los threads que generas a partir de la aplicación principal
Ya que la llamada a la API IsDebuggerPresent no se genera nunca desde el propio ejecutable. Seguiré investigando
PD. El source de thread en ASM no es mio
No tuve problemas para ejecutar el crackme bajo Olly. Use Olly 1.10 con el plugin StrongOD (uno viejito que tengo por ahi).
Vi las protecciones que has puesto.
La proteccion de cerrar los procesos con "taskkill" no funciono porque strongod usa un driver para que el olly no aparezca en la lista de procesos. A esto lo puedes verificar con Process Explorer, por ej.
El ocultar el mensaje de "chico bueno" seria inconveniente si lo hubiera buscado
. Normalmente, busco otros indicadores para saber si algo salio bien o mal, aunque asumi que algo pasaria al "ingresar" los datos correctos.
El tema del thread esta bueno. Incluso mire el codigo. Aqui te hago una sugerencia: No uses strings para armar el codigo. Es muy evidente. Puedes usar un monton de cosas raras en VB, abusando de la estructura de los ejecutables (sino preguntale a Karcrack que es un monstruo en ese tema)
Por ej: Si estudias como hace VB para llamar a una API de Windows, veras que puedes definir una API inexistente en una DLL conocida (o inexistente tambien) y ejecutar codigo llamandola (esto es lo genial). Esto despista y hace que el analisis sea mas complejo.
Otra cosa: fijate que en vez de usar CreateThread. puedes usar CallWindowProc para ejecutar el codigo. Incluso, puedes cargar el code asm en un array y ejecutarlo. Esto tiene la contrariedad de que si la maquina tiene DEP activo para todos los procesos, va a fallar, por lo que podrias hacer un VirtualAlloc y despues si ejecutar.
En resumen: el desafio fue entretenido. Me he divertido analizando el codigo, asi que para mi es tarea cumplida...
Saludos!