【病毒分析】2024年网鼎杯朱雀组REVERSE02——关于勒索木马解密详解
字数 1443 2025-08-20 18:17:41

勒索木马解密分析教学文档:网鼎杯朱雀组REVERSE02题解

1. 背景介绍

1.1 网鼎杯比赛

  • 国家级网络安全大赛,第四届主题为"网数融合,鼎筑未来"
  • 目标:挖掘和选拔网络安全实战化人才,筑牢网络安全防线
  • 被誉为"网络安全奥运会"

1.2 题目背景

  • 题目名称:REVERSE02
  • 所属组别:朱雀组(能源、电力、化工、国防等行业单位)
  • 题目类型:勒索木马逆向分析与解密

2. 恶意文件基础信息

2.1 加密器基本信息

  • 文件名:ReMe.exe
  • 编译器:Microsoft Visual C/C++(16.00.30319)[LTCG/C++]
  • 大小:499.00KB
  • 操作系统:Windows(XP)[I386, 32位, Console]
  • 架构:386
  • 模式:32位
  • 类型:EXEC
  • 字节序:LE
  • 哈希值:
    • MD5:4fd22bc6938254c2ba65fcc38f23d603
    • SHA1:b388453c3a4aa0d3142ecebf4eb9637e6b9d559c
    • SHA256:c2964f90a0d4ef70e0092aed526c482d9ab157ee3f59a40955f3e1087fbeee07

3. 加密机制分析

3.1 加密文件特征

  • 加密文件名 = 原始文件名 + ".cry"(如:flag.txt.cry)
  • 加密算法:AES-ECB模式
  • 密钥生成:密钥内置于文件中

3.2 加密流程

  1. 初始异或加密:文件内容先进行异或0x9操作
  2. AES-ECB加密:使用内置密钥进行二次加密

4. 逆向分析过程

4.1 初步分析

  • 使用DIE检测到VMP保护
  • IDA分析发现堆栈保护相关函数,通过交叉引用定位入口点

4.2 脱壳与IAT修复

  1. 在x64dbg中下硬件断点定位入口点
  2. 使用Syscall插件修复IAT并转储文件
  3. IDA分析转储后的文件发现三个关键函数

4.3 进程注入分析

// 自解密字符串示例
for (i = 0; i < strlen(LibFileName); ++i)
    LibFileName[i] ^= 1u;

// 获取系统文件夹路径
SHGetFolderPathA(0, 4 * Wow64Process + 37, 0, 0, pszPath);

// 创建svchost.exe进程并进行注入
CreateProcessA(0, pszPath, 0, 0, 0, 4u, 0, 0, v11, v13);
VirtualAllocEx(v13->hProcess, 0, 0x2000u, 0x3000u, 0x40u);
WriteProcessMemory(v13->hProcess, v14, Buffer, 0x34u, &NumberOfBytesWritten);
CreateRemoteThread(v13->hProcess, 0, 0, (LPTHREAD_START_ROUTINE)(v14 + 52), v14, 0, 0);

4.4 文件加密逻辑

// 文件读取与异或加密
if (!(*(int (__stdcall **)(int, char *, int, int *, _DWORD))(a1 + 4))(v3, v9, 32, &v11, 0)) {
    v8 = v3;
    (*(void (__stdcall **)(int))(a1 + 12))(v8);
    return 0;
}
v5 = 0;
do
    v9[v5++] ^= 9u;
while (v5 < strlen(v9));

4.5 PE文件释放

  1. 在x64dbg中对SizeofResource下硬件执行断点
  2. 提取大小为0xB800的资源
  3. 对资源进行异或解密得到PE文件
  4. 创建进程并注入解密后的PE文件

4.6 二次加密分析

// AES加密密钥
v4[0] = 370507323;  // 0x16157E3B
v4[1] = -1496142280; // 0xA6D2AE38
v4[2] = -2011826245; // 0x8815F7BB
v4[3] = 1011863321;  // 0x3C4FCF19

// 文件加密流程
sub_F21450(v3, 0, 16, v4, 0);
sub_F21930(v3, this);
sub_F21930(v3, this + 16);

5. 解密方法与Flag获取

5.1 解密步骤

  1. 提取AES密钥:

    keys = bytes([0x3b, 0x7e, 0x15, 0x16, 0x38, 0xae, 0xd2, 0xa6, 
                  0xbb, 0xf7, 0x15, 0x88, 0x19, 0xcf, 0x4f, 0x3c])
    
  2. 解密脚本:

    from Crypto.Cipher import AES
    
    keys = bytes([0x3b, 0x7e, 0x15, 0x16, 0x38, 0xae, 0xd2, 0xa6, 
                  0xbb, 0xf7, 0x15, 0x88, 0x19, 0xcf, 0x4f, 0x3c])
    data = open('./flag.txt.cry', 'rb').read()
    
    aes = AES.new(keys, AES.MODE_ECB)
    honduras = aes.decrypt(data)
    
    decrypted_data = []
    for i in honduras:
        decrypted_data.append(i ^ 9)
    
    print(bytes(decrypted_data))
    

5.2 获取Flag

  • 解密结果:b'wdflag{70O9TSGICPQSLGDC}\t\t\t\t\t\t\t\t'
  • 最终Flag:wdflag{70O9TSGICPQSLGDC}

6. 技术总结

  1. 多层加密机制

    • 初始异或加密(XOR 0x9)
    • AES-ECB二次加密
  2. 反分析技术

    • VMP保护
    • 字符串动态解密(XOR 1)
    • 进程注入(svchost.exe)
    • 资源段隐藏PE文件
  3. 关键逆向技巧

    • 硬件断点定位入口点
    • IAT修复与转储
    • 资源段提取与分析
    • 进程注入跟踪
  4. 解密要点

    • 识别AES密钥(硬编码)
    • 了解加密顺序(先AES解密,再XOR解密)
    • 处理填充数据(尾部制表符)

7. 防御建议

  1. 检测与预防

    • 监控异常进程创建(特别是svchost.exe)
    • 检测可疑的文件操作(.cry扩展名)
    • 阻止未知程序的资源访问
  2. 应急响应

    • 隔离受感染系统
    • 分析内存中的注入代码
    • 提取加密密钥进行文件恢复
  3. 加固措施

    • 限制进程注入权限
    • 启用文件完整性监控
    • 定期备份关键数据

本分析完整展示了从逆向分析到解密的完整过程,涵盖了现代勒索软件常见的技术手段及相应的对抗方法。

勒索木马解密分析教学文档:网鼎杯朱雀组REVERSE02题解 1. 背景介绍 1.1 网鼎杯比赛 国家级网络安全大赛,第四届主题为"网数融合,鼎筑未来" 目标:挖掘和选拔网络安全实战化人才,筑牢网络安全防线 被誉为"网络安全奥运会" 1.2 题目背景 题目名称:REVERSE02 所属组别:朱雀组(能源、电力、化工、国防等行业单位) 题目类型:勒索木马逆向分析与解密 2. 恶意文件基础信息 2.1 加密器基本信息 文件名:ReMe.exe 编译器:Microsoft Visual C/C++(16.00.30319)[ LTCG/C++ ] 大小:499.00KB 操作系统:Windows(XP)[ I386, 32位, Console ] 架构:386 模式:32位 类型:EXEC 字节序:LE 哈希值: MD5:4fd22bc6938254c2ba65fcc38f23d603 SHA1:b388453c3a4aa0d3142ecebf4eb9637e6b9d559c SHA256:c2964f90a0d4ef70e0092aed526c482d9ab157ee3f59a40955f3e1087fbeee07 3. 加密机制分析 3.1 加密文件特征 加密文件名 = 原始文件名 + ".cry"(如:flag.txt.cry) 加密算法:AES-ECB模式 密钥生成:密钥内置于文件中 3.2 加密流程 初始异或加密:文件内容先进行异或0x9操作 AES-ECB加密:使用内置密钥进行二次加密 4. 逆向分析过程 4.1 初步分析 使用DIE检测到VMP保护 IDA分析发现堆栈保护相关函数,通过交叉引用定位入口点 4.2 脱壳与IAT修复 在x64dbg中下硬件断点定位入口点 使用Syscall插件修复IAT并转储文件 IDA分析转储后的文件发现三个关键函数 4.3 进程注入分析 4.4 文件加密逻辑 4.5 PE文件释放 在x64dbg中对SizeofResource下硬件执行断点 提取大小为0xB800的资源 对资源进行异或解密得到PE文件 创建进程并注入解密后的PE文件 4.6 二次加密分析 5. 解密方法与Flag获取 5.1 解密步骤 提取AES密钥: 解密脚本: 5.2 获取Flag 解密结果: b'wdflag{70O9TSGICPQSLGDC}\t\t\t\t\t\t\t\t' 最终Flag: wdflag{70O9TSGICPQSLGDC} 6. 技术总结 多层加密机制 : 初始异或加密(XOR 0x9) AES-ECB二次加密 反分析技术 : VMP保护 字符串动态解密(XOR 1) 进程注入(svchost.exe) 资源段隐藏PE文件 关键逆向技巧 : 硬件断点定位入口点 IAT修复与转储 资源段提取与分析 进程注入跟踪 解密要点 : 识别AES密钥(硬编码) 了解加密顺序(先AES解密,再XOR解密) 处理填充数据(尾部制表符) 7. 防御建议 检测与预防 : 监控异常进程创建(特别是svchost.exe) 检测可疑的文件操作(.cry扩展名) 阻止未知程序的资源访问 应急响应 : 隔离受感染系统 分析内存中的注入代码 提取加密密钥进行文件恢复 加固措施 : 限制进程注入权限 启用文件完整性监控 定期备份关键数据 本分析完整展示了从逆向分析到解密的完整过程,涵盖了现代勒索软件常见的技术手段及相应的对抗方法。