[恶意软件分析] Gacrux:基于C语言的可自定义PE加载恶意软件
字数 1278 2025-08-15 21:32:24
Gacrux恶意软件分析技术文档
1. 概述
Gacrux是一款基于C语言开发的可自定义PE加载恶意软件,使用Visual Studio 2017编译,从2020年8月开始在某些论坛上出售。该恶意软件受到Smoke Loader的启发,具有多种反分析技术和自定义PE加载功能。
2. 反分析技术
2.1 代码混淆技术
-
指令流混淆:
- 使用跳转指令干扰IDA的代码解析
- 解决方法:使用nop操作码修复
-
函数分析干扰:
- 伪造返回值破坏IDA的函数分析
- 解决方法:同样使用nop操作码修复
-
动态加密函数:
- 磁盘上的函数在调用前解密,调用后重新加密
- 加密机制:
- 识别函数中表示加密区域开始和结束的模式
- 使用传递给函数的密钥进行异或操作
2.2 反调试技术
-
调试器检测:
- 检查PEB中的BeingDebugged成员
- 检测到调试器时,malloc函数返回请求缓冲区大小而非实际分配
-
黑名单模块检测:
- 检查系统加载的黑名单模块
- 存在黑名单模块则退出执行
-
NtGlobalFlag检查:
- 注入的ShellCode/PE加载器检查PEB的NtGlobalFlag成员
2.3 反虚拟机技术
- 资源检测:
- 检查目标磁盘可用空间和RAM大小
- 检测到资源不足(虚拟化常见表现)时增加Explorer进程PID
- 触发NtOpenProcess崩溃阻止进一步执行
3. 字符串加密
- 字符串存储在专用函数中
- 根据传入的ID动态解密字符串
- 外部模块字符串列表可通过特定链接获取
4. 系统调用(Syscall)实现
- Syscall模块主要从开源加密程序复制
- 修改点:
- 哈希算法改为djb2
- 输出使用常量值进行异或计算
5. 持久化机制
- 通过Windows进程实现
- 在explorer.exe上下文中持续调用
- 检测安装文件并在启动项菜单中创建.lnk文件
6. 代码注入技术
6.1 注入原语
-
32位环境:
- 使用NtCreateSection/NtMapViewOfSection作为写原语
-
64位环境:
- 使用NtAllocateVirtualMemory/NtWriteVirtualMemory
-
两种方法都通过直接系统调用完成
6.2 执行原语
- 使用SetPropA实现代码注入
- 基于"PROPagate"技术(Adam文章中描述)
- 从开源实现复制,通过函数指针设置
7. 自定义PE加载器
7.1 加载器特点
- 注入到Explorer中的不是普通PE文件
- 包含自定义PE Header和加载器
7.2 加载流程
-
反调试检测:
- 执行初始反调试检查
-
API解析:
- 解析三个关键API
- 用于处理导入表和修复重定位
7.3 自定义PE格式
- 使用非标准PE格式
- 可通过Kaitai描述符恢复原始PE文件
8. 网络通信
- 使用WinInet库实现
- 在Explorer上下文环境中执行
9. 总结分析
-
代码来源:
- 大量借鉴公共代码
- 经过少量修改后投入使用
-
安全缺陷:
- 存在多个漏洞
- 整体实现并不特别复杂或独特
-
技术特点:
- 结合了多种已知技术
- 自定义PE加载器是其最显著特点