一、前言

之前一个Wannacry病毒样本在PC端肆意了很久,就是RSA加密文件,勒索钱财。不给钱就删除。但是现在移动设备如此之多,就有一些不法分子想把这个病毒扩散到移动设备了,这几天一个哥们给了一个病毒样本,就抽空看了一下,下面就来分析一下这个病毒样本程序。

二、病毒样本分析

首先国际惯例,这类的病毒都是用一些特殊的app名称吸引诱导用户下载,这里是一个叫做:魅影WIFI,下载安装之后界面如下:

我们点击免费激活,出现授权界面:

需要设备管理器,这时候应该猜到了,他是想修改锁机密码,我们就授权,然后分析程序找到重置的密码就好了,授权之后,就被锁屏了,解锁屏幕会发现:

病毒作者是真够狠的,尽然有自己弄了一个浮窗锁机,这时候我们不得不看代码了,找到这个密码了,当然这个浮窗类型的锁机其实很容易解决的。因为他主要是借助WindowManager搞得,所以这时候可以连接adb使用命令可以直接干掉这个进程就好了:am force-stop pkgname;我们可以用dumpsys命令获取其包名:

然后在强制停止app即可:

停止了之后,发现就是解锁屏幕了,当然密码已经被篡改了,所以的分析软件了,当然如果设备root了,可以直接删除/data/system/password.key文件即可。当然这些说的都是因为本身就是个开发者,而对于小白用户,肯定这么做不合适的。我们需要分析app,拿到这两个地方锁机密码。告诉被坑的小白用户,解救他们。下面就来分析app了:

三、破解获取解锁密码

第一、获取锁屏密码

因为我们知道现在大多数锁机软件都是利用设备管理器来修改设备密码的,所以想看他的密码也很简单。直接用jadx打开软件,然后全局搜索类:DeviceAdminReceiver

然后看看这个类里面修改代码部分逻辑:

看到了,这里直接将手机的锁机密码修改成9815了。这个就是我们待会需要解锁的密码。

第二、浮窗锁机密码

这个比上面密码有点麻烦,因为是自己定义的浮窗锁机,所以直接看到锁机界面文字,去Jadx全局搜索即可,这里全局搜索字符串"输入密码":

进入到这个类即可:

这里是定义了一个Service然后用WindowManager实现,然后把权限设置为最高,用户就无法进行任何操作了。因为最终的密码输入都是在这个EditText,取密码作比较也要用到这个文本框,就看这里的this.ed在哪里取值:

这里直接比对密码,如果密码正确了,就直接干掉服务,浮窗锁机就没有了。所以这里最重要的是decrypt方法了,他是从SP中拿到key是passw的密文进行解密比对。其实到这里我们可以借助Xposed工具直接hook这个decrypt方法就能很轻易的拿到这个密码了:

然后直接运行就可以获取对应的密码了:

不过这里还想继续分析这个DES的加密逻辑,因为本身就是要学习的。所以我们继续手动分析这个加密算法,我们看看des变量定义:

这里会看到有一个du和du2变量,这个不要在意,可能是代码混淆原因,其实就是一个值。看初始化传入一个字符串值,可能是DES加密的key值,然后就立马对一个密文进行解密,之后的内容在作为新的DES的密钥值。相当于这里二次获取密钥了。看DU代码实现:

传入的字符串就是作为key进行加解密操作的。那么下面我们就需要手动写一个简单的DES加解密算法了,这个网上很多代码了,直接拷贝一个:

第一次初始化密钥是字符串:"flower",然后直接解密内容:"c29fe56fa59ab0db"

然后直接解密,获取第二次要用到的密钥"xxx",然后在初始化以下key:

然后,我们需要去程序的xml中找到加密内容,然后拷贝出来进行解密:

把这个串拷贝出来进行解密:

这个就是解锁密码了,而我们在回过头看看怎么把这个加密串存到xml中的:

这里他生成密码尽然是采用随机值,然后在加上123456,最后在DES加密保存到xml中,同时也会把随机数保存到xml中的,从上面可以看到值是:

而这个值加上123456也就是密码了:92944926+12346=93068382,这个也就是上面我们解密之后的密码,这就对上了。所以这个锁机,如果加他QQ索要密码,其实他是需要让小白用户做点东西,因为这个密码是随机的,不是固定值,必须让小白用户把程序的xml文件给他。不然它也是不知道解锁密码的。实在坑爹。


四、破解进行文件解密

而上面的锁机并不是本文的重点,本文的重点其实是文件加密,在回他的app中:

然后点击注册使用:

点击注册软件,会等一会,其实这里他在做一些坏事,后面会分析代码干什么坏事:

这就是我们熟悉的Wannacry病毒界面了,需要付钱才能对文件解密了,而这时候悲剧的是我们的设备SD卡中的文件已经被全部加密了:

那么这时候就很恶心了,文件全部被加密,最蛋疼的是,你打开自己的SD卡可能都打不开了,这个是因为他做了一件更恶心的事就是无限制的新建一些文件和文件夹到SD中。这样其实手机已经废了。因为SD卡的文件非常多。看到上面的截图可以发现,每个文件都是0字节,然后文件对应一个空文件夹。下面来分析他的代码:

然后进入这个类看看,在他的onCreate方法中看到几个方法:

继续追踪发现:

有一个可怕的方法就是爆炸boom了:

在这里会创造出很多空文件和空文件夹,这样你的SD卡到最后几乎打不开了。手机也就废了。不过到这里我们貌似还没有介绍文件加密的内容,其实文件加密在程序启动的时候就做了,就是MainActivity中:

然后就开始跟踪这个方法了:

这里会过滤他自己创建出来的空文件和空文件夹不进行加密的,继续看代码:

这里通过方法的最后一个参数来判断是加密文件还是解密文件。加解密方法参数都是类似的,第一个参数是AES加解密的密钥。所以到这里我们大致清楚了,这个病毒是用AES对文件进行加密的。而密钥他又用AES加密,这时候的加密内容的key和内容是:

所以分析到这里,我们就可以开始进行手动解密文件了。这里当然有很多种方法:

第一种方法:借助Xposed工具直接hook他的FormetFileSize方法,因为我们在上面分析知道,这个方法的最后一个参数标志是解密文件还是加密文件,我们拦截这个方法之后,修改这个参数状态为false表示就是解密文件了:

第二种方法:把他解密功能代码拷贝出来,自己写一个解密程序,这个比较适合给中招的小白使用了:

因为他的代码这几个类都比较独立,所以直接拷贝出来不会有太多的错误,而有些错误就是变量定义重复自己手动改一下即可:

下面就开始运行这个程序即可,这里为了操作不浪费时间,就把SD卡情况了,然后写入三个简单的文件,让他加密:

这时候会发现,他加密之后的文件名就是原始文件名凭借一个串而已,这里忽略乱码哈哈。因为只有这样,他在解密之后才能获取到原始文件,从他代码中也可以看到这点:

然后运行我们解密程序,看到日志:

到这里,我们就成功的进行解密了。

五、病毒分析总结

到这里我们就分析完了这个病毒,总得来说病毒作者心非常狠,锁机采用两套机制,而且浮窗锁机尽然还用随机密码坑人。最恶心的是他的文件加密,尽然在SD中创建了那么多的空文件和空文件夹,让设备无法使用了。打开SD卡也是失败的。罪恶中的罪恶。最后他用的是AES算法对文件进行加解密操作。而这里他没有采用RSA加密的原因其实很简单,如果用RSA加密的话,设备真的要报废了。因为RSA加密算法非常耗时吃内存。手机会扛不住的。他也不敢用RSA加密了,只好用AES了,但是AES加密只要知道了密钥其实没多大问题对于解密来说。这里我们解密可以用两种方式一种是Xposed框架进行hook,一种是自己把它的界面代码拷贝出来自己写一个解密程序。当然第二种是最优的,因为对于那些中招的小白用户他们是没有root的,也是没有安装Xposed框架的,只有写一个解密程序给他安装进行解密就好了。不过有个很大的问题,就是因为病毒还创建了很多空文件和空文件夹,导致操作的时候,我们需要区别对待。也要做一次过滤,这些病毒自己生成的文件和文件夹就不要做解密了,不然会无限制死机了。

从这个病毒中我们可以了解到关于锁机策略机制,对于设备管理器的锁机直接找到DeviceAdminReceiver这个类就好了,或者直接看xml中的定义:

快速找到修改密码的地方,找到锁机密码即可。而对于那种浮窗锁机。因为都是采用Service和WindowManager来实现逻辑的。所以直接使用am命令强制停止程序运行即可。

特别说明:

关于病毒样本这里不能给出,非常抱歉,我知道你们肯定想说:"留毒不留种,小心被人捅",但是四哥不想被请去喝茶,所以你们要骂要捅随意吧。而没有病毒样本,其实都是扯淡。只看分析不操作就是浪费时间。如果真的真的想要样本私信我。方式加入我的小密圈。留言四哥的真实姓名即可。

六、总结

从这个病毒来看,其实即使你付费了,他帮你解密,也是很恶心的,因为他创建了那么多文件,删除需要时间,解密还消耗机器性能,这就是赤裸裸的迫害。所以遇到这种病毒千万不要给钱,可以自己解密,或者刷机。不要想那么多。手机解密这么多文件会死机了,你的手机会扛不住爆炸的。干脆备份文件,刷机得了。还有最重要的一点就是千万不要去下载来历不明的app,不要有歪想法,好好用手机。去正规的应用市场下载应用是最保险的。

更多内容:点击这里

关注微信公众号,最新技术干货实时推送

编码美丽技术圈
微信扫一扫进入我的"技术圈"世界

扫一扫加小编微信
添加时请注明:“编码美丽”非常感谢!

Android版本的"Wannacry"文件加密病毒样本分析(附带锁机)的更多相关文章

  1. demon病毒样本分析

    1. 简介 该样本是前几周爆发的THINKPHP漏洞中,被批量上传的一个病毒样本.如图所示. 2. 分析 该样本未经混淆,加壳,所以直接拖到IDA中即可分析. 首先从main函数开始.做一些初始化的函 ...

  2. Android破解之Lic文件加密程序(首例)

    我不会写Android,这是我第一个破解Android的例子,耗时接近一天,希望大神不要见笑! 本程序为商业软件,不便发布APK程序. 不要给我发消息,我不得回,有问题,直接回帖就可以了. 准备工作 ...

  3. Android之zip文件加密解压及进度条的实现

    zip文件的解压能够使用java的zip库,可是没有实现对加密文件的解压功能,这里能够使用zip4j来实现.详细能够參看该文<Android下zip压缩文件加密解密的完美解决方式>.该文件 ...

  4. android黑科技系列——修改锁屏密码和恶意锁机样本原理分析

    一.Android中加密算法 上一篇文章已经介绍了Android中系统锁屏密码算法原理,这里在来总结说一下: 第一种:输入密码算法 将输入的明文密码+设备的salt值,然后操作MD5和SHA1之后在转 ...

  5. windows下编译Android版本的boost库文件

    1.起因: 手上有一个用到了boost的asio库和thread库的工程要编译到手机上(Android版本和ios版本),本文只介绍如何编译到Android版本,ios版本之后再介绍,也许就不介绍了( ...

  6. java和android文件加密小结

    最近遇到一个文件加密的问题,自己读写的,安全性虽然还可以,但是速度慢,影响体验. Cipher虽然速度相当快,但是android和java有某些api存在不兼容: 问题解决: 方法引用自:https: ...

  7. 一枚Android "短信小偷" 病毒的分析

    一.样本简介 样本来自于吾爱破解论坛链接地址为http://www.52pojie.cn/thread-410238-1-1.html,样本不是很复杂有空就分析了一下.Android病毒样本还是很有意 ...

  8. Android版本28使用http请求

    Android版本28使用http请求报错not permitted by network security policy android模拟器调试登录的时候报错 CLEARTEXT communic ...

  9. Android版本28使用http请求报错not permitted by network security policy

    Android版本28使用http请求报错not permitted by network security policy android模拟器调试登录的时候报错 CLEARTEXT communic ...

随机推荐

  1. Linux 软件看门狗 watchdog 喂狗

    Linux 自带了一个 watchdog 的实现,用于监视系统的运行,包括一个内核 watchdog module 和一个用户空间的 watchdog程序.内核 watchdog 模块通过 /dev/ ...

  2. JS时间和字符串的相互转换 Date+String

    1.js字符串转换成时间 1.1方法一:输入的时间格式为yyyy-MM-dd function convertDateFromString(dateString) { if (dateString) ...

  3. Python学习札记(十九) 高级特性5 迭代器

    参考:迭代器 Note 1.可用于for循环的对象有两类:(1)集合数据类型:list tuple dict str set (2)Generator:生成器和含yield语句的函数.这些可以直接作用 ...

  4. [sping]xml配置文件中factory-bean与factory-method(spring使用工厂方法注入bean)

    public class CarFactory { //非静态方法 public Car createCar(){ Car car = new Car(); car.setBrand("BM ...

  5. bzoj 1087 状压dp

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4130  Solved: 2390[Submit][ ...

  6. HDU 4745 Two Rabbits ★(最长回文子序列:区间DP)

    题意 在一个圆环串中找一个最长的子序列,并且这个子序列是轴对称的. 思路 从对称轴上一点出发,向两个方向运动可以正好满足题意,并且可以证明如果抽选择的子环不是对称的话,其一定不是最长的. 倍长原序列, ...

  7. 无密码登陆的ssh和ssh-agent

    原文地址:http://lxshopping.blog.51cto.com/4542643/1179864/ 一,不需要输密码的ssh 原理:首先服务器端把公钥传给Client端,Client端在验证 ...

  8. JavaScript数字和字符串转换示例

    http://www.jb51.net/article/48465.htm 1. 数字转换为字符串 a. 要把一个数字转换为字符串,只要给它添加一个空的字符串即可: 复制代码代码如下: var n = ...

  9. JS中,如何判断一个数是不是小数?如果是小数,如何判断它是几位小数??

    <script type="text/javascript">     var x = 4.23323;//测试的数字     var y = String(x).in ...

  10. poj 2739 Sum of Consecutive Prime Numbers 素数 读题 难度:0

    Sum of Consecutive Prime Numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 19697 ...