Pinned
1 minuto de lectura
Se nos proporciona un archivo APK (pinned.apk
) y un archivo README.txt
:
1. Install this application in an API Level 29 or earlier (i.e. Android 10.0 (Google APIs)).
Análisis dinámico
Vamos a arrancar MobSF y Genymotion hacer un análisis dinámico:
Simplemente muestra un formulario de inicio de sesión con las credenciales ya escritas. No pude leer la contraseña desde ahí. Si pinchamos en el botón, veremos un mensaje exitoso:
Resolviendo el reto
El reto probablemente esté relacionado con certificate pinning en SSL/TLS (porque el reto se llama “Pinned”). Sin embargo, no lo resolví con este enfoque.
Miré la pestaña de “API Monitor” y encontré llamadas de funciones y algunos resultados interesantes:
Hay unos valores 72,84,66,123,116,...
, que son códigos ASCII decimales válidos para HTB{t
. Entonces, ahí estaba la flag. Esta pestaña “API Monitor” registra todas las llamadas a paquetes de Java externos (android.utils.Base64
, javax.crypto.Cipher
…), por lo que podemos deducir que la flag fue descifrada de alguna manera y el resultado se registró aquí. Este es el registro completo:
Flag
Podemos usar Python para decodificar todos los códigos ASCII a bytes y capturar la flag:
$ python3 -q
>>> bytes((72,84,66,123,116,114,117,115,116,95,110,48,95,49,95,110,48,116,95,51,118,51,110,95,64,95,99,51,114,116,33,125))
b'HTB{trust_n0_1_n0t_3v3n_@_c3rt!}'