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

3.5 KiB
Raw Blame History

Google CTF 2018 - 要玩个游戏吗?

从零开始学习AWS黑客技术成为专家 htARTEHackTricks AWS红队专家

支持HackTricks的其他方式

在此下载APK

我将上传APK到https://appetize.io/免费账户以查看APK的行为

看起来您需要赢得1000000次才能获得flag。

按照Android应用渗透测试中的步骤您可以反编译应用程序以获取smali代码并使用jadx阅读Java代码。

阅读Java代码

看起来打印flag的函数是 m().

Smali更改

第一次调用m()

让应用程序在变量 this.o != 1000000 时调用m(),为此,只需更改条件:

if-ne v0, v9, :cond_2

Google CTF 2018: Shall we play a game?


Task 1: Install the APK

Download the APK from the challenge page and install it on your Android device.

Task 2: Analyze the APK

Step 1: Decompile the APK

Use JADX or apktool to decompile the APK.

Step 2: Analyze the source code

Look for interesting parts in the source code, such as API endpoints, sensitive information handling, etc.

Task 3: Find the flag

Search for the flag within the APK or by analyzing the app's behavior.

Task 4: Submit the flag

Submit the flag to the CTF platform to earn points.


Happy hacking! 🚀

if-eq v0, v9, :cond_2

之前

之后

按照Android渗透测试的步骤重新编译并签署APK。然后将其上传到https://appetize.io/,看看会发生什么:

看起来旗标未完全解密就被写入。可能应该调用m()函数1000000次。

另一种方法是不更改指令,而是更改比较指令:

另一种方法是将值设置为1这样this.o将与1进行比较

第四种方法是添加一条指令将v9(1000000)的值移动到v0 (this.o)

解决方案

当您第一次获胜时使应用程序运行循环100000次。为此您只需要创建**goto_6循环,并使应用程序跳转到那里,如果this.o**的值不是100000\

您需要在物理设备内执行此操作,因为(我不知道为什么)在模拟设备中无法正常工作。