Esta es una guía de cómo resolver, paso a paso, el reto RE101 de la plataforma Cyberdefenders.org
Tags: Writeups, Writeups Español, Cyberdefenders, RE101, Análisis de Malware, Análisis de binarios, decompiladores, debuggers.
Escenario
No hay escenario, la única descripción que nos da es la siguiente: “El desafío RE101 es un ejercicio de análisis binario, una tarea que realizan los analistas de seguridad para comprender cómo funciona un malware específico y extraer posible información.”
Índice
- Preámbulo
- Introducción
- Writeup
3.1 Pregunta 1
3.2 Pregunta 2
3.3 Pregunta 3
3.4 Pregunta 4
3.5 Pregunta 5
3.6 Pregunta 6 - Preguntas y respuestas
Preámbulo
Info | Descripción |
---|---|
Reto | RE101 |
SHA1SUM | b5b738f3436ae075a56d0adeed54715ecf2efecb |
Autor | Champlain College |
Tags | Reverse Engineering, Deobfuscation, Javascript, Misc, Zip |
Herramientas
Recomendadas
- IDA
- Ghidra
- Cutter
- HxD
- zipdetails
Usadas
- Flare VM
- PEStudio
- Cyberchef
- dcode.fr
- PEView
- HxD
- cutter
Introducción
Primero veamos con lo que estamos lidiando. Cuando descomprimimos el zip veremos que tenemos los siguientes ficheros:
- 6 ficheros distintos sobre los cuales vamos a trabajar.
Creamos nuestras carpetas base y ponemos manos a la obra.
Writeup
1. Archivo: “MALWARE000” - He utilizado esta nueva encriptación de la que he oído hablar en Internet para mi warez; ¡apuesto a que no puedes extraer la flag!
La primera pregunta nos dice que hay que trabajar sobre el fichero “MALWARE000” y especifica que hay una flag dentro que está protegida por algún método de encriptación.
Lo que vamos a hacer ahora es usar el PEStudio para echar un vistazo dentro haber lo que encontramos. La recon nos da lo siguiente:
- Ya vemos que nos indica que hay algo en base64.
-
En las strings podemos ver el valor de la variable que está en base64. La cadena que encontramos termina en un “=” lo que nos indica que está en base64.
-
Hay que pasar de base64 a texto claro usando el cyberchef. Sólo metemos el valor de la cadena como input, luego pasamos al recetario la operación “From Base64” y obtenemos lo siguiente:
- La respuesta es lo que está dentro de los símbolos de mayor y menor que.
2. Archivo: “Just some JS” - ¡Mira lo que puedo hacer!
En este paso hice lo mismo que anteriormente: el PEStudio. Al ver las strings vemos lo siguiente:
- Al principio creí que la cadena de caracteres que había en el valor era un error así que use el floss para extraer más info y obtuve una cadena de caracteres enorme similar:
- Tras el susto inicial (nunca había visto esto), recurrí a la web de “dcode.fr”, metí los primeros bytes en el buscador y encontré que este tipo de concatenación de caracteres corresponde a un lenguaje llamado “JSFuck”:
Una vez identificado el lenguaje, metí toda la cadena de caracteres y le dí a “Decode”:
- Tip: metí el output del floss en un txt para poder copiar y pegar la enorme cadena de caracteres más fácilmente.
- Ahí está nuestra flag: what_a_cheeky_language!1!
3. Archivo: “This is not JS” - Estoy cansado de Javascript. Por suerte, ¡encontré al abuelo de ese penoso último lenguaje!
Esta respuesta se puede obtener de la misma manera que la pregunta anterior: extraer la cadena de caracteres, identificar el lenguaje con el dcode.ft y decodificar:
- Esta vez tuve que ir viendo las opciones posibles hasta que di con que el lenguaje se llama “Brainfuck”:
- Nuestra flag es: Now_THIS_is_programming.
4. Archivo: “Unzip Me” - He comprimido flag.txt y lo he cifrado con la contraseña “password”, pero creo que la cabecera se ha liado… Puedes tener la flag si arreglas el archivo.
La pregunta nos dice ya que hay que analizar un fichero “zip” que tiene su header roto. Para poder identificar qué es lo que está mal, primero hay que saber cómo se ve un zip bueno. Para esto, simplemente cree un fichero llamado “file.txt” y lo comprimí en un zip. Con la herramienta PEView identifiqué el header:
- Así se ve un zip con el header correcto.
Ahora veamos el header del zip roto:
Con el editor de hex llamado “HxD” vi que había dos caracteres dumpeados sospechosos:
En las columnas “0A” y “0B” fila “00000010” hay un par de caracteres que no corresponden como se ve en el hex de un zip correcto. Cambié esos valores por “08” y “00”, respectivamente:
- Tras guardar el fichero zip editado, extraje el fichero de dentro y sacó un “file.txt”. Al abrirlo podemos ver lo siguiente:
- Allí esta nuestra flag: R3ad_th3_spec
5. Archivo: MALWARE101 - Aparentemente, mi encriptación no es tan segura. ¡Tengo una nueva forma de ocultar mis banderas!
Para esta pregunta tendremos que ver un poco cómo funciona por detrás el fichero correspondiente, por lo cual usaremos la herramienta cutter:
-
Si vemos los que está pasando en la función main veremos que está pasando caracteres al stack las cuales, después, va a imprimir.
-
Después de editar lo que hay en esas instrucciones nos quedamos con lo siguiente:
- La cadena que se está imprimiendo es: sTaCk_strings_LMAO.
6. Archivo: MALWARE201 - Ugh… Supongo que haré mi propia encriptación. No soy muy bueno con las matemáticas, ¡pero me parece bien!
Usando un software distinto, el IDAFree, podemos ver en la función “main” una cadena de caracteres que dice “The encrypted flag is”:
- Si saltamos en ese paso, iremos a la función en la que se va a concatenar una serie de cadena de caracteres:
- La función va a arrojar la flag encriptada:
0x6d,0x78,0x61,0x6c,0xdd,0x7e,0x65,0x7e,0x47,0x6A,0x4f,0xcc,0x0f,0x0c,0x73,0x68,0x55,0x42,0x53,0xdc,0xd7,0xd4,0x6B,0xec,0xdb,0xd2,0xe1,0x1c,0x6d,0xde,0xd1,0xc2
- Ahora lo que tenemos que buscar es el código destinado a desencriptar.
En la función “00400620” se ve que está concatenando caracteres empezando por “a” y “0”:
- La cadena que arroja es
0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf
Ya tenemos, entonces, la key y el mensaje. Podemos desencriptar la flag en el cyberchef:
- Allí tenemos nuestra flag: malwar3QPncryp710n-15-Sh17.
Preguntas y respuestas
-
Archivo: MALWARE000 - He utilizado esta nueva encriptación de la que he oído hablar en Internet para mi warez; ¡apuesto a que no puedes extraer la bandera!
0ops_i_used_1337_b64_encryption -
Archivo: Just some JS - ¡Mira lo que puedo hacer!
what_a_cheeky_language!1! -
Archivo: Esto no es JS - Estoy cansado de Javascript. Por suerte, ¡encontré al abuelo de ese penoso último lenguaje!
Now_THIS_is_programming -
Archivo: Descomprímeme - He comprimido flag.txt y lo he cifrado con la contraseña “password”, pero creo que la cabecera se ha liado… Puedes tener la flag si arreglas el archivo.
R3ad_th3_spec -
Archivo: MALWARE101 - Aparentemente, mi encriptación no es tan segura. ¡Tengo una nueva forma de ocultar mis banderas!
sTaCk_strings_LMAO -
Archivo: MALWARE201 - Ugh… Supongo que haré mi propia encriptación. No soy muy bueno con las matemátsicas, ¡pero me parece bien!
malwar3QPncryp710n-15-Sh17