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

加密文件所使用的加密算法

从代码中加密逻辑的核心实现可以明确判断是 XOR(异或)加密算法,属于对称加密的一种。

  1. 加密过程为逐字节异或运算:原始文件的每个字节(*((_BYTE *)v8 + i))与密钥中的对应字节(*(_BYTE *)((i & 0xF) + a2))进行异或操作,得到加密后的字节;
  2. 密钥使用方式为循环密钥:通过i & 0xF(结果范围 0~15)实现对 16 字节密钥的循环复用,属于 “流密码” 的简化形式。

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

分析被感染的文件,其中自定义标志位的长度为多少字节

在加密函数 sub_140001120 中,程序在写入加密内容前,会先向加密文件(.enc)写入两段固定数据,作为自定义标志位:

  1. Buffer 是一个 int 类型变量(值为 1381190999),在 32 位 / 64 位系统中均占 4 字节,作为固定标识;
  2. v19 是 __time64_t 类型变量(存储加密时的时间戳),占 8 字节,作为辅助标识。

这两段数据是所有被加密文件开头都会包含的自定义标志,用于病毒识别已加密文件。所以自定义标志位的总长度为 4 + 8 = 12 字节。

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

分析被感染的文件,其头部魔数的十六进制

文件头部信息(魔数):文件头部信息是文件前几个字节的特征码,通过读取这些特征码可以准确识别文件类型。

被感染的文件(即生成的 .enc 文件)的头部魔数是一个固定的4字节值,对应于代码中的 Buffer 变量,其值为 1381190999(十进制)。

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

1381190999 转换 HEX 的值为 52534D57,但不管是IDA直接转换,还是用计算器转换,这都是大端序表示。

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

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

首先明确使用了 Windows x64 API FindFirstFileA (Windows 特有),Windows 几乎只运行在小端序架构(x86/x64),所以答案应该转换成 0x574D5352

(0)

相关推荐

发表回复

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