熊猫烧香病毒逆向分析:3个核心模块与IDA Pro 6.8静态调试实战
📅 2026/7/11 2:09:12
👁️ 阅读次数
📝 编程学习
熊猫烧香病毒逆向工程深度解析:IDA Pro静态分析与功能模块拆解
逆向分析环境搭建与样本预处理
工欲善其事,必先利其器。在开始逆向分析之前,我们需要搭建一个安全、隔离的分析环境。推荐使用以下配置组合:
- 虚拟机系统:Windows XP SP3(兼容性最佳)
- 分析工具套件:
- IDA Pro 6.8(主逆向工具)
- PEiD 0.95(查壳工具)
- Process Monitor 3.2(行为监控)
- LordPE(PE结构分析)
- ImportREC(导入表重建)
重要提示:所有分析操作应在断网环境下进行,避免病毒样本意外执行网络通信行为。建议在虚拟机快照后操作,便于随时回滚。
样本预处理阶段发现几个关键特征:
# 样本基础信息验证代码示例 pe = pefile.PE('panda.exe') print(f"入口点: 0x{pe.OPTIONAL_HEADER.AddressOfEntryPoint:X}") print(f"编译时间: {pe.FILE_HEADER.TimeDateStamp}") print(f"节区数量: {pe.FILE_HEADER.NumberOfSections}") # 输出结果示例: 入口点: 0x40CB70 编译时间: 2006-12-29 09:15:22 节区数量: 5通过PEiD检测确认样本使用Delphi编写(Borland Delphi 6.0-7.0),这直接影响后续的反编译策略:
| 特征项 | C++程序表现 | Delphi程序表现 |
|---|---|---|
| 参数传递 | 通过栈传递 | 优先使用寄存器(eax/edx/ecx) |
| 函数调用 | call前push参数 | mov eax/edx参数后直接call |
| 局部变量 | ebp相对寻址 | 同样使用ebp但可能混合寄存器 |
病毒初始化逻辑与自解密机制
病毒入口点0x0040CB70处开始执行,首先会进行双重自校验:
- 密钥验证阶段:
- 使用"xboy"和"whboy"作为解密密钥
- 通过循环异或操作解密内存中的字符串
- 将解密结果与硬编码字符串比对("武汉男生感染下载者")
; 典型解密代码片段 mov ecx, 0xA xor edx, edx div ecx movzx eax, byte ptr [eax+ebx-1] xor al, byte ptr [esi] mov byte ptr [edi], al- 内存分配策略:
- 调用LocalAlloc分配0xFF8字节空间
- 使用InitializeCriticalSection创建临界区
- 通过EnterCriticalSection实现线程同步
关键函数调用关系图:
start() ├── DecodeString("xboy") → 验证第一层密钥 ├── CMPString() → 比对解密结果 ├── DecodeString("whboy") → 验证第二层密钥 └── MainFunction() → 进入核心逻辑逆向过程中发现三个关键数据区:
- 0x0040CC40 - 作者标识字符串区
- 0x0040D030 - API函数跳转表
- 0x0040E7D4 - 全局配置数据指针
核心功能模块逆向解析
模块一:文件感染与传播机制
病毒采用多线程方式实现文件感染,主要技术特点包括:
- 文件类型识别矩阵:
| 文件类型 | 处理方式 | 特征标记 |
|---|---|---|
| .exe/.scr | 二进制替换 | WhBoy前缀 |
| .htm/.asp | 追加iframe | > 标签 |
| .gho | 直接删除 | 无备份 |
| 其他可执行文件 | 部分感染 | 大小校验 |
- 感染流程伪代码:
void InfectFile(LPCSTR filename) { if (CheckInfected(filename)) return; HANDLE hFile = CreateFile(filename, GENERIC_READ|GENERIC_WRITE); DWORD fileSize = GetFileSize(hFile); LPBYTE buffer = VirtualAlloc(fileSize); ReadFile(hFile, buffer, fileSize); if (IsPE32Valid(buffer)) { ProcessPEInfection(buffer); } else if (IsScriptFile(filename)) { AppendMaliciousCode(buffer); } WriteFile(hFile, buffer, fileSize); CloseHandle(hFile); }- 特别感染技巧:
- 利用SetFileAttributes隐藏感染痕迹
- 通过进程快照检查目标文件是否运行中
- 感染后保留原文件时间戳(避免引起怀疑)
模块二:持久化与自我保护
病毒通过多种技术实现长期驻留,主要手段包括:
注册表操作清单:
- HKCU\Software\Microsoft\Windows\CurrentVersion\Run
- 键值:svcshare → %System%\drivers\spoclsv.exe
- HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL
- 修改CheckedValue为0(隐藏文件不可见)
- HKCU\Software\Microsoft\Windows\CurrentVersion\Run
定时器触发机制:
- Timer1(1秒间隔):杀软进程检测
- Timer2(6秒间隔):服务项删除
- Timer3(10秒间隔):共享文件夹清理
- Timer4(20分钟间隔):C2通信尝试
反分析技巧:
- 调试器检测(IsDebuggerPresent)
- 虚拟机检测(通过特定指令如CPUID)
- 关键API动态获取(GetProcAddress)
模块三:网络传播与横向移动
病毒的网络模块采用分层架构设计:
局域网扫描策略:
- 端口扫描:139/445(SMB服务)
- 弱口令字典:admin/123456/root等
- IPC$共享利用
传播流程图:
开始 ↓ 获取本地IP段(GetAdaptersInfo) ↓ 生成目标IP列表(192.168.0.1-254) ↓ for each IP { 尝试连接445端口 → 成功:尝试弱口令爆破 → 成功:复制病毒文件 → 失败:跳过 } ↓ 定时重复执行(每30分钟)- C2通信协议:
- HTTP协议明文通信
- 固定URL:http://wangma.9966.org/down.txt
- 响应内容直接作为Shellcode执行
静态分析实战技巧与IDA高级应用
函数识别与重命名策略
针对Delphi程序的特殊处理:
关键函数特征识别:
- 参数传递:eax/edx/ecx寄存器优先
- 调用约定:register方式
- 局部变量:ebp相对偏移访问
推荐命名规范:
- 解密函数:Prefix_Decode[类型]
- 比较函数:Prefix_Cmp[类型]
- 内存操作:Prefix_Mem[操作]
示例:
// 原始函数 sub_403C98(int a1, int a2) // 优化后 StringAllocAndCopy(char *src, char *dst)交叉引用分析与数据流追踪
关键API调用链:
- 文件操作:CreateFileA → WriteFile → CloseHandle
- 注册表:RegOpenKeyEx → RegSetValueEx → RegCloseKey
- 进程:CreateToolhelp32Snapshot → Process32First
数据流追踪方法:
- 在IDA中使用"Jump to xref"功能
- 对关键内存地址添加书签
- 使用IDAPython脚本自动化标记
# IDAPython数据流追踪示例 for ref in XrefsTo(0x0040D030, 0): print(f"调用来自: 0x{ref.frm:X}") print(GetDisasm(ref.frm))伪代码重构与注释规范
优秀逆向注释应包含:
- 函数功能描述
- 参数/返回值说明
- 关键算法解释
- 与其他模块的关联
示例伪代码:
/* 功能:感染PE格式可执行文件 * 参数:lpFileName - 目标文件路径 * 返回:BOOL - 是否感染成功 */ BOOL InfectPE(LPSTR lpFileName) { // 检查是否已感染 if (CheckInfectionMark(lpFileName)) return FALSE; // 映射文件到内存 HANDLE hMap = CreateFileMapping(...); LPVOID pMap = MapViewOfFile(...); // 添加感染标记 AddVirusSignature(pMap); // 修复PE头校验 FixPEChecksum(pMap); UnmapViewOfFile(pMap); CloseHandle(hMap); return TRUE; }防御方案设计与分析启示
病毒特征提取方法
静态特征:
- 文件哈希:MD5 512301C535C88255C9A252FDF70B7A03
- 字符串特征:"WhBoy"、"spoclsv.exe"
- 资源段图标:熊猫烧香图案
行为特征:
- 注册表键值修改模式
- 特定目录文件创建行为
- 网络通信特征
现代安全防护启示
- 防御策略对比:
| 传统防御 | 现代改进方案 |
|---|---|
| 特征码扫描 | 行为沙箱分析 |
| 静态规则匹配 | 机器学习检测 |
| 单点防护 | 终端EDR联动 |
- 代码安全启示:
- 输入验证强化
- 最小权限原则
- 进程行为监控
- 网络通信加密
逆向工程经验总结
Delphi程序分析要点:
- 注意寄存器传参特性
- 识别RTL(运行时库)函数
- 关注TApplication等框架结构
多线程病毒分析技巧:
- 使用IDA的线程标记功能
- 重点分析同步原语(临界区、事件等)
- 对定时器回调单独建立分析窗口
高效逆向工作流:
- 建立标准化注释体系
- 使用IDAPython自动化重复工作
- 保持分析笔记与代码同步
编程学习
技术分享
实战经验