描述

What if JD-GUI doesn’t show you the password?

目标

找到Flag

APK下载

https://yhxx.lanzoub.com/ikyBX0mj4kab

题解

首先打开APP看一下,可以看到是输入密码点击SUBMIT来获取Flag

CrackMe

用Jadx-GUI打开APK看一下源码,在 MainActivity中找到了 SUBMIT按钮绑定的 onClick函数。 在①中通过 FlagGuard().getFlag()函数来根据获取文本框中输入的 passwordApplicationContext得到 flag。 ②中 Flag不为空则展示 Congratulations!Flag

CrackMe

进入 FlagGuard().getFlag(),发现只要传入的 str(即输入的 password)与 Data().getData(context)相等就会返回②所计算出的flag,现在只需要看 Data().getData()就可以拿到密码。

CrackMe

进入 Data().getData(),发现函数需要获取到 ApplicationContext中的字符串来当做 password

CrackMe

追踪进去后我们发现R.string.secret的值是一个地址,这显然不是明文密码,那么我该何看到密码呢?

CrackMe

Android的字符串资源都存储在 /res/values/strings.xml中 可以使用apktool工具解压apk文件查看:

apktool d base.apk
cd base
cat res/values/strings.xml

或者直接在Jadx-GUI的路径 /资源文件/resources.arsc/res/values/strings.xml中查看。 打开xml文件后可以看到名为secret的字符串值:s0m3_0th3r_s3cr3t_passw0rd即为密码。

CrackMe

在文本框输入 s0m3_0th3r_s3cr3t_passw0rd即可拿到 flag

CrackMe