CTF Android: módulo.apk. Tiempo de juego, juego para aprender | de Lam Pham | moduleTech | Noviembre de 2020

Comenzamos con la función más simple: la función de inicio de sesión. Hay 2 campos de inicio de sesión / contraseña y un archivo Acceso botón.

Presunto objetivo: La misión es encontrar el nombre de usuario y la contraseña ocultos en algún lugar de los códigos e iniciar sesión.

LoginActivity

Echando un vistazo al LoginActivitycódigos de clase, la parte que debemos considerar en primer lugar es onCreate método:

LoginActivity

Es obvio que esta aplicación está ofuscada por Proguard. Sin embargo, esto no es gran cosa; todavía podemos encontrar lo que necesitamos.

El primero Yo la declaración no parece preocuparnos; parece que si se cumple una determinada condición, se pasa a otra actividad.

Mire la pantalla de actividad, podemos asumir que cuando hacemos clic en el Acceso , si el nombre de usuario y la contraseña son correctos, sigamos adelante. Así que el primer pensamiento es encontrar setOnClickListener métodos.

De hecho, hay 2 llamadas a este método directamente en el archivo. onCreate.

Haga clic en el objeto new c.c.a.a(this, a1), somos llevados a una clase nombrada a, obviamente el nombre cambió debido al poder de Proguard. Nuestra misión es encontrar cadenas sospechosas o posiblemente significativas en esta clase.

Bueno, no es difícil ver que hay 2 candidatos para este tipo de cadena:

if (d.d.b.a.a(str1, "thisislogin") && d.d.b.a.a(str2, "thisisanunhackablepassword"))

Entrada «Thisislogin» como inicio de sesión, «Esta contraseña es imposible de piratear» como contraseña y haga clic en Acceso botón para extraer la primera bandera.

Bandera 1

Flag1 se borra. Haga clic en Próximo paso para ir a la siguiente.

SecondFlagActivity

Vaya, aparece una ventana emergente molesta y la aplicación se cierra cuando haces clic en cualquiera de las opciones NO/Okay.

Objetivo presunto: Obviamente, el objetivo de esta actividad es destruir esta ventana emergente.

Echemos un vistazo a los códigos de la clase SecondFlagActivity. Como siempre, la primera consideración debe colocarse en elonCreate método.

SecondFlagActivity

Parece que el Yo la declaración aparece en cada actividad; para que podamos ignorarlo.

Después de esto Yo declaración, hay algunos códigos de información relacionados con Local : locale.getLanguage(), “vi”

En esta etapa, las cosas parecen aclararse: si el idioma del dispositivo no es «Usted», esta ventana emergente seguirá apareciendo.

Desde «Usted» es el código de idioma vietnamita, debemos cambiar el idioma del dispositivo a vietnamita y volver a la aplicación nuevamente.

Bandera2

Misión cumplida. Hacer clic El siguiente.

Bandera3

En esta actividad tenemos algo relacionado con las matemáticas. Hay 2 botones Más es Menos.

Presunto objetivo: No es muy obvio, pero la misión puede ser hacer clic en estos botones hasta obtener el cálculo correcto y la respuesta correcta.

Después de analizar el objetivo, podemos examinar los códigos para encontrar información.

Pasando por las sesiones anteriores, sabemos que deberíamos mirar de nuevo onCreate método con algunos setOnClickListner llamadas.

ThirdFlagActivity

Hay 3 de ellos setOnClickListener métodos llamados. Otra clase llamada a gestiona estos oyentes.

Es bastante consistente ahora. Cuando hacemos clic en Más es Menos botones, el recuento de cada botón aumentará y se almacenará en SharePreference.

En la última línea de cada devolución de llamada, vemos una llamada a un método de la clase ThirdFlagActivity.

thirdFlagActivity.s();

Regrese a esta clase para ver cuál es este método s()hace.

Ya conocemos el recuento de cada impresión en curso Más es Menos se almacena en SharePreference con la clave «Azert» es «Qsdf» respectivamente.

Entonces, en s() método anterior, i es j representar el recuento de Más es Menos presiona el botón.

d = i/j

Cuando 2 group.setVisibility(0)

El secreto ha sido revelado, ahora solo elige los números correctos.

Por ejemplo: 7 (más) / 3 (menos) = 2.333333333333 es un cálculo satisfecho.

Bandera3
Bandera4

Casi no hay nada en esta pantalla, solo los textos introductorios.

Al hacer clic aleatoriamente en la pantalla, tampoco sucede nada.

Podríamos decir que no hay información útil en la pantalla. Entonces, vayamos a los códigos.

CuartaBanderaActividad

La misma situación ocurre enFourthFlagActivity clase, nada es realmente útil.

¿Perdimos algo?

De hecho, durante las primeras 3 actividades, no usamos el archivo más importante en un paquete de aplicación de Android: AndroidManifest.xml.

Entonces, eche un vistazo.

AndroidManifest.xml

Curiosamente, todos los demás Activos se ven obligados a estar en orientación vertical mientrasFourthFlagActivity No lo es.

¿Y si giramos el dispositivo?

Voila, saquemos la bandera.

Misión cumplida. El siguiente.

Pero espera, ¿dónde está el mío? El siguiente ¿botón?

Dice que no existe tal botón. Parece que no es posible ir a la última actividad del archivo FourthFlagActivity o incluso desde dentro de la aplicación. Tenemos que buscar otra forma de llegar al destino final.

Entonces, lo primero que debe hacer es observar la estructura de este negocio y cómo está diseñado. Para hacer esto, una vez más, necesitamos la ayuda de AndroidManifest.xml archivo.

AndroidManifest.xml

los FifthFlagActivityescucha una intención implícita con un nombre de acción com.modulo.fifthflagactivity.

Entonces, lo que tenemos que hacer es enviar una intención al sistema operativo Android. Con la ayuda de adb líneas de comando de shell, es bastante simple:

adb shell am start -a “com.modulo.fifthflagactivity”

Deja una respuesta

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