Android 逆向工程 —— Crackme 系列 crackme-one

学习了一段时间的逆向之后,就想找些 APP 练手,于是找到了下面这个 github
android-crackme-challenge

这个 github 里提供了 10 个 crackme,难度逐渐上升

先来看 crackme-one

crackme-one 第一次打开时是这样的:

Android 逆向工程 —— Crackme 系列 crackme-one_第1张图片

这里的重点是,点击 “Write File” 程序将会在沙盒中写入我们要用到的密钥,这就说明至少有两种方法可以得知这个密钥:

  1. 找到这个被写入的文件
  2. 逆向 APK,找到写入函数,直接查看或者通过 log 的方式得知写入的内容

我用的是第二种方法(主要是不知道写入的文件在哪),首先随意输入一个密钥点击 “Check”,弹出一个 Toast “Sorry, that's not right..”,记下这个字符串,待会会用到

使用 apktool 逆向 APK,得到的 smali 文件夹的文件目录如下:

Android 逆向工程 —— Crackme 系列 crackme-one_第2张图片

由于判断输入的密钥是否正确的提示是在点击 “check” 之后才触发的,所以判断的逻辑应该在点击事件的监听器中,该监听器为 ChallengeOneFragmentOnClickListener,搜索刚刚那个字符串 “Sorry, that's not right..”,看看是哪里创建了这个 Toast 然后输出了这个提示,注意在源码中 ' 应该前面有一个 \,所以应该搜索 “Sorry, that's not right..”

搜索结果刚好在 ChallengeOneFragmentOnClickListener.smali 中,说明刚刚我们的假设是没错的

Android 逆向工程 —— Crackme 系列 crackme-one_第3张图片

仔细查看这附近的代码,发现这句代码在 cond_1 (137行)标号下,说明是通过某个跳转跳转到这里来的,搜索 “cond_1”

Android 逆向工程 —— Crackme 系列 crackme-one_第4张图片

发生跳转的代码在 86 行,跳转的条件是 v8 等于 0,往上分析发现 v8 是 之前的 v8 (v8被重新赋值了)以 v9 为参数调用 equals 函数的结果, 而之前的 v8 的类型是 String,于是判断的逻辑应该为如果 v8 和 v9 相等就不跳转,反之跳转

接着向上看发现 v9 的值是 “poorly-protected-secret”,这个 “poorly-protected-secret” 很有可能是密钥,再往上看发现之前的 v8 就是从我们输入密钥的那个 EditText 中获取的内容全部转换为小写后的值,所以这应该就是密钥了

在 APP 中输入 “poorly-protected-secret”,成功

你可能感兴趣的:(Android 逆向工程 —— Crackme 系列 crackme-one)