描述
What if JD-GUI doesn’t show you the password?
目标
找到 Flag
APK下载
题解
首先打开 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。