在网上找了些Android 的病毒样本,有空就分析一下,会挑一些有意思的发出来,这是第一篇。
样本名称:魅影WIFI
md5:13c563e168d6852bfa42262687841b05
简介
通常来说病毒的名称都会用一些有诱惑性的名字或者图标来吸引用户下载,这个也不例外,这个病毒佯装成一个wifi破解应用。主界面如下:
该病毒会诱导用户点击"免费激活"或 "注册使用" 让用户上钩。行为主要包括:
- 激活设备管理器,重置锁屏密码,并锁屏,同时监听用户修改锁屏密码的行为;
- 创建子线程,在SD卡中无限创建空文件和空文件夹,导致SD卡几乎无法打开
- 将SD卡里的文件加密
行为分析:
1.锁机
点击"免费激活", 会打开是否激活设备管理器的界面:
点击激活后,就会显示一个自定义的浮窗锁机界面,要求用户联系QQ交付赎金:
可通过查找设备管理器相关的 DeviceAdminReceiver类来快速找到关键的代码:
如上代码,病毒注册成设备管理器后,会重置锁屏密码为9815,同时会启动类名为 com.h.s 的服务,在该服务中,创建了上面看到的浮窗锁机界面,来看该服务相关的代码:
对Android 比较熟悉的技术人员完全可以用 am force-stop 命令将该浮窗给干掉,也可以用Xposed去hook它的关键函数直接获取密码。但这里打算跟一下它的加密算法,并将锁机密码搞出来。
来看一下密码校验的代码:
可以看到是从SharedPreferences中获取一个passw的值,然后将该值进行解密,再与输入的密码进行比较。
再来看一下passw的值是如何生成的:
如上图,可以看到,锁机密码的原文其实是一个随机数,将其加上123456后,通过DU进行DES加密,再进行保存。这里DU类,先使用"flower"作为密钥,然后解密 "c29fe56fa59ab0db" 字符串从而得到一个新的密钥,再用该密钥去对锁机密码+123456 作加密,最终得到密文并将其保存到SharedPreferences中。
将DU这个类与解密相关的操作整理抽出来并整理,关键代码如下:
而passw的值如下图:
现在就可以写解密程序了:
注:病毒代码在生成最终写入到passwd的值之前,会判断如果手机没联网的话,则将一个固定密文写入到passw的值并保存到SharedPreferences中,此时解出来的浮窗锁机密码就是一个固定的字符串 "beautifulflower",这里就不详细说了。
2.加密文件
该病毒另一个主要行为就是会将SD卡中的原有文件进行加密,同时会往SD卡中创建无数空的文件和目录。
使用adb shell 进入查看 sdcard卡,如图:
来看相关的代码:
可以看到程序一启动,就会创建一个子线程去做加密文件和创造垃圾文件的操作。
先来看它是如何加密文件的:
如上代码,可以看到,病毒会递归遍历sd卡,如果是自己创建的文件和目录,则不进行加密,如果是原有的文件,则进行加密,而进行加密操作的 FormetFileSize() 方法中,可以清楚地看到, 第三个参数是决定了是进行加密还是解密。到这里,我们有两种方式来解密文件,一种是将代码中它封装好的FileEncryptUtils 类的解密方法提取出来,写一个apk进行解密;另一种就是通过Xposed来hook FormetFileSize()方法。但是要遍历的时候要注意做好过滤,因为有很多都是病毒创建的空文件和空目录。
另外,无限创建空文件和目录的代码如下:
3.其他行为
如果手机已root,则该应用还会通过 su 去获取root权限,然后拷贝一些apk 到/system/app目录中,但我看了下,该目录下并没有它要拷贝的这些apk,其他也没什么后续的有害行为,所以就没具体分析了。
最后
该病毒其实还是很弱的,对 Android比较熟悉的人员可以比较轻易地搞定它。但对于普通用户来说,还是比较恶心的,除了加密SD卡中的文件外,还会在SD卡中无限创建空文件和目录,会造成SD卡很难打开,甚至是 "爆掉"。
所以普通用户还是要在正规渠道或应用市场下载APP,还有建议不要ROOT手机,遇到权限赋予的提示,一定要谨慎。