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 |