hacktricks/mobile-pentesting/android-app-pentesting/google-ctf-2018-shall-we-play-a-game.md

5.6 KiB

Google CTF 2018 - Vamos Jogar um Jogo?

Aprenda hacking AWS do zero ao avançado com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks:

Baixe o APK aqui:

Vou fazer upload do APK para https://appetize.io/ (conta gratuita) para ver como o apk está se comportando:

Parece que você precisa ganhar 1000000 vezes para obter a flag.

Seguindo os passos de pentesting Android você pode descompilar o aplicativo para obter o código smali e ler o código Java usando jadx.

Lendo o código java:

Parece que a função que vai imprimir a flag é m().

Alterações no Smali

Chamando m() pela primeira vez

Vamos fazer o aplicativo chamar m() se a variável this.o != 1000000 para fazer isso, basta mudar a condição:

if-ne v0, v9, :cond_2

Google CTF 2018: Shall we play a game?


Introduction

In this challenge, we are provided with an Android application named "Shall we play a game?". The goal is to find the flag by analyzing the app's behavior and identifying any vulnerabilities that can be exploited.

Reconnaissance

APK Analysis

Upon decompiling the APK file, we can analyze the source code to understand how the app functions and identify potential security flaws.

Static Analysis

By reviewing the code and resources, we can look for hard-coded secrets, insecure data storage, or any other weaknesses that could lead to a security compromise.

Dynamic Analysis

Running the app in a controlled environment allows us to observe its runtime behavior, network communication, and interactions with the device to uncover any exploitable vulnerabilities.

Exploitation

Once we have identified a potential vulnerability, we can proceed with exploiting it to gain unauthorized access, escalate privileges, or manipulate the app's behavior to reveal the flag.

Conclusion

By combining thorough reconnaissance, careful analysis, and precise exploitation techniques, we can successfully uncover the flag in the "Shall we play a game?" Android app.

if-eq v0, v9, :cond_2

Antes

Depois

Siga os passos do pentest Android para recompilar e assinar o APK. Em seguida, faça o upload para https://appetize.io/ e veja o que acontece:

Parece que a flag está escrita sem estar completamente descriptografada. Provavelmente a função m() deve ser chamada 1000000 vezes.

Outra maneira de fazer isso é não alterar a instrução, mas mudar as instruções comparadas:

Uma outra maneira é, em vez de comparar com 1000000, definir o valor como 1 para que this.o seja comparado com 1:

Uma quarta maneira é adicionar uma instrução para mover o valor de v9 (1000000) para v0 (this.o):

Solução

Faça o aplicativo executar o loop 100000 vezes quando você vencer pela primeira vez. Para fazer isso, você só precisa criar o loop :goto_6 e fazer o aplicativo pular para lá se this.o não tiver o valor 100000:

Você precisa fazer isso em um dispositivo físico, pois (não sei por que) isso não funciona em um dispositivo emulado.

Aprenda hacking AWS do zero ao avançado com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks: