熊猫烧香病毒逆向分析:3个核心模块与IDA Pro 6.8静态调试实战

熊猫烧香病毒逆向工程深度解析: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处开始执行,首先会进行双重自校验:

  1. 密钥验证阶段
    • 使用"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
  1. 内存分配策略
    • 调用LocalAlloc分配0xFF8字节空间
    • 使用InitializeCriticalSection创建临界区
    • 通过EnterCriticalSection实现线程同步

关键函数调用关系图:

start() ├── DecodeString("xboy") → 验证第一层密钥 ├── CMPString() → 比对解密结果 ├── DecodeString("whboy") → 验证第二层密钥 └── MainFunction() → 进入核心逻辑

逆向过程中发现三个关键数据区:

  1. 0x0040CC40 - 作者标识字符串区
  2. 0x0040D030 - API函数跳转表
  3. 0x0040E7D4 - 全局配置数据指针

核心功能模块逆向解析

模块一:文件感染与传播机制

病毒采用多线程方式实现文件感染,主要技术特点包括:

  1. 文件类型识别矩阵
文件类型处理方式特征标记
.exe/.scr二进制替换WhBoy前缀
.htm/.asp追加iframe> 标签
.gho直接删除无备份
其他可执行文件部分感染大小校验
  1. 感染流程伪代码
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); }
  1. 特别感染技巧
    • 利用SetFileAttributes隐藏感染痕迹
    • 通过进程快照检查目标文件是否运行中
    • 感染后保留原文件时间戳(避免引起怀疑)

模块二:持久化与自我保护

病毒通过多种技术实现长期驻留,主要手段包括:

  1. 注册表操作清单

    • HKCU\Software\Microsoft\Windows\CurrentVersion\Run
      • 键值:svcshare → %System%\drivers\spoclsv.exe
    • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL
      • 修改CheckedValue为0(隐藏文件不可见)
  2. 定时器触发机制

    • Timer1(1秒间隔):杀软进程检测
    • Timer2(6秒间隔):服务项删除
    • Timer3(10秒间隔):共享文件夹清理
    • Timer4(20分钟间隔):C2通信尝试
  3. 反分析技巧

    • 调试器检测(IsDebuggerPresent)
    • 虚拟机检测(通过特定指令如CPUID)
    • 关键API动态获取(GetProcAddress)

模块三:网络传播与横向移动

病毒的网络模块采用分层架构设计:

  1. 局域网扫描策略

    • 端口扫描:139/445(SMB服务)
    • 弱口令字典:admin/123456/root等
    • IPC$共享利用
  2. 传播流程图

开始 ↓ 获取本地IP段(GetAdaptersInfo) ↓ 生成目标IP列表(192.168.0.1-254) ↓ for each IP { 尝试连接445端口 → 成功:尝试弱口令爆破 → 成功:复制病毒文件 → 失败:跳过 } ↓ 定时重复执行(每30分钟)
  1. C2通信协议
    • HTTP协议明文通信
    • 固定URL:http://wangma.9966.org/down.txt
    • 响应内容直接作为Shellcode执行

静态分析实战技巧与IDA高级应用

函数识别与重命名策略

针对Delphi程序的特殊处理:

  1. 关键函数特征识别

    • 参数传递:eax/edx/ecx寄存器优先
    • 调用约定:register方式
    • 局部变量:ebp相对偏移访问
  2. 推荐命名规范

    • 解密函数:Prefix_Decode[类型]
    • 比较函数:Prefix_Cmp[类型]
    • 内存操作:Prefix_Mem[操作]

示例:

// 原始函数 sub_403C98(int a1, int a2) // 优化后 StringAllocAndCopy(char *src, char *dst)

交叉引用分析与数据流追踪

  1. 关键API调用链

    • 文件操作:CreateFileA → WriteFile → CloseHandle
    • 注册表:RegOpenKeyEx → RegSetValueEx → RegCloseKey
    • 进程:CreateToolhelp32Snapshot → Process32First
  2. 数据流追踪方法

    • 在IDA中使用"Jump to xref"功能
    • 对关键内存地址添加书签
    • 使用IDAPython脚本自动化标记
# IDAPython数据流追踪示例 for ref in XrefsTo(0x0040D030, 0): print(f"调用来自: 0x{ref.frm:X}") print(GetDisasm(ref.frm))

伪代码重构与注释规范

优秀逆向注释应包含:

  1. 函数功能描述
  2. 参数/返回值说明
  3. 关键算法解释
  4. 与其他模块的关联

示例伪代码:

/* 功能:感染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; }

防御方案设计与分析启示

病毒特征提取方法

  1. 静态特征

    • 文件哈希:MD5 512301C535C88255C9A252FDF70B7A03
    • 字符串特征:"WhBoy"、"spoclsv.exe"
    • 资源段图标:熊猫烧香图案
  2. 行为特征

    • 注册表键值修改模式
    • 特定目录文件创建行为
    • 网络通信特征

现代安全防护启示

  1. 防御策略对比
传统防御现代改进方案
特征码扫描行为沙箱分析
静态规则匹配机器学习检测
单点防护终端EDR联动
  1. 代码安全启示
    • 输入验证强化
    • 最小权限原则
    • 进程行为监控
    • 网络通信加密

逆向工程经验总结

  1. Delphi程序分析要点

    • 注意寄存器传参特性
    • 识别RTL(运行时库)函数
    • 关注TApplication等框架结构
  2. 多线程病毒分析技巧

    • 使用IDA的线程标记功能
    • 重点分析同步原语(临界区、事件等)
    • 对定时器回调单独建立分析窗口
  3. 高效逆向工作流

    • 建立标准化注释体系
    • 使用IDAPython自动化重复工作
    • 保持分析笔记与代码同步