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

117 lines
5.6 KiB
Markdown

# Google CTF 2018 - Vamos Jogar um Jogo?
<details>
<summary><strong>Aprenda hacking AWS do zero ao avançado com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Outras formas de apoiar o HackTricks:
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) do github.
</details>
Baixe o APK aqui:
Vou fazer upload do APK para [https://appetize.io/](https://appetize.io) (conta gratuita) para ver como o apk está se comportando:
![](<../../.gitbook/assets/image (46).png>)
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:
![](<../../.gitbook/assets/image (47).png>)
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](<../../.gitbook/assets/image (48).png>)
![Depois](<../../.gitbook/assets/image (49).png>)
Siga os passos do [pentest Android](./) para recompilar e assinar o APK. Em seguida, faça o upload para [https://appetize.io/](https://appetize.io) e veja o que acontece:
![](<../../.gitbook/assets/image (50).png>)
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:
![](<../../.gitbook/assets/image (55).png>)
**Uma outra maneira** é, em vez de comparar com 1000000, definir o valor como 1 para que this.o seja comparado com 1:
![](<../../.gitbook/assets/image (57).png>)
Uma quarta maneira é adicionar uma instrução para mover o valor de v9 (1000000) para v0 _(this.o)_:
![](<../../.gitbook/assets/image (58).png>)
![](<../../.gitbook/assets/image (52).png>)
## 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\:
![](<../../.gitbook/assets/image (59).png>)
Você precisa fazer isso em um dispositivo físico, pois (não sei por que) isso não funciona em um dispositivo emulado.
<details>
<summary><strong>Aprenda hacking AWS do zero ao avançado com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Outras maneiras de apoiar o HackTricks:
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou nos siga no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>