一、概述

作者:longaotian

时间:2022-4-27

样本来源:www.52pojie.cn

下载:https://1drv.ms/u/s!ArU76A-w0YNK7H9hL83nL87-4gtn?e=DFq7bf

MD5:512301c535c88255c9a252fdf70b7a03

本文档讲述关于熊猫烧香病毒的行为、技术细节

二、正文

通过之前的分析发现有壳,开始动态分析,进入主模块发现是直接popad的,无法通过esp定律,只能通过单步了

代码通过拷贝数据再进行解密,拿到了地址可以进行调用LoadLibraryA,通过栈传递获得kernel32.dll的模块句柄

解密

后面程序通过LoadLibraryA获取使用的API地址再进行修复ITA

修复ITA

发现程序有连个分支分别下断点看谁先来

分支

发现里面的jmp先来,过去后发现里面的数据发生了变化重新分析后定位到OEP

OEP

直接DUMP出来准备开始静态分析,用OD再次打开发现退出时触发了异常,再进去看看发现API有问题

问题

搞了搞换了换一种重建输入表方式就行了(应该没问题吧😀)

修复后的

不放行用ImportREC看一下,果然没识别出来

结果

还得自己再看看,手动修复

修复后的

现在开始分析

首先发现了大量的初始化操作和字符串的操作

初始化操作

这里做了两个比较,比较失败就退出执行了

比较

下面只有三个函数和一个消息处理

剩下的

那就是这三个函数干活了,不知道上面判断了啥,动态调下

判断
IDA中的表现

所以sub_405250就是对字符串进行了处理,处理结果在做校验,校验结果失败的话就推出程序

剩下就是分析最后的三个干活的函数了

首先第一个函数

@System@ParamStr : 获取程序执行路径和文件名

获取到的文件路径和文件名

@System@@LStrCat$qqrv System::linkproc LStrCat(void) :字符串拼接

处理后的字符串
书接上文

动态调试后确认如果没有ini文件就从下面的分支走

猜测sub_407650失败,调了后好像是对字符做了啥处理

总结来说这个函数就是判断是否有运行着的病毒有就给他结束掉再拷贝自身到系统目录中并运行,

写的是systen32其实生成和跑的时候都在wow64里,为系统为了区分32位和64位,所以访问system32时会将路径重定向到syswow64。

运行的函数

第一个函数就结束了,没干啥事,所以还有另外的分支

干活的

里面生成了一个bat并运行了就是删除自身

还有一个分支得跑起来,所以就用OD来查看

跟了会没啥营养直接到下一个函数sub_40D18C

里面有三个函数

第一个函数创建线程

线程里有营养的是sub_409348篇幅原因说明这个函数在操作字符串好像是往ini文件里写,好多的重复操作有营养的是sub_407F00

sub_407F00

找了半天原来是没识别出来

此处是将文件读到内存中修改属性再复制文件到路径并添加一点数据 “WhBoy + 原文件名 + .exe + 02 + 文件大小 + 01”

第一次

现在到第二个函数

第二个

是个设置定时器的

里面的

回调是检查是否有setup.exe和ini文件没有则创建

接下来第三个函数

第三个

这个函数创建线程并进行网络连接

剩下就是最后一个主体函数了

主体

由于里面函数太对了,简单说下

所有操作
打开网址
下载并运行

三、备注

这个病毒的代码是别的编译器和语言写的,代码识别的有点乱七八糟,总的来说提取特征就是文件最后为字符串"WhBoy + 原文件名 + .exe + 02 + 文件大小 + 01"。


I am very tired