Google CTF 2018 - Shall We Play a Game?

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Pobierz plik APK tutaj:

Zamierzam przesłać plik APK na https://appetize.io/ (konto darmowe), aby zobaczyć, jak zachowuje się apk:

Wygląda na to, że musisz wygrać 1000000 razy, aby zdobyć flagę.

Postępując zgodnie z krokami testowania penetracyjnego Androida, możesz zdekompilować aplikację, aby uzyskać kod smali i przeczytać kod Javy za pomocą jadx.

Czytanie kodu Javy:

Wygląda na to, że funkcja, która wydrukuje flagę, to m().

Zmiany w kodzie Smali

Wywołanie m() po raz pierwszy

Zmodyfikujmy aplikację tak, aby wywoływała m(), jeśli zmienna this.o != 1000000, aby to zrobić, po prostu zmień warunek:

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.

Challenge Overview

The app presents a simple interface with a button that, when clicked, displays a message. By decompiling the APK and analyzing the source code, we can discover how the app processes user input and determine if there are any security flaws that can lead to the flag.

Decompiling the APK

To decompile the APK, we can use tools like JADX or apktool. By examining the decompiled code, we can identify potential areas of interest such as input validation, cryptographic operations, or hidden functionalities that may reveal the flag.

Finding the Flag

Through static analysis and dynamic testing, we can uncover vulnerabilities such as insecure data storage, improper input validation, or unintended behavior triggered by specific user actions. By exploiting these weaknesses, we can extract the flag and complete the challenge.

Conclusion

The "Shall we play a game?" Android app challenge from Google CTF 2018 provides an opportunity to practice mobile application pentesting techniques and hone our skills in identifying and exploiting security issues in Android apps.

if-eq v0, v9, :cond_2

Postępuj zgodnie z krokami pentest Android, aby ponownie skompilować i podpisać plik APK. Następnie załaduj go na https://appetize.io/ i zobaczmy, co się stanie:

Wygląda na to, że flaga jest zapisana bez pełnego odszyfrowania. Prawdopodobnie funkcja m() powinna być wywołana 1000000 razy.

Inny sposób na to jest nie zmieniać instrukcji, ale zmienić instrukcje porównywane:

Innym sposobem jest zamiast porównywać z 1000000, ustawić wartość na 1, aby this.o był porównywany z 1:

Czwarty sposób to dodanie instrukcji przeniesienia wartości v9(1000000) do v0 (this.o):

Rozwiązanie

Spowoduj, aby aplikacja wykonywała pętlę 100 000 razy po wygranej pierwszym razem. Aby to zrobić, wystarczy utworzyć pętlę :goto_6 i sprawić, aby aplikacja przeskoczyła tam, jeśli this.o nie ma wartości 100 000:

Musisz to zrobić na fizycznym urządzeniu, ponieważ (nie wiem dlaczego) nie działa to na urządzeniu wirtualnym.

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated