Crackmes Android - Capitulo 1

8 minute read

un agradecimiento muy especial a Rafael Lior por realizar este taller 🤙🏽

CRACKME-ONE.APK

CRACKME-TWO.APK

CRACKME-ONE.APK

Reto: Encontrar la clave de la aplicación

La aplicación será cargada en la herramienta jadx para revisar su código y se observa que hace una llamada a una clase de listeners.

Untitled

Al revisar las clases de listeners, se puede observar una condición que aparentemente captura lo que se ingresa en una caja de texto y lo compara con la cadena de texto ‘poorly-protected-secret’. Para confirmar esto, se debe instalar la aplicación.

Untitled

Para realizar esto, se necesitará tener activo un emulador o un dispositivo conectado al equipo. Utilizando la herramienta ADB, se puede verificar si hay dispositivos conectados mediante el comando adb devices. Así se podrá confirmar si el equipo está conectado correctamente.

Untitled

Luego, con la misma herramienta, se procede a instalar la aplicación utilizando el comando adb install crackme-one.apk Sin embargo, en algunos casos puede aparecer una alerta de seguridad al momento de realizar la instalación. En tal caso, se debe hacer clic en ‘Más detalles’ para continuar con el proceso

Untitled

Una vez que se haya hecho clic en ‘Más detalles’, se debe seleccionar la opción de ‘Instalar de todas formas’ para continuar con la instalación de la aplicación.

Untitled

Con los pasos previos completados, ahora es posible visualizar la aplicación en el dispositivo.

Untitled

Para comprobar su funcionamiento, se realizará una prueba añadiendo cualquier texto y haciendo clic en el botón ‘Check’. Como se espera, el resultado muestra que el texto ingresado no es correcto.

Untitled

Sin embargo, al ingresar la cadena de texto ‘poorly-protected-secret’, se puede completar el reto y obtener una respuesta afirmativa por parte de la aplicación.

Untitled

Para la segunda parte del reto, se nos pide modificar la aplicación para cambiar el secreto. Para llevar a cabo esta tarea, se utilizará la herramienta apktool para descompilar la aplicación. Se usará el comando apktool d crackme-one.apk -o crackme-oneModified, donde se emplea la opción ‘d’ para descompilar la aplicación, se escribe el nombre de la aplicación y se agrega la opción ‘-o’ seguida del nombre que se quiere para la carpeta donde se creará la aplicación descompilada.

Untitled

A continuación, se procede a abrir el proyecto utilizando un editor de texto como Sublime Text, que permite visualizar la aplicación descompilada y hacer las modificaciones necesarias. En este caso, se busca el archivo ChallengeOneFragmentOnClickListener.smali para encontrar el secreto, que se encuentra en la línea 80.

Untitled

Se identifica que el secreto también se encuentra en la línea 244 del archivo ChallengeOneFragmentOnClickListener.smali, la cual se ubica en una segunda sección que fue revisada.

Untitled

Se decide modificar los datos correspondientes en ambas líneas, para lo cual se utiliza la frase be_hacker_pro como sustituto del secreto original.

Untitled

Una vez realizados los cambios necesarios en la aplicación, se procede a guardar el archivo.

Untitled

Después de haber modificado el archivo con la frase “be_hacker_pro”, se procede a compilar la aplicación con los cambios realizados. Para llevar a cabo esto, se utiliza la herramienta apktool con el comando apktool b crackme-oneModified -o crackme-oneNew.apk. En este caso, el parámetro ‘b’ indica que se va a compilar la aplicación, mientras que ‘-o’ se utiliza para especificar el nombre del archivo de salida.

Una vez finalizado el proceso de compilación, se genera un nuevo archivo con el nombre especificado. Este archivo puede ser instalado en un dispositivo Android de la misma manera que se hizo con la aplicación original. Con estos cambios, la aplicación ahora utilizará la nueva cadena de texto como secreto para el reto.

Untitled

Si se intenta instalar la aplicación en este momento, se mostrará un error ya que la aplicación no está firmada.

Untitled

Para firmar la aplicación, se utiliza la herramienta uber apk, signer . El comando para firmar la nueva aplicación es: java -jar uber-apk-signer-1.3.0.jar --apks crackme-oneNew.apk Este comando exporta una nueva aplicación firmada y se puede instalar en el dispositivo.

Untitled

La nueva aplicación creada, llamada crackme-oneNew-aligned-debugSigned.apk, debe ser instalada para comprobar si las modificaciones que se hicieron funcionan correctamente. Para realizar la instalación se puede utilizar la herramienta adb y ejecutar el comando adb install crackme-oneNew-aligned-debugSigned.apk

Luego de instalar la aplicación, se debe verificar si aparece la misma alerta de seguridad que en la aplicación original y se debe hacer clic en “más detalles”.

Untitled

Y se da clic en “Instalar de todas formas”.

Untitled

Se observa que la aplicación carga, ahora se debe comprobar que los cambios realizados en la aplicación se encuentran presentes en la nueva versión instalada.

Untitled

Ahora al poner el nuevo secreto be_hacker_pro la aplicación indica que el reto ha sido completado.

Untitled


CRACKME-TWO.APK

Reto: Encontrar las credenciales que se encuentran almacenadas en la aplicación

La aplicación será cargada en la herramienta jadx para revisar su código y se observa que hace una llamada a una clase de listeners.

Se observa un código muy similar al reto anterior, lo que permite deducir que se debe dirigir la atención hacia los listeners

Untitled

Al revisar las clases de listeners, se puede observar una condición que aparentemente captura lo que se ingresa en una caja de texto y lo compara con las credenciales almacenadas en la aplicación para confirmar esto. Para verificar esta funcionalidad, será necesario instalar la aplicación.

Untitled

Para realizar esto, se necesitará tener activo un emulador o un dispositivo conectado al equipo. Utilizando la herramienta ADB, se puede verificar si hay dispositivos conectados mediante el comando adb devices. Así se podrá confirmar si el equipo está conectado correctamente.

Untitled

Luego, con la misma herramienta, se procede a instalar la aplicación utilizando el comando adb install crackme-one.apk Sin embargo, en algunos casos puede aparecer una alerta de seguridad al momento de realizar la instalación. En tal caso, se debe hacer clic en ‘Más detalles’ para continuar con el proceso

Untitled

Una vez que se haya hecho clic en ‘Más detalles’, se debe seleccionar la opción de ‘Instalar de todas formas’ para continuar con la instalación de la aplicación.

Untitled

Con los pasos previos completados, ahora es posible visualizar la aplicación en el dispositivo.

Untitled

Ahora se debe comprobar los datos encontrados almacenados en la aplicación, pero el secreto parece estar encriptado con un hash. Para descifrarlo, se utilizará la herramienta en línea crackstation.net , la cual permite realizar una descifrado rápido de varios tipos de hash.

Untitled

Para utilizar la herramienta, se debe hacer clic en “No soy un robot” y luego en “Crack Hashes”. Como resultado de este reto, se obtiene la clave secreta en texto plano “zipdrive”

Untitled

Cuando se ingresa una contraseña incorrecta, no se muestra ningún mensaje de error.

Untitled

Sin embargo, cuando se ingresa un correo electrónico incorrecto, el sistema muestra un mensaje de error indicando que la combinación de correo electrónico y contraseña es incorrecta.

Untitled

Después de ingresar los datos correctos, se muestra un mensaje que advierte sobre los peligros de dejar código en modo de depuración en la aplicación.

Untitled

Para la segunda parte del reto, se nos pide modificar la aplicación para cambiar el secreto. Para llevar a cabo esta tarea, se utilizará la herramienta apktool para descompilar la aplicación. Se usará el comando apktool d crackme-two.apk -o crackme-twoModified, donde se emplea la opción ‘d’ para descompilar la aplicación, se escribe el nombre de la aplicación y se agrega la opción ‘-o’ seguida del nombre que se quiere para la carpeta donde se creará la aplicación descompilada.

Untitled

A continuación, se procede a abrir el proyecto utilizando un editor de texto como Sublime Text, que permite visualizar la aplicación descompilada y hacer las modificaciones necesarias. En este caso, se busca el archivo ChallengeTwoFragmentOnClickListener.smali para encontrar el secreto, que se encuentra en la línea 124.

Untitled

Se identifica que el secreto también se encuentra en la línea 206 del archivo ChallengeTwoFragmentOnClickListener.smali, la cual se ubica en una segunda sección que fue revisada.

Untitled

Ahora se procederá a cambiar la clave secreta utilizando la frase “be_hacker_pro”. Sin embargo, para este reto es necesario realizar un paso adicional, que consiste en convertir esta frase a MD5. Para hacerlo, se utilizará la herramienta en línea md5online.org.

Untitled

Luego, se procede a cambiar el MD5 almacenado en la aplicación con el que se acaba de crear, en ambas líneas, comenzando por la línea 124.

Untitled

inalmente, se completa el proceso de cambio de MD5 en la aplicación modificando también la línea 206.

Untitled

También es posible cambiar el correo electrónico que actualmente tiene el valor manager@corp.net

Untitled

En este caso, se modificará el correo electrónico en la aplicación, reemplazando “manager@corp.net” por “angussmoody@behacker.pro

Untitled

Después de haber modificado el archivo con la frase “be_hacker_pro”, y el correo con “angussmoody@behacker.pro” se procede a compilar la aplicación con los cambios realizados. Para llevar a cabo esto, se utiliza la herramienta apktool con el comando apktool b crackme-twoModified -o crackme-twoNew.apk. En este caso, el parámetro ‘b’ indica que se va a compilar la aplicación, mientras que ‘-o’ se utiliza para especificar el nombre del archivo de salida.

Una vez finalizado el proceso de compilación, se genera un nuevo archivo con el nombre especificado. Este archivo puede ser instalado en un dispositivo Android de la misma manera que se hizo con la aplicación original. Con estos cambios, la aplicación ahora utilizará la nueva cadena de texto como secreto para el reto.

Untitled

Si se intenta instalar la aplicación en este momento, se mostrará un error ya que la aplicación no está firmada, igual que revisamos en el primer reto.

Untitled

Para firmar la aplicación, se utiliza la herramienta uber apk, signer . El comando para firmar la nueva aplicación es: java -jar uber-apk-signer-1.3.0.jar --apks crackme-twoNew.apk Este comando exporta una nueva aplicación firmada y se puede instalar en el dispositivo.

Untitled

La nueva aplicación creada, llamada crackme-twoNew-aligned-debugSigned.apk, debe ser instalada para comprobar si las modificaciones que se hicieron funcionan correctamente. Para realizar la instalación se puede utilizar la herramienta adb y ejecutar el comando adb install crackme-twoNew-aligned-debugSigned.apk

Luego de instalar la aplicación, se debe verificar si aparece la misma alerta de seguridad que en la aplicación original y se debe hacer clic en “más detalles”.

Untitled

Y se da clic en “Instalar de todas formas”.

Untitled

Se observa que la aplicación carga, ahora se debe comprobar que los cambios realizados en la aplicación se encuentran presentes en la nueva versión instalada.

Untitled

Ahora al poner el nuevo email angussmoody@behacker.pro y el secreto be_hacker_pro la aplicación indica que el reto ha sido completado.

Untitled