Google CTF 2018 - Shall We Play a Game?

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Завантажте APK тут:

Я збираюся завантажити APK на https://appetize.io/ (безкоштовний акаунт), щоб подивитися, як поводиться apk:

Схоже, вам потрібно виграти 1000000 разів, щоб отримати прапор.

Слідуючи крокам з pentesting Android, ви можете декомпілювати додаток, щоб отримати smali код і прочитати Java код, використовуючи jadx.

Читання java коду:

Схоже, що функція, яка буде виводити прапор, - це m().

Зміни Smali

Виклик m() вперше

Давайте зробимо так, щоб додаток викликав m(), якщо змінна this.o != 1000000. Для цього просто змініть умову:

if-ne v0, v9, :cond_2

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

if-eq v0, v9, :cond_2
Before
After

Слідуйте крокам pentest Android, щоб повторно скомпілювати та підписати APK. Потім завантажте його на https://appetize.io/ і подивимося, що станеться:

Схоже, що прапор написаний без повного розшифрування. Ймовірно, функцію m() слід викликати 1000000 разів.

Інший спосіб зробити це - не змінювати інструкцію, а змінити порівнювані інструкції:

Ще один спосіб - замість порівняння з 1000000, встановити значення на 1, щоб this.o порівнювалося з 1:

Четвертий спосіб - додати інструкцію для переміщення значення v9(1000000) до v0 (this.o):

Рішення

Змусьте програму виконати цикл 100000 разів, коли ви виграєте вперше. Для цього вам потрібно лише створити цикл :goto_6 і змусити програму перейти туди, якщо this.o не дорівнює 100000:

Вам потрібно зробити це на фізичному пристрої, оскільки (я не знаю чому) це не працює на емуляторі.

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Last updated