描述

此为2013年ISCC的一道移动题,相对简单的题,要求是注册为企业版程序。

目标

注册为企业版程序

APK下载

https://yhxx.lanzoub.com/i5cyV0mrazaf

题解

首先打开APP看一下,可以看到是需要输入注册码来进行注册。

CrackMe CrackMe

用Jadx-GUI打开APK看一下源码,在打开APP后先执行①,通过MyApp.m来判断APP的注册状态。 在②中判断注册状态,如果未注册则执行③的doRegister(),如果已经注册则执行MyApp.work()

CrackMe

先看一下MyApp.m参数是怎么来的,发现MyApp.m是静态属性,所在的类加载了名为hack的so,并在onCreate()中调用了native方法initSN()。 且在别处没有找到其他修改MyApp.m的地方,那么大概率就在so中进行操作的,并且MyApp.work()函数也是native函数。

CrackMe

我们再看输入注册码后的doRegister(),他将输入的注册码sn作为参数传入到了MyApp.saveSN()中,且MyApp.saveSN()也是native函数,所以我们只需要看hack的so即可。

CrackMe

打开IDA工具找对应的native方法。 找到work()方法对应的native方法n3后发现想要注册为企业版,则使用到了n1方法

CrackMe

我们再去看n1n1对应的是initSN()方法,它在打开APP时读取/sdcard/reg.dat,将其中的内容与4种md5字符串做对比,来设置MyApp.m的值。 而我们要注册为企业版,所以需要MyApp.m为3,即内容需要和b2db1185c9e5b88d9b70d7b3278a4947相等。

CrackMe

再看saveSN()对应的n2方法,它将输入的字符串做md5加密然后存储到/sdcard/reg.dat中,所以结合n2现在有两种解法:

  1. 直接将b2db1185c9e5b88d9b70d7b3278a4947输入到/sdcard/reg.dat中即可
  2. 找到b2db1185c9e5b88d9b70d7b3278a4947对应的明文即为注册码
CrackMe

到md5撞库解密的网站输入b2db1185c9e5b88d9b70d7b3278a4947,得到明文为32345678

CrackMe

输入注册码保存成功,再打开APP则已经注册为企业版了

CrackMe