描述

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

目标

找到 Flag

APK下载

点击下载

题解

首先打开 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