Práctica de ingeniería inversa de APKs Android sobre InsecureBankv2 y el CTF KGB Messenger: obtención de código Java, modificación de smali y bypass de controles de acceso.
Abrimos APK Easy Tool, cargamos la APK y pulsamos Decompile. Se genera el directorio con todos los archivos del proyecto.
En el directorio descompilado encontramos el archivo classes.dex. Lo convertimos a JAR:
# Arrastrar classes.dex sobre d2j-dex2jar.bat o ejecutar:
d2j-dex2jar.bat classes.dex
Abrimos el .jar generado con JD-GUI → File → Save All Sources para obtener los archivos .java.
Los fuentes se encuentran en la ruta: com.android.insecurebankv2
Las actividades con android:exported="true" en el Manifest pueden ser invocadas desde cualquier otra aplicación. Para corregirlo:
<!-- AndroidManifest.xml: cambiar exported a false -->
<activity android:name=".PostLogin"
android:exported="false" />
Recompilamos el APK (APK Easy Tool firma automáticamente), lo desinstalamos del emulador y lo reinstalamos para verificar el cambio.
# Analizar con VirusTotal antes de instalar
# Descompilar con APK Easy Tool
# Revisar AndroidManifest.xml → MainActivity como actividad principal
El código en MainActivity.java verifica que el locale sea "Russia". En el archivo MainActivity.smali cambiamos los saltos condicionales:
# Cambiar if-nez que salta a :cond_0 → que salte a :cond_1
# Cambiar saltos de :cond_2 → :cond_3
# Esto hace que se salte la verificación de idioma
Recompilamos e instalamos: ahora muestra directamente la pantalla de login.
En MainActivty.smali encontramos la referencia 7f0d0000. En res/values/strings.xml:
<!-- strings.xml contiene:
- Una cadena codificada en Base64 (flag)
- El usuario: Stearling Archer
- La contraseña se obtiene por ingeniería social: "Guest" -->
En MessengerActivity.java los strings p y r contienen cadenas cifradas que son los mensajes a descifrar para obtener las flags finales.