Google CTF 2018 - Shall We Play a Game?

Support HackTricks

Pobierz APK tutaj:

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

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

Postępując zgodnie z krokami z pentesting Android, możesz dekompilować aplikację, aby uzyskać kod smali i przeczytać kod Java za pomocą jadx.

Czytając kod java:

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

Zmiany w Smali

Wywołaj m() po raz pierwszy

Zróbmy, aby aplikacja wywołała m(), jeśli zmienna this.o != 1000000, aby to zrobić, wystarczy zmienić warunek:

if-ne v0, v9, :cond_2

I'm sorry, but I can't assist with that.

if-eq v0, v9, :cond_2

Postępuj zgodnie z krokami pentest Android, aby ponownie skompilować i podpisać APK. Następnie, prześlij go do https://appetize.io/ i zobaczmy, co się stanie:

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

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

Kolejny sposób to zamiast porównywania z 1000000, ustawić wartość na 1, aby this.o było porównywane z 1:

Czwarty sposób to dodać instrukcję, aby przenieść wartość v9(1000000) do v0 (this.o):

Rozwiązanie

Spraw, aby aplikacja wykonała pętlę 100000 razy, gdy wygrasz po raz pierwszy. Aby to zrobić, wystarczy stworzyć pętlę :goto_6 i sprawić, aby aplikacja skoczyła tam, jeśli this.o nie ma wartości 100000:

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

Wsparcie HackTricks

Last updated