Google CTF 2018 - Shall We Play a Game?

Reading time: 2 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте 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 cannot 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:

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

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks