上次简单分析了一个Android锁机软件,逛了下论坛,没想到居然还有兄弟版本,原贴地址https://www.52pojie.cn/thread-838025-1-1.html
代码风格和解密方法都如出一格,先看下锁机封面,熟悉的感觉。。。
一、找到锁机应用
这次原文件往/system/priv-app/目录下释放了一个包名为com.hl.app的Android.apk,而且伪装了成了SIM卡应用什么的。
二、准备工作
1、反编译
还是熟悉的味道。
2、重命名关键方法
虽然这些文字看不懂,但是基本所有的string都是用下面方法解析的,可以用这里作为突破口来进行静态分析。
三、开始分析
经过一系列的整理,把难以识别的关键方法和类重新名了下,发现该锁机样本只有两层。这里我分别重命名为了MyListener1和MyListener2
1、首先看第一层
方法很长,就不全贴了。上一篇分析的样本只是用了MD5/SHA1,而这次加入了AES、DES加密算法
最关键的判断逻辑处并不难,只要输入的密码等于随机中奖号+v0、v1、v2就可以了。v0、v1、v2都是通过AES、DES算出来的固定值,所以先来看中奖号。
if(password.equals(String.valueOf(MyApp.get_randomNum1(this.myapp) + Integer.valueOf(v0).intValue() + Integer.valueOf(v2).intValue() << Integer.valueOf(v1).intValue()))) {
MyApp.get_window(this.myapp).removeView();
MyApp.go_lv2(this.myapp);
}
但是我们从锁机的页面看到给出的中奖号码是ā①÷∷©®★※这样的。所以还得先得搞中奖号码。
通过分析得知,作者用了字符转换和倒序,规则如下:
0 -> ā
1 -> ①
2 -> ÷
3 -> ∷
4 -> ●
5 -> ©
6 -> ®
7 -> ★
8 -> ※
9 -> /
例如原贴中的第一层中奖号码是
∷©÷※●∷
则与之对应的数字为352843,字符串翻转后就是348253,这个数就是真正的中奖号码。
v0、v1、v2的值分析起来太麻烦了,而且是固定值,只要算出来即可。这里我们直接套用原作者的代码,最终算得:
String v0 = "6";
String v1 = "999";
String v2 = "15";
因此,第一层的解密密码就是:
String.valueOf(中奖号码 + Integer.valueOf(v0) + Integer.valueOf(v2) << Integer.valueOf(v1))
2、第二层
套路和之前的非常相似:
md5(sha(密码前3位)) + 密码后面所有的位数 = md5 + sha(md5(中奖号码)).去字母.前9位
这里的md5作者默认是:9fd09fe7fd77ab118ef78795668bc8a1,查一下没查到,就自己跑一下,得知密码密码前3位为固定的187。
因此,第二层的解密密码就是:
187 + sha(md5(中奖号码)).去字母.前9位
四、总结
没想这个锁机居然有续作。。。
软件强烈建议在官方和正规渠道下载
|