熊猫烧香_汇编级_超详细分析
1.样本概况
1.1 应用程序信息
文件: C:\Windows\System32\drivers\spo0lsv.exe
大小: 30001 bytes
修改时间: 2007年1月17日, 12:18:40
MD5: 512301C535C88255C9A252FDF70B7A03
SHA1: CA3A1070CFF311C0BA40AB60A8FE3266CFEFE870
CRC32: E334747C
简单功能介绍:
自启动
删除gho文件
全盘感染指定类型文件
局域网传播
从网络下载其他恶意文件执行
删除安全管理软件服务、启动项
其他
说明: 该样本是熊猫烧香的一个变种spo0lsv.exe,高危险级别
1.2 分析环境及工具
系统环境:windows 7 32bit
工具:火绒剑、PcHunter、IDA、OllyDebug
1.3 分析目标
使用火绒剑进行行为分析,结果如下:
文件操作
分析:在各敏感路径创建了spo0lsv.exe、setup.exe、autorun.inf、Desktop_.ini等文件并写入了内容。其作用暂时不明,待后面具体分析。
注册表操作
分析:注册表操作很多,能只管看出的是在启动项下创建了新的键值,以及设置了隐藏属性。
网络操作
分析:网络操作也有很多,能看到尝试连接了很多当前局域网内的其他主机,并连接了一些网站
进程操作
分析:主要操作重复关闭开启了spo0lsv.exe
执行监控
分析:执行了很多次命令,包含删除C盘网络共享等
其他行为
分析:提取了文件于C:Windows\System32\drivers\spo0lsv.exe,在不同文件夹创建了很多Desktop_.ini文件,等等。
2.具体分析过程
2.1 主函数
分析:前面使用了“xboy”、“whboy”来进行解密,并进行比对,比对成功就开始逐个调用sub_40819c、sub_40d18c、sub_40d088三个函数,接下来我们详细分析这三个函数
2.2 分析sub_40819c
2.2.1 检测Desktop_.ini文件
分析(序号对应图片里的标号):
获取当前文件的绝对路径(包含当前文件名)
根据当前获得的文件路径(包含当前文件名)文件名称提取文件所在目录
拼接文件路径:当前文件所在目录 + “Desktop_.ini”
检测拼接的文件是否存在
2.2.2 存在Desktop_.ini文件则删除
分析:(前面还有文件属性的设置等小细节)
再次组合目标文件Desktop_.ini的路径
删除文件
2.2.3 读取当前文件检测是否是被感染者
分析:
读取指定文件(当前文件)
获取长度
判断文件长度是否小于等于0
判断末尾是否是‘\0’即空字符
如果不是空字符,就往前拷贝一个字节(ebx是下标)
判断用来存储末尾字符串的是否为空,标识是病毒还是被感染者
注:
读取文件内容的函数分析如图 2-5所示:
2.2.4 若当前文件是病毒
分为两种情况:
情况1:当前是非System32\drivers中的病毒,分析如下图
分析:
打开spo0lsv.exe句柄并结束进程
组合system32路径 + “drivers\” + “spo0lsv.exe”作为新文件路径
调用CopyFileA()复制当前文件到新拼接的文件名中
执行新拷贝的system32\drivers\spo0lsv.exe文件,并结束自身进程,非system32\drivers文件夹下的spo0lsv.exe到此执行完毕,程序结束
注:
终止进程的代码分析如图 2-7所示:
情况2:当前是System32\drivers 中的病毒
不做其他操作,当前部分结束
2.2.5 若当前文件是被感染者
删除末尾标识字符串
提取感染标识字符串中的信息
分析:
删除“whboy”字符串,提取带有双.exe后缀的原文件名称
提取原文件大小
提取并创建宿主PE文件
分析:
以Rewrite()创建并打开一个新文件,或覆盖已存在的文件
根据长度信息,从已读数据中提取原PE文件的数据
刷新写入缓冲区到外部文件,确保前面的操作写入成功
创建并执行批处理文件
批处理文件,创建在User\AppData\Local\Temp文件夹中,名称是一个随机数+“$$.bat”
批处理程序样本如下:
分析:
循环等待删除成功,因为程序正在运行,所以一开始删除失败;将新创建的程序重命名为单.exe后缀;最后删除bat文件自生。
遍历进程,查看spo0lsv.exe是否在运行
分析:
创建进程快照
获取第一个进程信息
比较进程名时候是“spo0lsv.exe”
获取下一个进程信息
注:
当遍历到“spo0lsv.exe”的时候就停止遍历,并返回状态码1,代表正在运行。
如果没有运行就删除然后重新创建并写入新病毒程序
分析:
设置源文件为普通文件
拼接文件路径
删除System32\drivers\spo0lsv.exe文件
分析:
提取病毒文件内容,前面还有几句,由于屏幕限制没有截完全,有兴趣的可以根据地址查找
拼接文件路径System32\drivers\spo0lsv.exe
将本文件提取出的病毒块写入System32\drivers\spo0lsv.exe文件,并执行
2.3 分析sub_40d18c
点击进入该函数后又出现了3个函数:sub_40A5B0、sub_40C374、sub_40BACC,接下来分别对其进行详细的分析。
2.3.1 分析 sub_40A5B0 感染
一个开启线程的函数,线程回调函数是sub_40A48c。主要作用是创建、维护每个文件夹下面的Desktop.ini文件以及感染指定类型的文件,以及删除gho文件。
点击进入该线程回调函数展开分析:
遍历盘符,存储存在的盘符
分析:
使用一个个字母 + “:\”组合成根路径使用GetDriveTypeA()获取盘的类型
将固定硬盘、网络盘的盘符存储起来
控制是26次循环,对应26个字母
排除A、B盘符,对其他盘符拼接“:\”作为参数,调用sub_0x409348,进行全盘遍历感染
对sub_0x409348进行分析:
a) 进行文件遍历,并判断文件是否是文件夹以及文件名是否是’.’
分析:
获取第一个文件
判断文件的类型是否是文件夹以及文件名是否是“.”
b) 如果是文件夹
首先排除系统相关的文件夹,比如下图中的WINDOWS、WINNT、SYSTEM32等等文件夹。
然后检查当前文件夹是否Desktop_.ini文件
如果已经存在Desktop_.ini文件就检查内容,是否是最新的,如果不是就更新。
如果不存在Desktop_.ini文件就创建并写入当前的日期:
分析:
组合文件全路径(文件目录+文件名)
获取本地时间,并准换成Long型
再次拼接路径
把文件路径和日期作为参数传入ShowSQLWindow()函数,创建文件并写入内容(日期)
注:
ShowSQLWindow()其显示是一个库函数,但是查不到,就点进去分析了一下,是使用CreateFile()和WriteFile()两个函数创建文件和写入文件。
c) 如果不是文件夹
- 判断是否是gho文件,如果是就删除
- 判断是否是setup.exe\NTDETECT.COM文件,如果是就跳过
由于刚才这几部很简单就不用贴代码赘述了,接下来是感染文件,感染的类型有exe、rsc、htm、html、asp、aspx、php等,我们详细分析其中的感染EXE文件 sub_407F00:
First. 遍历进程,观察当前exe是否在运行
Second. 排除自身
Third. 读取文件内容
Fourth. 观察特诊“whboy”确定是否被感染
Fifth. 如果未被感染,开始感染序幕(把自己拷贝一份过去)
Sixth. 追加原PE + 感染标识字符串
图 2 - 25
分析:
生成标识字符串”whboy”+程序名.exe+\2+长度+\1
以追加的方式打开文件
把源文件内容追加到病毒文件末尾
把感染标识字符串吹加到文件末尾
关闭文件
d) 其他文件的感染就不一一赘述了
2.3.2 分析 sub_40C374 维护
点击进去可以发现这是一个定时器,定时器回调函数sub_40BE7C,然后再深入这个定时器函数里面,你会发现逻辑非常简单,就是创建\维护setup.exe、autorun.inf两个文件。
详细分析如下:
遍历盘符(前面分析过此处略过)
排除A、B盘循环检测每个盘下是否有setup.exe
Setup.exe不存在就创建,如果存在就检查是否被修改,若被修改就删除当前setup.exe创建新的。
这里分析较为复杂的已存在情况:
分析:
删除已存在文件
拼接新文件名
CopyFileA()复制当前文件到新文件
判断autorun.inf存在与否,存在或不存在的情况和setup.exe的处理方法一致。
分析:
删除已存在的autorun.inf
创建文件autorun.inf
写入autorun.inf脚本内容
关闭文件
注:
这里的autorun.inf脚本内容如下,功能就是启动setup.exe病毒
2.3.3 分析 sub_40BACC 局域网传播
细心地点发现这个函数传入了一个参数0Ah,是用来标识将要创建线程个数的,这个函数功能是创建10个子线程来尝试使用弱口令连接当前局域网中的其他主机。
里面首先线程回调函数是sub_40BA8C,点进去是loc_40B864,接下来我们详细分析loc_40B864函数。
首先循环获取当前网络状态
分析:
调用InternetGetConnectedState()函数获取当前的网络是否有连接
生成随机当前网络IP
转存失败重新上传取消
分析:
这里的sub_40B520(我取得别名randomLocAreaNetIP)值得重点分析,主要功能是根据当前的IP生成一个当前网络中的随机IP,分析如下图:
a) 首先调用了sub_40A734,主要功能是调用GetHostName()获取当前主机名,再调用GetHostByName()根据主机名获取IP
分析:
调用WSADtartup()初始化网络环境
调用gethostname()获取主机名,再调用gethostbyname()根据前面的主机名获取IP地址
调用inet_ntoa()把网络序二进制IP转换成点分十进制的IP地址
清理关闭网络环境
b) 提取IP的每个部分
分析:
获取IP的总长度
根据 ‘.’的位置,提取IP的第一部分,并转换成LONG整型,通过ebx+4以供后面调用
注:
这里我只描述了IP的第一个部分的提取,第二、三部分的提取都一样就不一一赘述了。
c) 随机生成主机ID号
分析;
生成一个0~255的随机数作为主机ID
d) 组合一个当前局域网的IP
分析:
结合的IP个前三部分加上后面随机生成的主机ID,组合拼装出新的IP
尝试连接随机IP的139端口、445端口
分析:
连接139端口,connect()返回值0代表成功。
分析:
连接445端口,connect()返回0代表成功。
a) 如果端口连接成功,调用sub_40B40c,这是局域网传播的核心部分,分析sub_40B40c如下
i. 获取系统版本信息
分析:
调用GetVersionExA()函数获取系统信息。DetectIsWin32_是重命名的函数名,原是sub_40A7F4里面就是调用GetVersionExA()很简单,就是判断是否是win32平台,是就返回-1,不是就返回0。
ii. 尝试进行弱口令连接
分析:
使用弱口令进行网络资源连接
连接成功调用sub_40A928,复制当前病毒文件到网络共享文件夹
关闭网络资源连接
分析sub_40A928
共享文件夹下复制病毒名为GameSetup.exe
分析:
生成当前共享的是否是目录
如果是目录则拼接该目录下GameSetup.exe的全路径
拷贝病毒数据自身于该文件夹下的GameSetup.exe
如果有admin$共享就遍历感染全盘
分析:
判断是否有admin$ 共享
拼接网络资源路径
开始全盘遍历感染(此函数我们前面分析过,这里就略过了)
2.4 分析sub_40d088
6个定时器,主要功能是使用注册表启动项、隐藏属性、QQ代理下载恶意程序并运行、连接网站下载资源等,挨个分析定时器回调函数sub_40CEE4、sub_40D040、sub_40D048、sub_407430、sub_40CC4C、sub_40C728。
2.4.1 分析sub_40CEE4 提权、关闭窗口、关闭进程、自启动、隐藏属性
提权(具体代码在sub_406E2C中的线程回调函数sub_4061B8中的sub_406108)
分析:
获取当前的权限
修改(提升)当前的权限
遍历窗口,关闭防火墙、进程、VirusScan等窗口
分析:
遍历窗口
获取窗口名
比对是否是目标窗口名
如果是目标窗口名就发送12h –WM_QUIT消息然窗口退出
注:
比对了很多窗口,这里只列出了防火墙,其他都一样就不一一赘述了。
关闭任务栏窗口
分析:
通过类名找到任务窗口的窗口
关闭窗口名为” pjf(ustc)”的窗口
注:
可以发现还模仿了很多键盘事件来关闭
关闭进程
分析:
通过前面分析过的一个函数,打开很多指定进程名的句柄并调用TerminateProcess()来结束进程。
添加启动项、指定隐藏属性
分析:
直接调用两个简单的注册表操作函数,修改了注册表添加了病毒为自启动,隐藏属性打开。
2.4.2 分析 sub_40D040 QQ代理下载恶意程序并运行
分析sub_40CC34
这还是一个线程函数,回调函数为sub_40C9B0,分析sub_40C9B0函数
从指定网页上下载文件中的链接
分析:
解码指定的字符串得出相关链接
使用QQ代理下载该链接中的内容并返回到eax内指针指向的缓冲区
注:
使用QQ代理的函数分析:
设置QQ为代理程序
通过代理下载、并将数据返回
分析:
创建下载句柄
读取刚才下载句柄中的数据
将数据通过eax返回
下载链接中的文件并执行
分析:
获取Windows目录的路径
获取链接中的文件名称
下载文件
拷贝下载的数据
拼接文件路径并执行
2.4.3 分析 sub_40D048 关闭C盘共享
该函数有开启了两个线程,线程回调函数分别是sub_40CC34、sub_40CDEC,sub_40CC34的主要功能是使用QQ代理下载一批链接,再这些链接指向的恶意软件到Windows文件夹下面运行起来。
分析 sub_40CC34 和前面的QQ代理下载一致就不再分析了略过
分析 sub_40CDEC 关闭C盘网络共享
分析:
遍历盘符
a) "cmd.exe /c net share 盘符$ /del /y"
b) "cmd.exe /c net share admin$ /del /y" 删除网络共享
2.4.4 分析 sub_407430 关闭安全相关
开启线程关闭安全相关的服务,线程回调函数是sub_406E44。
分析 sub_406E44函数:
分析:
很直白的调用函数关闭安全相关的服务、删除注册表键值等
2.4.5 分析 sub_40CC4C 使用QQ代理下载指定链接数据
前面分析过,此处略过
2.4.6 分析 sub_40C728 使用QQ代理下载恶意程序并执行
前面分析过,此处略过
3.总结
3.1 分析结果总览
3.2 本分析感悟总结
通过这次分析,让我第一次领略了一个完整病毒的所有构成,越分析越感觉到舒服,因为一层层的解开病毒的神秘面纱,都想写一个熊猫烧香变种的冲动。感谢给了充足的时间,给我完整的分析。
熊猫烧香_汇编级_超详细分析相关推荐
- 交流信号采集电路设计(超详细分析)
交流信号采集电路设计(超详细分析) 背景:我当时也有疑问,单片机ADC不是只能采集直流信号么,那么有哪些办法可以转换后给单片机.现在弄懂了些皮毛,和大家分享. 一.交流变压取样 对于AC220V,首先 ...
- stm32怎么加载字库_收藏 | STM32单片机超详细学习汇总资料(二)
点击"蓝字"关注我们 3110月 收藏 | STM32单片机超详细学习汇总资料(一) ◆41.DMA仲裁器分为软件和硬件两种.软件部分分为4个等级,分别是很高优先级.高优先级.中等 ...
- 从购买服务器到网站搭建成功保姆级教程~超详细
??从购买服务器到网站搭建成功保姆级教程~真的超详细,各位看官细品 ??前言 ??预备知识 ??什么是云服务器? ??什么是域名? ??什么是SSL证书? ??服务器选配 ??阿里云[官网链接](ht ...
- FLV文件(H264 + AAC)格式超详细分析
最近自己动手将H264视频流和AAC音频流合成flv文件,但是没有采用开源的ffmpeg的api来处理音视频流.方法就是模仿ffmpeg中libavformat/flvenc.c 文件写代码来完成音视 ...
- sob攻略超详细攻略_北海涠洲岛旅游超详细住宿攻略!!!
涠洲岛虽然不大,但是上面的民宿和酒店却星罗棋布,如何挑选最适合自己行程的住宿是旅客们计划行程中最耗时耗力的一部分,这篇攻略详细的分析了涠洲岛各个位置民宿和酒店的优势与劣势,是准备出行涠洲岛的朋友们必看 ...
- jprofiler分析dump文件_内存溢出+CPU占用过高:问题排查+解决方案+复盘(超详细分析教程)...
点击上方 "Java指南者"关注, 星标或置顶一起成长 免费送 1024GB 精品学习资源 来源:https://zhanghan.blog.csdn.net/article/de ...
- tcp分包传图片 如何还原_技术控丨超详细解析TCP重传机制
作者:Zhang_Jiawen : 来自:Dell技术社区 TCP 的主要任务是很简单:打包和发送数据.TCP 与其他协议的不同之处在于使用滑动窗口来管理基本数据收发过程,同时确保数据流的有效及可靠传 ...
- java游戏魔塔20层_▓▓◇◆20层魔塔超详细攻略◇◆ ▓▓
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 上38层杀鬼战士.两个战士和两个骑士取黄钥匙3 上39层杀战士.骑士和两个鬼战士取红宝石+4=241,不需要向商人花钱2000买蓝钥匙3并对话(塔内有个 ...
- 数据结构笔记五_树(c++超详细版)
目录 树 1.树的概念 1.1 树的逻辑结构和基本运算 1.1.1 树的定义 1.1.2 树的常见基本操作 1.2 树的物理结构 2.二叉树 2.1 二叉树的概念 2.1.1 二叉树的定义 2.1.2 ...
最新文章
- adchos 文本混淆工具
- win10+VS2013+opencv2.4.11的安装和配置
- Android Lifecycle源码解析(一)
- mysql中sum (if)_mysql 中sum (if())
- 危机管理计划书模板_免费领!40套商业计划书PPT模板+10份知名公司商业计划书真实案例范文...
- vivadoRAM中初始化文件coe如何快速生成
- 深度学习福利入门到精通第二讲——AlexNet模型
- 判断一个单链表是否有环及环的链接点
- WinISO5.3的注册码吧
- 电信光纤猫虚拟服务器设置方法,电信光纤猫与无线路由器连接的设置方法
- 水星MW300R V6(MT7620)CPU引脚图
- ArcGIS中多段线(MultiPart Polyline)的坐标提取及重绘
- 塑胶模具注射分类有哪大几类?
- 中科院python编程培训班
- Matlab求单边谱,关于实信号的双边谱和单边谱
- Intelsat-29e卫星解体全损,威胁地球静止轨道安全
- Google GMS 送测的三种方式
- 简单易懂的10折交叉法
- java如何绑核_pod绑核规则
- mimo 雷达成像 matlab,MIMO雷达成像算法研究
热门文章
- OpenG - 三次B样条曲线
- 如何查询域名是否被qq拦截?怎么查询域名QQ安全状态?
- 软件开发应届生求职经验(其他专业可参考)
- Ambari2.7.3-HDP3.0.1-Ranger版本1.1.0升级2.0.0
- 50份高阶PPT模板限时领取!让甲方爸爸轻松pick你的方案
- HTML 5 版的 YouTube 支持变速视频播放
- Python装逼指南——五行代码实现批量抠图
- 如何优化selenium webdriver的执行速度
- 字符串的压缩(c语言描述)
- 百度地图 - 点聚合方式批量渲染坐标点