Pusheen Loves Graphs
1 minuto de lectura
Se nos proporciona un archivo binario llamado Pusheen
. Si lo ejecutamos, veremos un dibujo de un gato:
$ ./Pusheen
▐▀▄ ▄▀▌ ▄▄▄▄▄▄▄
▌▒▒▀▄▄▄▄▀▒▒▐▄▀▀▒██▒██▒▀▀▄
▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▀▄
▌▒▒▒▒▒▒▒▒▒▒▒▒▒▄▒▒▒▒▒▒▒▒▒▒▒▒▒▀▄
▀█▒▒█▌▒▒█▒▒▐█▒▒▀▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▌
▀▌▒▒▒▒▒▀▒▀▒▒▒▒▒▀▀▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐ ▄▄
▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▌▄█▒█
▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐▒█▀
▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐▀
▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▌
▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▌
▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
▐▄▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▄▌
▀▄▄▀▀▀▀▄▄▀▀▀▀▀▀▄▄▀▀▀▀▀▀▄▄▀
Si miramos las cadenas de caracteres imprimibles, vemos que hay muchas que empiezan por e_
(de hecho, hay desde e_0_0
hasta e_66_100
). Podemos contarlas de esta manera:
$ strings Pusheen | wc -l
6767
Estas cadenas de caracteres pueden ser nombres de funciones, ya que el binario no ha sido despojado de sus símbolos:
$ file Pusheen
Pusheen: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, not stripped
Ghidra no será útil esta vez para analizar el binario. Sin embargo, si lo abrimos en IDA, veremos un mensaje de advertencia:
De hecho, el nombre del reto habla de grafos, e IDA normalmente muestra el código ensamblador en un grafo. Además, en la descripción del reto se habla precisamente de usar IDA.
Podemos aumentar el número máximo de nodos:
Y después decirle a IDA que muestre la función main
en un grafo. Obtenemos esto:
¿Guay, no? Esta es la representación gráfica del código: llamadas a funciones, condicionales, bucles…
Pero bueno, la flag es: HTB{fUn_w17h_CFGz}
.