Objetivo:
Para obtener la bandera del archivo binario (ELF).Tópicos cubiertos:
1. Radare2, x32/x64 dbg
2. Comando Linux (objdump, awk, cut y grep)
3. Secuencias de comandos de Python
El fragmento de código de la izquierda es la función de verificación. Era muy obvio que el valor del registro eax se comparará con el valor en el [ local_8h ] también conocido como ebp-0x08h para continuar con su proceso.
Luego, intente mirar hacia arriba para comprender de dónde proviene el valor de eax y [ local_8h ]. Hay una operación xor en al (los bytes inferiores de eax) con un valor constante. Si el valor comparado no es el mismo, irá a la función badboy en la que el programa terminará :(
Entonces, solo necesitamos obtener el valor de eax que es igual al valor comparado para evitar que el código ejecute la función badboy. Dado que la operación xor es reversible, podemos obtener el valor eax correcto mediante xor la constante con [local_8h] (p. ej., 0xf7 ^ 0xa3). Sin embargo, hay demasiados bloques de código que el be xor. Por lo tanto, no se puede hacer manualmente, por lo que se necesita un script para hacernos la vida más fácil. Pero antes de escribir el script, debemos extraer y filtrar todo el código de operación innecesario. Objdump nos ayudará aquí.
objdump -d -M intel ch30.bin
Mmm. Los resultados son muy largos y necesitamos hacer algún filtro. Aquí, usaré el comando del manipulador de cadenas de Linux: awk , cut y grep . Dejaré el comando utilizado aquí y no lo explicaré en detalle. El comando aquí se mezcló con el comando en el informe disponible (solo se pudo acceder a esto después de que se resolvió el desafío... oops... por lo tanto, algunos de los comandos awk y cut están redactados con el carácter 'x').
objdump -d -M intel xxx | awk -F 'xx' -v RS= "xxxx" 'xxxxxxxxxx' | cut -fx | grep "some mov and xor"
Básicamente, la idea es usar expresiones regulares y operaciones condicionales para filtrar todas las cadenas innecesarias y luego xorearlas para obtener la bandera. Pero de alguna manera hay algún valor que no obtuvo xor en absoluto. Entonces, tienes que resolverlo por ti mismo para hacer frente a tal situación: D
Después de que todo se hizo correctamente, apareció una cadena codificada en base64. Después de decodificar las cadenas, aparece un archivo EXE (puede ser reconocido por el MZ en el encabezado de la salida, puede investigar un poco sobre la firma del archivo).
¡Guau! Un archivo en un archivo. A continuación, avancemos en la máquina Windows (puede continuar con radare2 o IDA pro en su máquina Linux).Publicado anteriormente en