Basic Malware RE

Basic Malware RE

Basic Malware RE es un room de tryhackme con 3 retos cogidos del blog de @MalwareTechBlog. Si ejecutamos cada uno de los tres ejecutables (que son PE32 ejecutables de windows) tienen todos un comportamiento parecido, o al menos eso parece desde fuera. Los tres crean un pequeño mensaje con el título de “We’ve been compromised!” y en el cuerpo del mensaje aparece un icono de peligro y lo que parece un hash, posiblemente de la flag.

Compromised.png

Para entender mejor lo que hacen estos ejecutables y encontrar cada una de las flags, vamos a analizarlos uno por uno.


##STRINGS1.EXE (reto 1)

Usamos en bash el comando strings sobre el ejecutable para ver si podemos sacar información antes de meternos con el análisis estático. En este primer archivo vemos muchas flags entre las cuales es posible que esté escondida la correcta.

Para analizar el código del binario voy a usar en este caso ghidra, ya que también decompila a C. Una vez creado el proyecto y cargado el archivo en ghidra miramos las instrucciones que se ejecutan en entry.

Ghidra Entry

Como podemos ver el archivo está cargando un string definido en data y haciendo un hash md5 sobre el para luego mostrarlo con MessageBoxA. Si miramos en la dirección de memoria donde se define ese string podemos encontrar la flag: “FLAG{CAN-I-MAKE-IT-ANYMORE-OBVIOUS}”.


STRINGS2.EXE (reto 2)

Igual que en el anterior caso usamos strings y luego ghidra, ya que en strings no encontramos nada interesante.

Al abrirlo con ghidra y mirar en entry vemos que este programa crea muchas variables char, que se definen seguidas en memoria, y las inicializa con valores en hexadecimal para luego pasar un puntero a la primera variable.

Var char

Para traducir estos valores de hexadecimal a caracteres he creado un pequeño programita en C copiando casi todo el código del ejecutable dado, pero metiendo los valores en un array para luego imprimirlos, ya que no puedo depender de que el compilador ponga o no las variables seguidas en memoria. Si compilamos y ejecutamos este código nos devolverá la flag: “FLAG{STACK-STRINGS-ARE-BEST-STRINGS}”.


STRINGS3.EXE (reto 3)

Volvemos a usar strings y ghidra. Con strings destacan las apariciones de las funciones FindResourceA y LoadStringA, por lo que es posible que la flag esté guardada como un recurso.

Al mirar entry en ghidra vemos que el ejecutable crea un array para guardar el hash md5 inicializandolo con ceros usando memset. Luego busca un recurso con FindResourceA y luego carga un string con LoadStringA. Si miramos las especificaciones de estas dos funciones en la api de windows nos daremos cuenta de que el puntero que se pasa para usar como buffer en LoadStringA es el mismo que el que se pasa a digeststring para hacer su hash. Es decir, que el string que se está cargando en local_4a4 es la flag con la que luego se hace un hash. Además, en la api podemos ver que el segundo parámetro de LoadStringA es el id del recurso string. Asi que para encontrar nuestra flag nos vamos a la sección de recursos (.rsrc) y bajamos hasta encontrar el string con id igual a 0x110 que en decimal es 272.

.rsrc ghidra

La flag es: “FLAG{RESOURCES-ARE-POPULAR-FOR-MALWARE}”.


Este artículo ha sido redactado con fines educativos. Cualquier acción derivada de este artículo que no tenga dicho fin entra en conflicto con nuestro propósito de hacer divulgación de contenido educativo, y es objeto de nuestra condena más enérgica.

Dbd4
comments powered by Disqus