Android入门破解题目

几个简单的APK破解。

EX05_01_.apk

通过查看java源码我们可以发现,要想让程序弹出“right++”,无论输入什么,都无法满足if判断条件(即与输入无关)。于是我们修改smali代码中的跳转条件,然后在AndroidKiller中重打包应用程序,生成的新apk就是破解成功的apk。我们在模拟器上安装运行,就会发现此时无论输入什么,应用程序都会弹出“right++”的提示信息,破解成功。

这里不止这一种修改方式,我们还可以直接将“gogo”字符串变量修改为“11”,以满足if判断条件。

Crackme02.apk

在jeb中分析java源码“MainActivity”,定位到关键函数“checkSN”,通过分析该函数得到程序对于用户输入的用户名和16位注册码的处理流程如下:生成用户输入的用户名的32位MD5值,然后依次取MD5值的第i、i+2…(i从0开始取值,小于32)位处的字符,拼接成正确的注册码。

根据分析,我们写出对应的java程序,实现输入用户名,输出对应正确的注册码的功能。

随便输入一个用户名,输入上图中程序生成的注册码,点击“注册”,程序就会成功注册如下图,破解成功。

CrackMe-F1F2.apk

在jeb中分析java源码“LisenceCheck”,定位到关键函数如下图,分析该函数可得到以下信息——

  • 输入的用户名是由大写字母组成的。
  • 正确的序列号应该是由0-9这几个数字组成的一个字符串。
  • 程序的关键操作是一些异或计算。

根据分析,我们写出对应的java程序,实现输入用户名,输出对应正确的序列号的功能。

输入一个用户名及上图中程序生成的序列号,点击“验证”,程序就会弹出“Lisence Correct!”的提示信息,破解成功。

参考资料

TextView 自定义超链接
Java利用MessageDigest获取字符串或文件MD5详解
Java中获取键盘输入值的三种方法
java – 是否最好在循环中重用StringBuilder?
Android破解入门的CrackMe