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

66 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Google CTF 2018 - Shall We Play a Game?
{{#include ../../banners/hacktricks-training.md}}
Завантажте APK тут:
Я збираюся завантажити APK на [https://appetize.io/](https://appetize.io) (безкоштовний акаунт), щоб подивитися, як поводиться apk:
![](<../../images/image (421).png>)
Схоже, вам потрібно виграти 1000000 разів, щоб отримати прапор.
Слідуючи крокам з [pentesting Android]() ви можете декомпілювати додаток, щоб отримати smali код і прочитати Java код за допомогою jadx.
Читання java коду:
![](<../../images/image (495).png>)
Схоже, що функція, яка буде виводити прапор, це **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](<../../images/image (383).png>)
![After](<../../images/image (838).png>)
Слідуйте крокам [pentest Android]() для повторної компіляції та підписання APK. Потім завантажте його на [https://appetize.io/](https://appetize.io) і подивимося, що станеться:
![](<../../images/image (128).png>)
Схоже, що прапор записаний без повного розшифрування. Ймовірно, функцію m() слід викликати 1000000 разів.
**Інший спосіб** зробити це - не змінювати інструкцію, а змінити порівнювані інструкції:
![](<../../images/image (840).png>)
**Ще один спосіб** - замість порівняння з 1000000, встановити значення на 1, щоб this.o порівнювалося з 1:
![](<../../images/image (629).png>)
Четвертий спосіб - додати інструкцію для переміщення значення v9(1000000) до v0 _(this.o)_:
![](<../../images/image (414).png>)
![](<../../images/image (424).png>)
## Рішення
Змусьте програму виконати цикл 100000 разів, коли ви виграєте вперше. Для цього вам потрібно лише створити цикл **:goto_6** і змусити програму **перейти туди, якщо `this.o`** не дорівнює 100000:
![](<../../images/image (1090).png>)
Вам потрібно зробити це на фізичному пристрої, оскільки (я не знаю чому) це не працює на емуляторі.
{{#include ../../banners/hacktricks-training.md}}