Noticias

Writeup “Quizás”: Resultados y solución del desafío Frida en +/- 45 minutos

septiembre 3, 2023
En el contexto de los desafíos propuestos en la charla Frida en +/- 45 minutos realizada el 31 de agosto en la conferencia de sombreros blancos, se presentan las opciones de resolución del desafío Quizás.

En este artículo te explicaremos paso a paso cómo solucionar el desafío.

Solución 1: Método con frida

Al revisar el about de la aplicación, vemos un mensaje que indica el nombre de los desarrolladores del laboratorio.

Al analizar el código fuente del about vemos que el TextView aboutTextView define el texto a mostrar en base a nativeText(aboutText()) + “\n\n\nHappy Hooking <3”. Si revisamos aboutText() vemos que este retorna el string “yes”.

Utilizando frida, hacemos un hook para modificar el argumento de nativeText, esto puede hacerse hookeando aboutText(),forzando que el valor de retorno sea algo distinto. Si se sobrecarga de modo que el argumento de nativeText sea “maybe”, es posible obtener la flag del desafío.

Cabe señalar que también es posible realizar este ataque de argument overload hookeando directamente a nativeText.

Solución 2: Método sin frida (legal?)

Tal como su nombre lo indica, hay una manera sin utilizar frida para resolver el desafío. Para ello hay que tener en consideración ciertas cosas.

Luego, al revisar el código fuente de este dialog con JADX, vemos que tiene un método que declara el uso de una librería nativa.

Decompilamos la aplicación utilizando APKTOOL

En el directorio fridaen45minutos/lib/x86 vemos el shared-object libnative-lib.so que es utilizado en la clase del About.

Utilizando Ghidra para analizar la librería, vemos en el código de nativeText que esta valida si el string proporcionado es “yes” o “maybe” y según ello gatilla un comportamiento distinto.

Si revisamos el código de la función ejecutada al evaluar el string “maybe” vemos que se declara un array con valores en hexadecimal. Entre todas las opciones que tenemos, podemos directamente convertirlo a texto y obtener la flag del desafío.

Solución 3: Método sin frida (inesperado?)

Luego, al revisar el código fuente del dialog de about con JADX, vemos que tiene un método que declara el uso de una librería nativa.

Si revisamos en github el código fuente de esta librería vemos que el export JNI ejecuta la función fridaMessage() si el argumento de ejecución de nativeText es “maybe”.

En el código fuente buscamos la función fridaMessage() y la utilizamos para compilarlo en local agregando un printf.

Los ganadores de la competencia fueron N0hwt y k4n1n. ¡Felicitaciones a ambos! La organización de sombrero banco se contactará con ustedes para hacerles llegar sus merecidos premios.

charladesafíosFrida

Comparte este Artículo

Artículos relacionados