美文网首页移动端测试
Android一枚简单锁机样本的浅析(续)

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

作者: h080294 | 来源:发表于2018-12-23 21:51 被阅读0次

    上次简单分析了一个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位

    四、总结

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

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

    关注获取更多

    相关文章

      网友评论

        本文标题:Android一枚简单锁机样本的浅析(续)

        本文链接:https://www.haomeiwen.com/subject/rtqwkqtx.html