# Google CTF 2018 - Shall We Play a Game?
Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)! Ander maniere om HackTricks te ondersteun: * As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)! * Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com) * Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling van eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family) * **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
Laai die APK hier af: Ek gaan die APK oplaai na [https://appetize.io/](https://appetize.io) (gratis rekening) om te sien hoe die apk optree: ![](<../../.gitbook/assets/image (421).png>) Dit lyk asof jy 1000000 keer moet wen om die vlag te kry. Volg die stappe van [pentesting Android](./) om die aansoek te dekompilieer om die smali-kode te kry en lees die Java-kode met jadx. Lees die java-kode: ![](<../../.gitbook/assets/image (495).png>) Dit lyk asof die funksie wat die vlag gaan druk **m().** is ## **Smali-veranderinge** ### **Roep m() die eerste keer aan** Laat ons die aansoek m() laat aanroep as die veranderlike _this.o != 1000000_ is om dit te doen, verander net die voorwaarde: ``` if-ne v0, v9, :cond_2 ``` ### Google CTF 2018: Shall we play a game? #### Android Application Pentesting ##### Shall we play a game? Die eerste stap is om die app te installeer en te hardloop. Die app het 'n eenvoudige UI met 'n knoppie wat 'n boodskap wys. Die app gebruik 'n plaaslike SQLite databasis om die boodskappe te stoor. Die boodskappe word in 'n tabel gestoor met die kolomme `id` en `message`. Die app gebruik 'n `ContentProvider` om toegang tot die databasis te verkry. Die `ContentProvider` is geïmplementeer in die `MessageProvider`-klas. Die app gebruik 'n `CursorLoader` om die data van die databasis te laai en te wys in 'n `ListView`. Die `ListView` gebruik 'n `CursorAdapter` om die data te bind. Die app gebruik ook 'n `BroadcastReceiver` om boodskappe te ontvang en te wys. Die `BroadcastReceiver` is geregistreer in die `AndroidManifest.xml`-lêer. Die app gebruik 'n `Service` om agtergrondtake uit te voer. Die `Service` is geïmplementeer in die `MessageService`-klas. Die app gebruik 'n `PendingIntent` om 'n `Service` te begin. Die `PendingIntent` word geskep in die `MainActivity`-klas. Die app gebruik 'n `Notification` om gebruikers te waarsku wanneer 'n nuwe boodskap ontvang word. Die `Notification` is geskep in die `MessageReceiver`-klas. Die app gebruik 'n `SQLiteOpenHelper` om die databasis te skep en op te gradeer. Die `SQLiteOpenHelper` is geïmplementeer in die `DatabaseHelper`-klas. Die app gebruik 'n `SQLiteDatabase` om die databasisoperasies uit te voer. Die `SQLiteDatabase` word verkry vanaf die `SQLiteOpenHelper`. Die app gebruik 'n `SharedPreferences` om instellings te stoor. Die instellings word gestoor as sleutel/waarde-pare. Die app gebruik 'n `WebView` om 'n webbladsy te wys. Die `WebView` is in die `MainActivity`-klas geïmplementeer. Die app gebruik 'n `WebViewClient` om die laai van webbladsye te hanteer. Die `WebViewClient` is in die `MainActivity`-klas geïmplementeer. Die app gebruik 'n `JavaScriptInterface` om kommunikasie tussen Java en JavaScript moontlik te maak. Die `JavaScriptInterface` is in die `MainActivity`-klas geïmplementeer. Die app gebruik 'n `URLSpan` om kliekbaar skakels in te voeg. Die `URLSpan` is in die `MainActivity`-klas geïmplementeer. Die app gebruik 'n `Intent` om van die een aktiwiteit na die ander te navigeer. Die `Intent` word geskep in die `MainActivity`-klas. Die app gebruik 'n `AlertDialog` om gebruikers te waarsku of inligting te wys. Die `AlertDialog` is in die `MainActivity`-klas geïmplementeer. Die app gebruik 'n `Handler` om take op die hoofdraad uit te voer. Die `Handler` is in die `MainActivity`-klas geïmplementeer. Die app gebruik 'n `AsyncTask` om agtergrondtake uit te voer. Die `AsyncTask` is in die `MainActivity`-klas geïmplementeer. Die app gebruik 'n `Loader` om data asinkronies te laai. Die `Loader` is in die `MainActivity`-klas geïmplementeer. Die app gebruik 'n `ContentObserver` om veranderinge in die databasis te monitor. Die `ContentObserver` is in die `MainActivity`-klas geïmplementeer. Die app gebruik 'n `FileProvider` om toegang tot lêers te deel. Die `FileProvider` is gedefinieer in die `AndroidManifest.xml`-lêer. Die app gebruik 'n `BroadcastReceiver` om boodskappe te ontvang en te hanteer. Die `BroadcastReceiver` is geregistreer in die `MainActivity`-klas. Die app gebruik 'n `Service` om agtergrondtake uit te voer. Die `Service` is in die `MainActivity`-klas geïmplementeer. Die app gebruik 'n `Notification` om gebruikers te waarsku wanneer 'n nuwe boodskap ontvang word. Die `Notification` is in die `MainActivity`-klas geïmplementeer. Die app gebruik 'n `SQLiteOpenHelper` om die databasis te skep en op te gradeer. Die `SQLiteOpenHelper` is in die `MainActivity`-klas geïmplementeer. Die app gebruik 'n `SQLiteDatabase` om die databasisoperasies uit te voer. Die `SQLiteDatabase` is in die `MainActivity`-klas geïmplementeer. Die app gebruik 'n `SharedPreferences` om instellings te stoor. Die `SharedPreferences` is in die `MainActivity`-klas geïmplementeer. Die app gebruik 'n `WebView` om 'n webbladsy te wys. Die `WebView` is in die `MainActivity`-klas geïmplementeer. Die app gebruik 'n `WebViewClient` om die laai van webbladsye te hanteer. Die `WebViewClient` is in die `MainActivity`-klas geïmplementeer. Die app gebruik 'n `JavaScriptInterface` om kommunikasie tussen Java en JavaScript moontlik te maak. Die `JavaScriptInterface` is in die `MainActivity`-klas geïmplementeer. Die app gebruik 'n `URLSpan` om kliekbaar skakels in te voeg. Die `URLSpan` is in die `MainActivity`-klas geïmplementeer. Die app gebruik 'n `Intent` om van die een aktiwiteit na die ander te navigeer. Die `Intent` is in die `MainActivity`-klas geïmplementeer. Die app gebruik 'n `AlertDialog` om gebruikers te waarsku of inligting te wys. Die `AlertDialog` is in die `MainActivity`-klas geïmplementeer. Die app gebruik 'n `Handler` om take op die hoofdraad uit te voer. Die `Handler` is in die `MainActivity`-klas geïmplementeer. Die app gebruik 'n `AsyncTask` om agtergrondtake uit te voer. Die `AsyncTask` is in die `MainActivity`-klas geïmplementeer. Die app gebruik 'n `Loader` om data asinkronies te laai. Die `Loader` is in die `MainActivity`-klas geïmplementeer. Die app gebruik 'n `ContentObserver` om veranderinge in die databasis te monitor. Die `ContentObserver` is in die `MainActivity`-klas geïmplementeer. Die app gebruik 'n `FileProvider` om toegang tot lêers te deel. Die `FileProvider` is gedefinieer in die `AndroidManifest.xml`-lêer. ``` if-eq v0, v9, :cond_2 ``` ![Voor](<../../.gitbook/assets/image (383).png>) ![Na](<../../.gitbook/assets/image (838).png>) Volg die stappe van [pentest Android](./) om die APK te herkompilieer en te onderteken. Laai dit dan op na [https://appetize.io/](https://appetize.io) en kyk wat gebeur: ![](<../../.gitbook/assets/image (128).png>) Dit lyk asof die vlag geskryf is sonder om heeltemal ontsluit te word. Waarskynlik moet die m() funksie 1000000 keer geroep word. **'n Ander manier** om dit te doen is om nie die instruksie te verander nie, maar om die vergelykende instruksies te verander: ![](<../../.gitbook/assets/image (840).png>) **'n Ander manier** is om in plaas daarvan om met 1000000 te vergelyk, die waarde na 1 te stel sodat this.o met 1 vergelyk word: ![](<../../.gitbook/assets/image (629).png>) 'n Vierde manier is om 'n instruksie by te voeg om die waarde van v9(1000000) na v0 _(this.o)_ te skuif: ![](<../../.gitbook/assets/image (414).png>) ![](<../../.gitbook/assets/image (424).png>) ## Oplossing Maak die aansoek hardloop die lus 100000 keer as jy die eerste keer wen. Om dit te doen, hoef jy net die **:goto\_6** lus te skep en die aansoek **daarheen te laat spring as `this.o`** nie die waarde 100000 het nie: ![](<../../.gitbook/assets/image (1090).png>) Jy moet dit binne 'n fisiese toestel doen aangesien (ek weet nie waarom nie) dit nie werk in 'n geëmuleerde toestel nie.
Leer AWS hak vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)! Ander maniere om HackTricks te ondersteun: * As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)! * Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com) * Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family) * **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.