
0x00 前言
前些天刚刚学完常见对称加密算法原理,故找来一勒索病毒练手。其中如有不当之处,望读者指正,笔者感激不尽。
0x01 样本分析
病毒使用到所有函数名称均加密存储,用以抵抗静态分析,其加密方式使用的是替换式密码,具体替换规则如下图所示:

知道替换规则之后,通过一脚本将病毒使用到的函数名称解密如下:










若某一函数地址获取失败,则直接调用ExitProcess退出当前进程:

判断Country Code是否为以下四个国家:

具体对应如下:

如果是这四个国家之一,同样是直接调用ExitProcess退出当前进程。
接下来将内存区域中如下字符串以0x00分割,并逐一复制到分配的堆块中:

其流程如下所示(部分函数没有截图):

判断主机是否接入互联网:

检查当前用户是否是管理员组的成员:

通过vssadmin删除卷影副本:

在调用ShellExecuteEx()之前由下列函数为其设置SHELLEXECUTEINFO结构中字段的值:

之后通过bcdedit禁用自动修复:


将之前复制的字符串(如下所示)以;分割:


创建名为LozhYNgbDQij5tYp的互斥对象:

创建0x32个线程(加密线程,此处先不作展开,详见下文):

之后创建加密准备线程:

首先获取主机名、用户名及临时目录路径:

获取卷信息:

将0xD6FDFBEF转换为十进制(3,606,969,327),用于后续生成用户标识:

通过CRC32算法计算出用户标识:

其后开始生成密钥:

共生成4组密钥,其大小如下所示:

于临时目录下创建一名为用户标识的文件:

根据用户标识生成加密文件扩展名:

获取操作系统位数、版本:

将如下内容拼接在一起,其形式是”report||用户标识||用户标识十六进制表示_密钥1_密钥2_密钥3_密钥4||ComputerName||版本||位数||语言”:

于勒索病毒目录下创建一名为temp000000.txt的文本文档,并将上述拼接内容写入文件:


接下来创建勒索文本并写入内容如下:

遍历网络资源:

将遍历到的文件夹与下列字符串逐一比较,避免加密重要文件夹:


遍历网络资源中的目录:

将勒索文本复制到每一文件目录下:

加密线程使用的加密算法首先是AES加密,其算法原理不再赘述(可参阅密码学基础:AES加密算法):

根据其密钥扩展算法亦可识别:

接下来将密文再次通过RC4算法进行加密:

0x02 参考链接










评论