前言
锁机一直是个值得长期讨论的话题,许多安卓用户被某些特殊的应用名称或图标所吸引(如某些游戏外挂、xx神器、刷赞等),从而被诱导下载安装,授权后导致手机屏幕被锁,用户无法正常使用手机,并通过这种方式威胁用户支付一定的赎金来解锁。接下来我们通过一个示例,来聊聊锁机软件到底是通过哪些方式进入我们的生活中的。
分析
1. 取证样本与环境
样本: 被恶意修改的文件管理APK,以下称MT.APK 通过MT_APK下载的恶意锁屏APK,以下简称S.APK 反编译软件: jadx 测试环境:夜神模拟器 Android 5 APK加壳:百度加固
样本信息如下: 文件名称 :MT.apk
文件大小 :7493493 byte
MD5:8754a0151875fd5b01d5d1e7a8eeace2
SHA1:2d7942dd7e135144fa5703f1dfbf70ee857c5a98
文件名称 :S.apk
文件大小 :29519 byte
MD5:05dbdc18e51dd72ae7ccda76406316d3
SHA1:d690fdafc37794f64719a19fd47e21e375574a92
2. 取证样本测试
首先,在测试环境中安装MT.APK,从表面来看,这个锁机软件是依附在MT管理器中的,这是由于MT管理器的特殊性导致的。 因为MT管理器是一个比较方便的文件管理工具和逆向修改工具,既可以当做文件管理器使用,又可以以此来修改替换APK中的资源文件等,甚至可以去除签名,修改应用布局等。 所以如果我们下载了一些包含锁机软件的游戏破解神器,刚好这些锁机软件依附在MT管理器,同时再获取了用户的系统授权,那么用户就会在没有防备的情况下中招了。
首先,我们正常打开MT.APP,发现其开始请求获取系统超级管理员权限
允许其申请的权限后,模拟器环境迅速卡顿并自动重启,然后出现下图中的锁屏界面,且除此之外不能进行其他的操作。由于我们是直接在模拟器上进行的,且可以直接对它进行逆向分析,所以上图的解锁QQ群也没什么必要加。
3. 锁屏流程分析
-
启动MT.APP时,该恶意APK会向用户申请超级用户访问权限,并在后台向open.bmob.cn(云端代码托管平台)发送请求包。
-
当用户允许了该恶意APK请求超级用户访问权限的请求时,该APK就会通过调用在云端托管的代码访问http://fantasy-1259727437.cos.ap-chengdu.myqcloud.com/fantasyH.apk下载恶意锁屏APK- S.apk
-
以上请求会在系统后台下载并安装S.APK,S.APK会释放一个无图标的安装程序APK到系统应用路径里,并会在系统后台自动运行安装,S.APK成功安装后,会使手机迅速重启,最终导致手机被恶意锁屏下面我们来反编译下载回来的APK文件
4. 反编译APK
我们通常先从AndroidManifest入手,可以看到主入口为MainActivity,并且为隐藏的应用。 所以我们从MainActivity文件开始进行分析。可以看到其中只是调用startService函数启动了“com.af.qq1689644519.Lock”这个service。下面我们继续看Lock这个service都做了哪些事情。从这段代码可以看出当应用的包名为“com.af.qq1689644519“时才启动锁屏。我们接着往下看,看到这里有一个frist()函数,那我们猜测可能不止一层锁屏。 “不止一层锁屏”指的是先通过转账等方式,从勒索者手里拿到解密秘钥后,会进入下一层勒索界面,然后对受害用户进行层层剥削。 所以我们还是继续往下看看吧从代码中可以看到最主要的逻辑在“AnonymousClass100000000”这个类中,
获取界面输入框获取的值与PWD.get(“Heart”, this.val$mxlh))这个函数调用的结果进行比较,如果相等,则移除当前显示的view。 原来,当你以为结束了的时候,才发现,这只是个开始–我们还需要第二个密码才能进行解锁下面我们继续看this.this$0.caonima();这个函数发现和first()函数非常的像,有了前面的经验,我们直接看AnonymousClass100000001这个类这也是直接获取根据输入的信息,调用三次Lock.get进行MD5。。。这直接起个线程去执行AnonymousClass100000000这个任务从上面代码发现有两种方式进行解锁,一种是联网情况进行解锁,另一种是本地解锁。 我们通过浏览器访问请求地址,发现返回的数据与本地的数据是相同的。但是他收取的费用却不同
请求数据如下:然后调用shluder函数。这个函数的主要作用就是通过handler机制,将传递过来的字符串传递出去与前面三次MD5后的值进行比较。
从这可以看到BroadcastReceiver.get(this)函数调用,下面我们来看下这个函数干了什么。
发现竟然直接是读取的文件名为“MODEL”的SharedPreference文件,从中获取unlock的值,如果在破解的角度出发可以直接修改这个值尝试绕过。 我们继续往下看第三次锁屏界面如下,
下面我们继续分析gu()这个函数
根据上面两层分析的经验可以看出来,在这一层中主要是以DES算法为主,将输入的数据进行两次加密,然后再做四次MD5后与”³∏io∨l²²‖∏³∏∏≠¤il0∩m¤mlo‖∩∨³‖p¹i”进行比较。相等就会进入下一层的锁机界面。
从界面上看到最后一层的界面,终于看到了希望,下面我们来看看代码。这里可以看到又调用到了PWD的get函数,只是参数发生了变化。具体看下代码到此就是这款锁机软件的所有加解密逻辑了,除此之外,这其中还有个保活机制,依赖于宿主应用,如果感兴趣的可以分析下。
总结
锁机软件花样很多,有些比较“良心”的,等你交了钱之后会直接发你一个解密秘钥,当然也有一些没有底线的,正如文中所示,变着法的坑钱,甚至有更没有道德的作者,完全做一个随机的秘钥,打着收钱的名义干着坑人的活。 所以我们在平时下载软件,首先肯定要去正规的应用商店下载,其次一些所谓的破解软件、破解神器或者一些充满诱惑的软件都不要点击下载,才能从根本上防止遇到这些勒索软件。 而本文中的这款锁机软件,也有比较多的绕过方式,比如: 我们可以直接在宿主APP请求下载锁机APP的时候,将它Patch掉; 或者使用Hook插件将equals函数hook掉,判断如果参数为“com.af.qq1689644519“直接返回false,这样就可以直接绕过锁屏。
来源:freebuf.com 2020-11-10 16:12:46 by: 酒仙桥六号部队
请登录后发表评论
注册