描述
What if JD-GUI doesn’t show you the password?
目标
找到Flag
APK下载
https://yhxx.lanzoub.com/ikyBX0mj4kab
题解
首先打开APP看一下,可以看到是输入密码点击SUBMIT来获取Flag
用Jadx-GUI打开APK看一下源码,在 MainActivity中找到了 SUBMIT按钮绑定的 onClick函数。
在①中通过 FlagGuard().getFlag()函数来根据获取文本框中输入的 password和 ApplicationContext得到 flag。
②中 Flag不为空则展示 Congratulations!和 Flag。
进入 FlagGuard().getFlag(),发现只要传入的 str(即输入的 password)与 Data().getData(context)相等就会返回②所计算出的flag,现在只需要看 Data().getData()就可以拿到密码。
进入 Data().getData(),发现函数需要获取到 ApplicationContext中的字符串来当做 password。
追踪进去后我们发现R.string.secret的值是一个地址,这显然不是明文密码,那么我该何看到密码呢?
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即为密码。
在文本框输入 s0m3_0th3r_s3cr3t_passw0rd即可拿到 flag。