“熊猫烧香”在2006年底至2007年初大规模爆发,因感染后的文件图标会变成一只持香作揖的熊猫而得名。这个“老古董”是中国网络安全史上极具代表性的计算机蠕虫病毒。
基本信息#
File:xiongmao.vir
SHA1值:CA3A1070CFF311C0BA40AB60A8FE3266CFEFE870
第一道关卡:壳的博弈#

FSG 是一款非常经典的压缩壳,主要设计目标是追求极小的文件体积。它常被早期的恶意软件(如“熊猫烧香”)使用,因为它能显著减小病毒体积并初步混淆代码逻辑,增加静态分析的难度。
FSG脱壳#
ESP定律#
寻找原始入口点 (OEP)
实际操作:
F8 单步执行后,观察到 ESP 寄存器变为红色。

在数据窗口跟随 0018FF88 地址并设置硬件访问断点,我们可以快速跳过脱壳循环,直达程序的 OEP(原始入口点)。


F9 运行后,程序会停在跳转至 OEP 的关键 JMP 指令处。
F9运行–>把断点清理掉,【调试→硬件断点→删除】–>F8单步跟到OPE。
观察发现,004001D9在处dll在载入,在004001D9处下断点。
在EDI数据跟随,将显示模式调整为“长型 -> 地址”,F9观察地址变化。
FSG 在填充模块地址时,会插入 7FFFFFFF 作为分隔或干扰。如果直接使用 ImportREC 修复,这些填充值会导致工具无法识别导入函数。通过手动将这些值修改为 00000000,可以欺骗修复工具正确识别出 API 的边界。
在显示FFFFFFF时,dll载入结束,此时F8即可跳转OPE处。

跳转到如图,右键【分析–>从模块删除分析】


当程序跳转到真正的 OEP(Delphi 程序的起始特征)时,使用 OllyDump 将内存中的代码抓取出来保存为 .exe。

在 OEP 处使用 OllyDump 插件,取消勾选“重建输入表”(因为我们需要手动修复)。

修复 IAT#
由于转储出来的文件由于没有正确的导入表无法运行,需要利用 ImportREC 重新建立函数映射关系。
打开 ImportREC,导入原文件,修复的是 Dump 文件,填入正确的 OEP 偏移值,获取输入表并删除无效指针,最后点击“修复转储文件”。
OEP需要和从OD里dump出来时的值相同,【IAT自动搜索–>获得导入表】

【显示无效–>删除指针–>修正转储(选择之前从od dump下来的文件1.exe)】


成功脱壳并修复 IAT 后,我们终于掀开了这只‘熊猫’的神秘面纱。接下来的分析将揭示它如何在系统中扎根、隐藏并开启疯狂的扩散模式。
深度剖析:核心恶意行为#
病毒是用 Delphi 6.0-7.0 编写的,添加正确的签名库(bds)是识别函数语义的前提。

载入分析,IDA打开修好的1_.exe,添加签名。

没有delphi的签名库,右键添加

里面也有Delphi1的库,注意这里添加bds更准确

病毒的“解密引擎”#
xboy 和 whboy 都是解密字符串,sub_405250函数是病毒的“解密引擎”,利用 xboy/whboy 密钥还原攻击指令。

主要执行恶意的三个函数
![]()
自我保护与持久化#
自我复制#
在系统目录下释放病毒文件C:\Windows\SysWOW64\drivers\spo0lsv.exe。
病毒自我复制到系统目录下。

自我感染状态检测#

构造系统目录伪装路径#

当文件未被感染且当前病毒路径和系统下的病毒路径不一致#
- 终止已存在的spo0lsv.exe进程(避免端口/文件占用,确保复制成功)
- 拼接系统伪装路径,修改文件属性(确保复制/写入权限)
- 把当前病毒复制到系统伪装路径下
- 执行系统目录下的伪装病毒,退出当前进程

当文件未被感染且当前病毒路径和系统下的病毒路径一致#
当前病毒已经在系统伪装路径下(无需复制),进入感染标志查找。

当文件被感染,清理 + 恢复 + 重启#
针对 “已感染的文件”,目的是清理痕迹、恢复原文件(迷惑用户),同时确保伪装病毒持续运行。
- 清理感染标志(删除“whboy”字符串)
- 提取原文件大小(恢复文件用)
- 恢复原文件(把感染后的文件还原为感染前的状态)
- 执行bat脚本(清理痕迹/自启动)

- 检查并重启伪装病毒进程(确保病毒持续运行)

病毒的自我保护#
调用了6个定时器:

| 定时器 | 核心功能 (Function) | 目标行为 |
|---|---|---|
| Timer 1 | 核心持久化 + 自保定时器 | 关闭杀软、添加自启动项、禁用隐藏文件显示 |
| Timer 2/3/6 | 远程分发 | 从 C2 服务器下载更新变种或盗号木马 |
| Timer 4 | 反杀软 | 强制结束安全软件进程并禁止其服务加载 |
| Timer 5 | 网络测试 | 打开正常网络 测试网络或混淆 |
多维感染机制#

全盘感染#
病毒多线程遍历磁盘,感染 .exe 文件并试图在各个文件夹下释放并隐藏Desktop_.ini留下感染痕迹。

- 判断是否有ini这个文件,不存在则创建并写入内容
- 读取desktop.ini到内存,与当前时间对比更新日期

Crt_ScanDisk 是病毒的递归扫描函数:扫描完当前目录后,自动进入子目录继续扫描,实现 “全盘遍历”。
![]()
核心破坏行为 1:删除 GHO 备份文件#

GHO 是 Ghost 备份文件(用户 / 管理员用来恢复系统的核心文件),病毒删除 GHO 文件的目的是破坏系统恢复能力—— 即使用户发现中毒,也无法通过 Ghost 恢复干净系统,只能重装,提升病毒的驻留时间。
核心破坏行为 2:定向感染 / 篡改文件(按后缀分类)#
病毒会筛选小于 10MB(0xA00000 字节) 的文件(避免感染大文件导致卡顿 / 被发现),然后按后缀分类处理:
![]()
第一类:感染可执行文件
- EXE文件 → 调用Crt_InfectExe感染
- SCR(屏幕保护)/PIF(快捷方式)/COM(DOS可执行)→ 同样调用Crt_InfectExe感染

第二类:篡改网页文件
- HTM/HTML文件 → 调用sub_4079CC篡改
- ASP/PHP/JSP/ASPX(动态网页)→ 同样调用sub_4079CC篡改

清理痕迹 + 结束扫描

Autorun 自动运行 + 全磁盘持久化核心模块#
Crt_CreateThread核心感染线程,负责递归遍历磁盘并植入代码。

Crt_SetTimer驱动器监控任务,检测 U 盘并生成 autorun.inf

TimerFunc#
第一步:遍历所有磁盘(本地 + 移动介质)

第二步:拼接病毒文件路径(setup.exe + autorun.inf)

第三步:处理 setup.exe(病毒本体)
- 校验:sub_40BD34 是病毒的文件完整性校验函数(比如对比 MD5 / 特征码),防止 setup.exe 被用户删除 / 替换后失去传播能力。
- 重建:校验失败则删除篡改文件,重新复制病毒本体 —— 保证每个磁盘的 setup.exe 都是完整的病毒程序。
- 传播:U 盘 / 移动介质插入后,病毒会自动复制自身到其根目录,实现 “插 U 盘即中毒”。

第四步:创建 / 篡改 autorun.inf(实现自动运行)

第五步:隐藏病毒文件(提升隐蔽性)
用户在资源管理器中看不到 setup.exe 和 autorun.inf(默认不显示系统 / 隐藏文件),即使打开 U 盘,也发现不了病毒文件,大幅降低被删除的概率。

局域网横向传播核心模块#
利用 Windows SMB 协议的 139/445 端口(局域网共享核心端口),实现 “同网段主机横向扩散”,是勒索病毒 / 蠕虫病毒的典型传播手段。
139 端口失败自动尝试 445 端口,适配不同版本 Windows 主机,最大化传播成功率。
识别横向传播函数:先靠硬编码特征(139/445/\IP\C$)快速锁定候选,再靠关键 API(NetRemoteTOD/NetScheduleJobAdd)确认,最后靠逻辑流程验证。

外联行为监控
