Google CTF 2018 - Shall We Play a Game?
Last updated
Last updated
Téléchargez l'APK ici :
Je vais télécharger l'APK sur https://appetize.io/ (compte gratuit) pour voir comment l'APK se comporte :
Il semble que vous devez gagner 1000000 fois pour obtenir le drapeau.
En suivant les étapes du pentesting Android, vous pouvez décompiler l'application pour obtenir le code smali et lire le code Java à l'aide de jadx.
Lecture du code Java :
Il semble que la fonction qui va imprimer le drapeau est m().
Faisons en sorte que l'application appelle m() si la variable this.o != 1000000 pour ce faire, il suffit de changer la condition :
Download the APK file:
The first step is to download the APK file provided in the challenge.
Decompile the APK:
Use tools like JADX or APKTool to decompile the APK file.
Check the AndroidManifest.xml:
Look for permissions, activities, services, and receivers defined in the AndroidManifest.xml file.
Check for interesting files:
Look for sensitive information in files like strings.xml, assets, or any custom configuration files.
Analyze the code:
Look for hardcoded secrets, API endpoints, encryption methods, and any other vulnerabilities in the decompiled code.
Identify the vulnerability:
Analyze the code and look for potential vulnerabilities like insecure data storage, input validation issues, or insecure communication.
Exploit the vulnerability:
Develop a plan to exploit the identified vulnerability, which could involve manipulating data, bypassing authentication, or any other attack vector.
Test the exploit:
Verify the exploit by testing it on a device or an emulator to ensure it works as expected.
Extract the flag:
Once the exploit is successful, extract the flag or achieve the goal specified in the challenge.
By following these steps, you can successfully analyze and exploit Android applications during penetration testing engagements.
Suivez les étapes du pentest Android pour recompiler et signer l'APK. Ensuite, téléchargez-le sur https://appetize.io/ et voyons ce qui se passe :
Il semble que le drapeau soit écrit sans être complètement déchiffré. Probablement la fonction m() devrait être appelée 1000000 fois.
Une autre façon de faire cela est de ne pas changer l'instruction mais de changer les instructions comparées :
Une autre façon est au lieu de comparer avec 1000000, définir la valeur à 1 pour que this.o soit comparé à 1 :
Une quatrième façon est d'ajouter une instruction pour déplacer la valeur de v9 (1000000) vers v0 (this.o) :
Faites en sorte que l'application exécute la boucle 100 000 fois lorsque vous gagnez la première fois. Pour ce faire, vous devez simplement créer la boucle :goto_6 et faire en sorte que l'application saute là-bas si this.o
n'a pas la valeur 100 000 :
Vous devez faire cela sur un appareil physique car (je ne sais pas pourquoi) cela ne fonctionne pas sur un appareil émulé.