CTF比赛某勒索病毒逆向解析(二)

勒索病毒"CryptDestroyHash"所调用的动态链接库名称

依次点击 IDA 顶部菜单栏的 “视图” → “打开子视图” → “导入”,即可调出 “导入表” 窗口,搜索 CryptDestroyHash。

CTF比赛某勒索病毒逆向解析(二)

勒索病毒在遍历文件系统时所执行的内存地址

sub_140001120(".", Buffer) 是与 “文件系统遍历 / 加密” 强相关的调用,结合之前 “遍历文件并加密” 的逻辑,该函数大概率封装了文件查找、遍历、加密的核心流程。

勒索病毒要完成 “加密受害者文件” 的核心目的,必须先找到要加密的文件(比如遍历用户目录下的文档、图片、文本等)。程序流程中必然存在一个“遍历文件系统,筛选目标文件”的环节,而 sub_140001120(".", Buffer) 调用时,正好处于 “生成勒索密钥(前期准备)” 和 “后续文件加密 / 销毁(核心行为)” 之间,是流程中 “找文件” 的合理位置。

CTF比赛某勒索病毒逆向解析(二)

双击跳转到主要代码块,即可确定。

CTF比赛某勒索病毒逆向解析(二)

勒索病毒用于加密文件的密钥字符串长度

在以下代码段进行 MD5 计算:

CryptCreateHash(phProv, 0x8003u, 0i64, 0, &phHash)

在 Windows CryptoAPI 中,CryptCreateHash函数的第二个参数指定了哈希算法的标识符(ALG_ID)。其中 0x8003 对应的算法标识符是 CALG_MD5,表示使用 MD5 哈希算法。

CTF比赛某勒索病毒逆向解析(二)

v17 存储的是 16 字节的原始 MD5 哈希值,Buffer 存储的是转换后的 32 字符 HEX 字符串(每个字节变成两个十六进制字符),最终勒索密钥就是这个 32 字符的 HEX 字符串。

CTF比赛某勒索病毒逆向解析(二)

小Tips:从哪里能判断 v17 存储的是16字节MD5值?

程序使用了 Windows CryptoAPI 中的 CryptGetHashParam 函数来获取哈希对象的参数,主要目的是获取哈希值。

  1. pdwDataLen 明确要获取 16 字节的数据;
  2. 上面的代码指定了哈希算法就是MD5;
  3. 代码:v4 = 16i64 明确表示循环将执行16次,每次处理一个字节(因为v5是BYTE*类型,每次递增1字节)

综上所述,就能判断 v17 储存的就是生成的 MD5 值。

CTF比赛某勒索病毒逆向解析(二)

(1)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注