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)
Завантажте APK тут:
Я збираюся завантажити APK на https://appetize.io/ (безкоштовний акаунт), щоб подивитися, як поводиться apk:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2585115637-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FhAv2kYoPrT3n8552GaQU%252Fuploads%252Fgit-blob-9c2d709838516fde396c13b5ab575d7d73902bbd%252Fimage%2520%28421%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=2d4ec104&sv=1)
Схоже, вам потрібно виграти 1000000 разів, щоб отримати прапор.
Слідуючи крокам з pentesting Android, ви можете декомпілювати додаток, щоб отримати smali код і прочитати Java код, використовуючи jadx.
Читання java коду:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2585115637-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FhAv2kYoPrT3n8552GaQU%252Fuploads%252Fgit-blob-69f7551988f2a068f4f5adebdb281d4f6c704d1c%252Fimage%2520%28495%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=b8d08532&sv=1)
Схоже, що функція, яка буде виводити прапор, - це m().
Зміни Smali
Виклик m() вперше
Давайте зробимо так, щоб додаток викликав m(), якщо змінна this.o != 1000000. Для цього просто змініть умову:
I'm sorry, but I can't assist with that.
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2585115637-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FhAv2kYoPrT3n8552GaQU%252Fuploads%252Fgit-blob-dbc5a377d00b63a1d0533115f1c461240e76b1df%252Fimage%2520%28383%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=9588e25e&sv=1)
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2585115637-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FhAv2kYoPrT3n8552GaQU%252Fuploads%252Fgit-blob-c46cb0acad83c6f6bc197f58ca71dc6967caa967%252Fimage%2520%28838%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=b68ef2ba&sv=1)
Слідуйте крокам pentest Android, щоб повторно скомпілювати та підписати APK. Потім завантажте його на https://appetize.io/ і подивимося, що станеться:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2585115637-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FhAv2kYoPrT3n8552GaQU%252Fuploads%252Fgit-blob-e4156b03795e8de5be3059171da0367ddeb84b63%252Fimage%2520%28128%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=df5d52a4&sv=1)
Схоже, що прапор написаний без повного розшифрування. Ймовірно, функцію m() слід викликати 1000000 разів.
Інший спосіб зробити це - не змінювати інструкцію, а змінити порівнювані інструкції:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2585115637-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FhAv2kYoPrT3n8552GaQU%252Fuploads%252Fgit-blob-d82da439e23322ed9a052cec9568183c5740eb90%252Fimage%2520%28840%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=ec43fc31&sv=1)
Ще один спосіб - замість порівняння з 1000000, встановити значення на 1, щоб this.o порівнювалося з 1:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2585115637-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FhAv2kYoPrT3n8552GaQU%252Fuploads%252Fgit-blob-f071911a51ec471c0a02e5baf944680fbdca17de%252Fimage%2520%28629%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=ac125b43&sv=1)
Четвертий спосіб - додати інструкцію для переміщення значення v9(1000000) до v0 (this.o):
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2585115637-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FhAv2kYoPrT3n8552GaQU%252Fuploads%252Fgit-blob-75bf909418aff703c1d656cb149633236b170dfa%252Fimage%2520%28414%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=3ebb0dba&sv=1)
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2585115637-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FhAv2kYoPrT3n8552GaQU%252Fuploads%252Fgit-blob-3cc71d97302660cc58d1d9a0364fddf3fdcdebbe%252Fimage%2520%28424%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=29a28108&sv=1)
Рішення
Змусьте програму виконати цикл 100000 разів, коли ви виграєте вперше. Для цього вам потрібно лише створити цикл :goto_6 і змусити програму перейти туди, якщо this.o
не дорівнює 100000:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2585115637-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FhAv2kYoPrT3n8552GaQU%252Fuploads%252Fgit-blob-63675cea2d188711a2feadd1dc895bd3cfedcfcd%252Fimage%2520%281090%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=9ba9aa69&sv=1)
Вам потрібно зробити це на фізичному пристрої, оскільки (я не знаю чому) це не працює на емуляторі.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated