Reverse Engineering

DEMO

Uno de los principales peligros de las aplicaciones móviles es el llamado reverse engineering. Fácilmente, y mediante una serie de aplicaciones, podemos adivinar código, api keys, encription keys, usernames, contraseñas etc..

Los desarrolladores,  usan ProGuard para ofuscar el código y viene por defecto con Android SDK, aunque sea una fabulosa herramienta, no asegura que el código carezca de vulnerabilidades. Otra manera de ofuscar el código es hacerlo difícil de leer y más confuso a la vista del atacante.

Para este reto necesitaremos la instalación de dos aplicaciones, para hacer  el llamado reverse engineering a una APK. Estas son Dex2jar y JDGUI.

Con la primera de ellas, la llamada dex2jar, convertiremos el APK en un fichero java (jar). Posteriormente lo abriremos con JD-GUI y trataremos de buscar las vulnerabilidades o cualquier pista de código que nos facilite acabar el reto.

Tenemos que investigar sobre el código y sacar la key

 1. Conectamos por adb:

logan@loganayala:~$ adb connect 192.168.1.46
connected to 192.168.1.46:5555

2. Pasamos el fichero a nuestro ordenador:

logan@loganayala:~$ adb pull /sdcard/com.mobshep.reverseengineer-1.apk /home/logan
/sdcard/com.mobshep.reverseengineer-1.apk: 1 file pulled. 11.3 MB/s (2010243 bytes in 0.169s)

3. Convertimos el fichero en .jar con Dex2Jar:

logan@loganayala:~/MobilePentesting/Retos/ReverseEngineer/dex2jar-2.0$ sudo sh d2j-dex2jar.sh -f /home/logan/MobilePentesting/Retos/ReverseEngineer/1/reverseengineer-1.apk 

dex2jar /home/logan/MobilePentesting/Retos/ReverseEngineer/1/reverseengineer-1.apk -> ./reverseengineer-1-dex2jar.jar

4. Una vez tenemos el .jar, lo abrimos con JD-GUI:

logan@loganayala:~/MobilePentesting/Retos/ReverseEngineer/jd-gui/build/libs$ java -jar jd-gui-1.6.6.jar

Por último vemos que en la clase Reverse_Engineering.class, tenemos el secret string con la clave DrumaDrumaDrumBoomBoom.

LEVEL 1

This key to this challenge is the App author’s name. Find it to complete the challenge.

Conectamos por adb:

logan@loganayala:~$ adb connect 192.168.1.37
* daemon not running; starting now at tcp:5037
* daemon started successfully
connected to 192.168.1.37:5555

Comprobamos conexión:

logan@loganayala:~$ adb devices
List of devices attached
192.168.1.37:5555 device

Pasamos el fichero a nuestro ordenador, con adb pull y nos dirigimos al directorio:

logan@loganayala:~/MobilePentesting/Retos/ReverseEngineer/1$ ls
ReverseEngineer1.apk

Después de convertir el fichero a .jar y posteriormente, estar una hora buscando el nombre del autor en métodos y clases de java, like a noob, decidí investigar en google, y con un simple comando saqué la key del reto:

logan@loganayala:~/MobilePentesting/Retos/ReverseEngineer/1$ keytool -printcert -jarfile ReverseEngineer1.apk

Firma:

Propietario: CN=The key is christopherjenkins, OU=Vulnerable Abilities, O=Android Stuff, L=Dublin, ST=Leinster, C=IE
Emisor: CN=The key is christopherjenkins, OU=Vulnerable Abilities, O=Android Stuff, L=Dublin, ST=Leinster, C=IE
Número de serie: 4f814185
Válido desde: Wed Jun 08 16:26:03 CEST 2016 hasta: Thu Apr 15 16:26:03 CEST 2241

Huellas digitales del certificado:
SHA1: 7F:79:25:54:4E:CF:A5:14:CB:BB:FC:DA:7F:37:A0:B1:1F:B8:7B:DA
SHA256: 9A:F3:CD:BD:D4:74:65:3E:9D:36:E3:40:B3:E2:CC:C0:01:16:90:81:50:3A:B8:F6:2B:5C:76:50:4F:39:36:ED
Nombre del algoritmo de firma: SHA256withRSA
Algoritmo de clave pública de asunto: Clave RSA de 2048 bits
Versión: 3

Lo que hicimos anteriormente, fue buscar como sacar las propiedades del certificado y ahí localizamos el propietario de la app.

LEVEL 2

When an attacker reverse engineers an APK, they usually find multiple packages containing multiple activities, containing multiple methods which have all been obfuscated to crawl through. The key for this challenge has been hard coded into the APK for this challenge. To get to the key reverse engineer the APK and find the correct Activity which performs a conditional statement to check the validity of the key.

Procedemos como con los anteriores, convertimos condex2jar el fichero .apk a .jar y lo abrimos con JD-GUI. Observamos en la clase Triangle.class, texto sospechoso, al parecer obfuscado y nos dirigimos a ver los metodos que contiene:

Leyendo el método Onclick, obtenemos el password FireStoneElectric.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *