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算法进行加密:
发表评论
您还未登录,请先登录。
登录