逆向定制的恶意软件:Hidden Bee
字数 1650 2025-08-20 18:17:59
Hidden Bee恶意软件逆向分析教学文档
1. Hidden Bee恶意软件概述
Hidden Bee是一种复杂的恶意软件家族,其特点在于使用了非标准的文件格式来存储payload。与大多数恶意软件使用标准PE格式不同,Hidden Bee采用了自定义的二进制格式,这使得传统的静态分析工具难以直接解析。
2. Hidden Bee的payload结构
Hidden Bee的payload通常包含两个主要组件:
- 加载器payload(扩展名为.wasm):负责下载和解压Cabinet文件
- 核心payload:从Cabinet文件中解压出来的主功能模块
这两个模块都采用了相同的自定义格式,而非标准的PE格式。
3. 自定义格式头部结构分析
Hidden Bee的自定义格式以一个精心设计的头部开始,其结构如下:
typedef struct {
DWORD magic; // 格式识别号,固定为0x10000301
WORD dll_list; // 指向DLL列表的偏移量
WORD iat; // 指向导入地址表(IAT)的偏移量
DWORD ep; // 程序入口点偏移量
DWORD mod_size; // 整个模块的大小
DWORD relocs; // 重定位表偏移量
DWORD relocs_size; // 重定位表大小
} t_bee_hdr;
头部字段详解
- magic:固定值0x10000301,作为格式识别标志
- dll_list:指向DLL名称列表的偏移量
- iat:指向导入地址表的偏移量
- ep:程序入口点偏移量
- mod_size:整个模块的总大小
- relocs:重定位表偏移量
- relocs_size:重定位表大小
4. 导入函数处理机制
Hidden Bee使用了一种特殊的导入函数处理方式:
DLL列表结构
typedef struct {
WORD func_count; // 从该DLL导入的函数数量
char name[]; // DLL名称字符串(以null结尾)
} t_dll_name;
每个DLL名称前都有一个WORD值,表示从该DLL导入的函数数量。
导入函数名称处理
Hidden Bee不直接存储导入函数名称,而是使用校验和(checksum)来标识函数。校验和计算算法如下:
DWORD checksum(char *func_name) {
DWORD result = 0x1505;
while (*func_name) {
result = *func_name++ + 33 * result;
}
return result;
}
这个算法初始化结果为0x1505,然后对每个字符执行result = current_char + 33 * previous_result的计算。
5. 重定位机制
Hidden Bee的重定位表与PE格式的重定位表类似,包含模块加载时需要调整的偏移量列表。重定位表由以下两部分组成:
- relocs:重定位表起始偏移量
- relocs_size:重定位表大小
在加载时,需要将模块的基地址(base)加到重定位表中的每个地址上。
6. 与PE格式的对比
| 特性 | PE格式 | Hidden Bee格式 |
|---|---|---|
| 头部复杂度 | 复杂,多个头部 | 简单,单一头部 |
| 导入处理 | 标准导入表 | 使用校验和的简化导入表 |
| 重定位 | 标准重定位表 | 类似但简化的重定位表 |
| 内存权限 | 按section设置 | 整个模块需要RWX权限 |
| 加载方式 | Windows加载器 | 需要自定义加载器 |
7. 静态分析方法
由于非标准格式,静态分析需要特殊处理:
- IDA Pro加载:可以以原始二进制形式加载,但会丢失导入信息
- 自定义工具:开发工具将校验和解析为函数名
- 标签生成:生成TAG文件标记函数地址偏移量
- IDA插件:使用IFL插件加载生成的标签
8. 动态分析方法
需要开发自定义加载器来正确加载这种格式:
- 内存分配:分配具有RWX权限的连续内存区域
- 重定位处理:应用重定位表调整地址
- 导入解析:解析校验和并填充IAT
- 执行:跳转到入口点开始执行
9. 技术总结
- Hidden Bee使用自定义格式而非标准PE格式
- 格式设计比shellcode复杂但比PE简单
- 使用校验和而非名称来标识导入函数
- 需要自定义工具进行完整分析
- 这种完全定制的格式在恶意软件中较为罕见
10. 分析工具开发建议
为了有效分析Hidden Bee样本,建议开发以下工具:
- 格式解析器:解析自定义头部和结构
- 导入函数解析器:将校验和映射到实际API名称
- IDA Pro插件:增强IDA的解析能力
- 自定义加载器:用于动态分析
11. 防御建议
- 监控异常内存分配(特别是RWX权限)
- 检测非标准格式的可执行内容
- 关注校验和算法的使用
- 分析网络流量中的Cabinet文件下载