Happy_Brithday.exe Binary Solution |
|
Primero que todo quisiera agradecer a mi amigo @dplastico que me permitio aportar con un grano de arenas que fue este binario para la seccion de cracking. ![]() Despues de cargar el binario en un interactive disassembler como IDA, observamos el main() del binario y algunas de sus condiciones. Otra cosa a mencionar es que este binario contiene múltiples funciones anti-debug. ![]() Ahora pasamos a una pincelada de análisis, donde se observa la función flag1() que imprime el mensaje "Try Harder..." y que necesita un argumento para seguir con el flujo correcto. ![]() Cuando seguimos con el flujo se nos da la condición de seguir por la función flag2() que tiene un flag falso o thetime(), todo depende si pasamos la comprobacion de IsDebuggerPresent(). ![]() Si hacemos el bypass correcto de las funciones IsDebuggerPresent(), thetime() y anti_debug() que todas estas nos envían a fuera por estar depurando, nos encontramos con el ultimo obstaculo un fs:30h ¿que es esto?. Bueno en resumidas cuando se llama a un FS:[0x30] estamos cargando una dirección de Thread Environment Block (TEB) a PEB con desplazamiento 68h a NtGlobalFlag. Despues de evitar esto ultimo, entramos a la rutina para obtener el flag correcto. Leer mas de TEB aquí. ![]() Acá encontramos un array de caracteres que serán utilizados para generar el string final del flag. Estos son calculados de la siguiente manera: - Toma los primeros byte de los array y los calcula 0x69^0x11=0x78 - El resultado es xoreado con 0x122 y así sucesivamente con cada resultado. Despues al finalizar se realiza una lectura con size 0x29 en un for() donde es mayor al primer buffer[7], Entonces podemos leer todo los buffer que están por debajo. ![]() Este es el algoritmo que calcula mediante XOR los caracteres entre si. ![]() Video: https://www.youtube.com/watch?v=gcJ1xUB0-wU |