逆向定制的恶意软件: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通常包含两个主要组件:

  1. 加载器payload(扩展名为.wasm):负责下载和解压Cabinet文件
  2. 核心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;

头部字段详解

  1. magic:固定值0x10000301,作为格式识别标志
  2. dll_list:指向DLL名称列表的偏移量
  3. iat:指向导入地址表的偏移量
  4. ep:程序入口点偏移量
  5. mod_size:整个模块的总大小
  6. relocs:重定位表偏移量
  7. 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格式的重定位表类似,包含模块加载时需要调整的偏移量列表。重定位表由以下两部分组成:

  1. relocs:重定位表起始偏移量
  2. relocs_size:重定位表大小

在加载时,需要将模块的基地址(base)加到重定位表中的每个地址上。

6. 与PE格式的对比

特性 PE格式 Hidden Bee格式
头部复杂度 复杂,多个头部 简单,单一头部
导入处理 标准导入表 使用校验和的简化导入表
重定位 标准重定位表 类似但简化的重定位表
内存权限 按section设置 整个模块需要RWX权限
加载方式 Windows加载器 需要自定义加载器

7. 静态分析方法

由于非标准格式,静态分析需要特殊处理:

  1. IDA Pro加载:可以以原始二进制形式加载,但会丢失导入信息
  2. 自定义工具:开发工具将校验和解析为函数名
  3. 标签生成:生成TAG文件标记函数地址偏移量
  4. IDA插件:使用IFL插件加载生成的标签

8. 动态分析方法

需要开发自定义加载器来正确加载这种格式:

  1. 内存分配:分配具有RWX权限的连续内存区域
  2. 重定位处理:应用重定位表调整地址
  3. 导入解析:解析校验和并填充IAT
  4. 执行:跳转到入口点开始执行

9. 技术总结

  1. Hidden Bee使用自定义格式而非标准PE格式
  2. 格式设计比shellcode复杂但比PE简单
  3. 使用校验和而非名称来标识导入函数
  4. 需要自定义工具进行完整分析
  5. 这种完全定制的格式在恶意软件中较为罕见

10. 分析工具开发建议

为了有效分析Hidden Bee样本,建议开发以下工具:

  1. 格式解析器:解析自定义头部和结构
  2. 导入函数解析器:将校验和映射到实际API名称
  3. IDA Pro插件:增强IDA的解析能力
  4. 自定义加载器:用于动态分析

11. 防御建议

  1. 监控异常内存分配(特别是RWX权限)
  2. 检测非标准格式的可执行内容
  3. 关注校验和算法的使用
  4. 分析网络流量中的Cabinet文件下载
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的自定义格式以一个精心设计的头部开始,其结构如下: 头部字段详解 magic :固定值0x10000301,作为格式识别标志 dll_ list :指向DLL名称列表的偏移量 iat :指向导入地址表的偏移量 ep :程序入口点偏移量 mod_ size :整个模块的总大小 relocs :重定位表偏移量 relocs_ size :重定位表大小 4. 导入函数处理机制 Hidden Bee使用了一种特殊的导入函数处理方式: DLL列表结构 每个DLL名称前都有一个WORD值,表示从该DLL导入的函数数量。 导入函数名称处理 Hidden Bee不直接存储导入函数名称,而是使用校验和(checksum)来标识函数。校验和计算算法如下: 这个算法初始化结果为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文件下载