2.每台机器的解密文本(temp000000.txt)密钥数据是不相同的,因此不能将同一份密钥文本作用于其他机器,每台机器必须使用各自的解密文本。
技术分析病毒为了防止自身被静态分析,将所有要使用到的API都在运行时动态加载,并且在需要时才调用其解密函数解密字符串,该解密函数使用凯撒轮盘的方式解密字符串信息。
图:动态解密字符串
获取系统语言,与列表中的进行对比,如果是以下指定语言的操作系统,将不会受到加密攻击。推测病毒作者通过该种方式避免所在国家的法律。
图:检查本机语言
解密时排除指定文件目录与部分后缀名,防止加密时操作系统被破坏导致无法继续加密。
图:排除指定的目录及后缀
删除系统的卷影拷贝,防止通过系统工具恢复文件。
图:删除卷影
创建互斥体防止多个实例影响加密流程。
图:互斥防多开
创建多达50个的加密线程,为其指定不同的文件路径,同时工作以便快速加密所有文件路径。
图:多线程快速加密
获取本机部分信息(主机名、用户名、磁盘卷信息), 并且通过这些信息计算生成一个唯一的用户ID。
图:获取用户信息
生成随机密钥,使用Random函数生成4组伪随机数,作为后续加密算法的提供密钥。
图:生成密钥
四组密钥信息如下图:
图:密钥信息展示
在用户临时目录下创建一个以用户ID为名称的空文件,作为病毒对计算机感染的一个检查标记。以此防止被加密过的主机,重复运行数据被二次加密。
图:创建感染标记
根据病毒程序计算的唯一ID来填充被病毒加密后文件的后缀格式,目的也是便于病毒作者清晰区分不同的被加密用户。
图:使用ID填充后缀名
获取操作系统版本、系统类型、并将密钥等信息一并组合写入到桌面的temp000000.txt文件中。并立即通过NotePad记事本程序打开密temp000000.txt文件。
密钥文件的格式如下:
report||用户ID||用户ID + 密钥||主机名||操作系统||系统类型||系统语言||
图:密钥文件
遍历所有网络资源以及本地磁盘目录,在所有目录下创建勒索文本。并记录所有的文件目录以便于后续50个加密线程能够同时进行加密。
图:枚举网络资源
图:遍历本地磁盘
加密文件时,修改文件的扩展名。
图:被修改的文件名
该版本加密时会判断文件大小,对于大于0xB400字节的文件, 仅加密0xB400字节。 小于0xB400则全部加密。
图:判断文件大小
使用3DES算法进行首次数据加密,先前通过Random随机数生成的KEY1前16字节做为3DES的密钥key,KEY2的前8字节做为3DES的初始向量IV。
图:3DES算法加密
进过3DES加密后的数据再次使用RC4进行二次加密。RC4所使用的密钥是由Random随机数生成的KEY4,密钥大小为0x100字节。
图:RC4加密
加密后的数据写回文件,并向文件末尾追加0x20 + 0x4字节数据。
其中前0x20字节只使用了首个字节保存被加密数据的结尾。
最后0x4字节则是根据用户PC信息计算所得的唯一ID与key进行异或所得标识。
目的应该是病毒作者为了效验文件密钥与数据完整性。
加密后的文件展示如下:
图:被加密的文件
病毒程序在完成全盘加密的操作,也就是所有的线程全部结束加密工作后。调用命令行执行自删除操作。