熊猫烧香病毒逆向分析:3个核心函数与IDA Pro/OD实战调试流程
熊猫烧香病毒逆向分析:3个核心函数与IDA Pro/OD实战调试流程
2006年那个冬天,许多Windows用户的电脑屏幕上突然出现了一群举着三炷香的熊猫图标——这成为了中国互联网安全史上一个标志性时刻。作为安全研究人员,我们不仅要了解病毒的行为特征,更需要掌握其底层实现机制。本文将带您深入熊猫烧香病毒的内部世界,通过IDA Pro静态分析与OllyDbg动态调试,还原其三个核心函数的运作细节。
1. 分析环境搭建与样本准备
在开始逆向工程之前,我们需要构建一个安全的分析环境。推荐使用VMware Workstation 16+搭配Windows XP SP3系统,这个组合既能兼容老病毒的行为特征,又能提供必要的隔离保护。
必要工具链配置:
- IDA Pro 7.0(Hex-Rays反编译器插件)
- OllyDbg 1.10(配备StrongOD插件)
- PEiD 0.95(查壳工具)
- Process Monitor 3.60(行为监控)
样本处理时需特别注意:
# 计算样本哈希值 md5sum spcolsv.exe sha1sum spcolsv.exe安全提示:所有分析操作应在断网环境中进行,避免病毒意外传播。建议在虚拟机快照后操作,每次分析前恢复干净快照。
病毒样本的典型特征包括:
- 文件大小:约30KB(原始变种)
- 编译语言:Delphi(通过PEiD检测确认)
- 无壳保护(原始版本未加壳)
2. 静态分析:IDA Pro中的关键函数定位
使用IDA Pro载入样本后,我们首先关注导入函数表。病毒常用的关键API包括:
CreateFileA/W(文件操作)RegSetValueExA(注册表修改)CreateProcessA(进程创建)WinExec(命令执行)
三个核心函数的识别技巧:
通过字符串交叉引用,我们很快定位到病毒的特征标记"WhBoy"。以此为线索,在IDA的Strings窗口搜索后,可以追踪到以下关键函数:
| 函数地址 | 功能特征 | 调用API特征 |
|---|---|---|
| 0x00401A00 | 自复制与启动项设置 | CopyFile, RegCreateKeyEx |
| 0x004025C0 | 文件感染模块 | FindFirstFile, CreateFileMapping |
| 0x00403120 | 进程终止与自我保护 | EnumProcesses, TerminateProcess |
在反编译视图中,我们注意到感染模块采用典型的PE文件感染方式:
// 伪代码展示感染逻辑 void infect_file(char* filename) { HANDLE hFile = CreateFile(filename, GENERIC_READ|GENERIC_WRITE); MAP_FILE(hFile); if (is_pe_file(pMapping) && !is_infected(pMapping)) { append_virus_code(pMapping); set_infection_marker(pMapping); } UnmapViewOfFile(pMapping); CloseHandle(hFile); }3. 动态分析:OllyDbg实战调试流程
启动OllyDbg加载病毒样本后,我们需要设置几个关键断点来捕获病毒行为:
断点策略表:
| 内存地址 | 断点类型 | 预期行为 | 观察重点 |
|---|---|---|---|
| 0x00401A00 | 普通 | 创建系统目录副本 | EAX返回值、栈参数 |
| 0x004025C0 | 硬件写入 | 感染目标文件 | 文件句柄、缓冲区内容 |
| 0x7C8106E7 | 系统 | kernel32.CreateProcessA调用 | 命令行参数、创建标志 |
调试过程中需特别关注以下寄存器变化:
- EAX:函数返回值
- ECX:对象指针(Delphi调用约定)
- ESP:栈指针变化
典型调试场景记录:
- 病毒首先检查自身路径:
00401A10 MOV EAX, [EBP-4] ; 获取当前路径 00401A13 PUSH 0 ; lpSecurityAttributes 00401A15 PUSH EAX ; lpFileName 00401A16 CALL DWORD PTR [<&CopyFileA>]- 感染文件时的内存操作:
004025D2 MOV EDX, [EBP-8] ; 文件句柄 004025D5 LEA ECX, [EBP-34h] ; 缓冲区地址 004025D8 CALL 00402610 ; 感染处理子程序调试技巧:在OllyDbg中使用"Follow in Dump"功能实时查看内存变化,特别关注写入PE文件末尾的操作。
4. 病毒行为特征与对抗分析
通过动静态结合的分析方法,我们总结出病毒的典型行为特征:
传播机制三维度:
文件感染
- 追加病毒体到宿主文件尾部
- 修改PE头入口点
- 添加"WhBoy"感染标记
网络传播
- 通过445端口尝试弱密码爆破
- 使用IPC$共享进行横向移动
移动介质
- 创建autorun.inf自启动
- 隐藏属性设置(attrib +h)
反分析技术拆解:
- 进程枚举:检测杀毒软件进程
- 定时器触发:多线程异步操作
- 文件隐藏:设置系统隐藏属性
针对这些特征,我们可以构建如下的检测规则:
rule Panda_Burning_Incense { meta: description = "Detects Worm.WhBoy variants" strings: $marker = "WhBoy" fullword $api1 = "CreateFileMapping" wide $api2 = "EnumProcesses" wide condition: any of ($marker*) and all of ($api*) }5. 逆向工程中的疑难问题解决
在实际分析过程中,我们遇到了几个典型问题及解决方案:
Delphi程序逆向难点:
- 对象方法调用识别:Delphi使用寄存器调用约定(ECX存储this指针)
- RTTI信息利用:通过TObject字段定位关键类方法
- 事件处理函数:查找@Handle标识的特殊跳转
常见错误处理:
- 调试器检测规避:
# 使用PyKD脚本绕过反调试 def anti_anti_debug(): dbg = PyKD() dbg.writeDword(0x7FFDE030, 0) # 清除BeingDebugged标志定时器干扰处理: 在OD中使用插件暂停所有线程,只保留主线程执行
多进程跟踪技巧: 使用Process Hooks插件监控子进程创建
经过完整的逆向分析流程,我们不仅理解了熊猫烧香的技术实现,更重要的是掌握了复杂恶意代码的分析方法论。这种从行为观察到指令级剖析的完整闭环,正是安全研究人员需要持续锤炼的核心能力。
