移动端测试

Android一枚简单锁机样本的浅析(续)

2018-12-23  本文已影响0人  h080294

上次简单分析了一个Android锁机软件,没想到还有兄弟版本。代码风格和解密方法都如出一格。

一、找到锁机应用

这次原文件往/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位

四、总结

没想这个锁机居然有续作。。。

软件强烈建议在官方和正规渠道下载

关注获取更多
上一篇下一篇

猜你喜欢

热点阅读