Crackmes Android - Capitulo 1
un agradecimiento muy especial a Rafael Lior por realizar este taller 🤙🏽
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.
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.
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.
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
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.
Con los pasos previos completados, ahora es posible visualizar la aplicación en el dispositivo.
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.
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.
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.
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.
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.
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.
Una vez realizados los cambios necesarios en la aplicación, se procede a guardar el archivo.
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.
Si se intenta instalar la aplicación en este momento, se mostrará un error ya que la aplicación no está firmada.
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.
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”.
Y se da clic en “Instalar de todas formas”.
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.
Ahora al poner el nuevo secreto be_hacker_pro la aplicación indica que el reto ha sido completado.
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
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.
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.
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
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.
Con los pasos previos completados, ahora es posible visualizar la aplicación en el dispositivo.
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.
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”
Cuando se ingresa una contraseña incorrecta, no se muestra ningún mensaje de error.
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.
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.
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.
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.
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.
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.
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.
inalmente, se completa el proceso de cambio de MD5 en la aplicación modificando también la línea 206.
También es posible cambiar el correo electrónico que actualmente tiene el valor manager@corp.net
En este caso, se modificará el correo electrónico en la aplicación, reemplazando “manager@corp.net” por “angussmoody@behacker.pro”
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.
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.
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.
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”.
Y se da clic en “Instalar de todas formas”.
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.
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.