[系统安全] 十四.熊猫烧香病毒IDA和OD逆向分析--病毒释放过程(下)

网友投稿 698 2022-05-30

IDA和OD作为逆向分析的“倚天剑和“屠龙刀”,学好它们的基本用法至关重要。本文重点分析熊猫烧香病毒的功能函数,大家掌握这些技巧后才能更好地分析更多的代码。同时,本文部分实验参考姜晔老师的视频分析,真的非常佩服和值得去学习的一位老师。技术路上哪有享乐,为了提升安全能力,别抱怨,干就对了~

文章目录

一.实验背景

二.loc_408171位置分析

三.sub_403F8C子函数

四.sub_4060D4子函数

五.CopyFile和WinExe子函数

六.分析spoclsv.exe

七.总结

逆向分析:https://github.com/eastmountyxz/SystemSecurity-ReverseAnalysis

网络安全:https://github.com/eastmountyxz/NetworkSecuritySelf-study

前文分析:

[系统安全] 一.什么是逆向分析、逆向分析基础及经典扫雷游戏逆向

[系统安全] 二.如何学好逆向分析及吕布传游戏逆向案例

[系统安全] 三.IDA Pro反汇编工具初识及逆向工程解密实战

[系统安全] 四.OllyDbg动态分析工具基础用法及Crakeme逆向破解

[系统安全] 五.OllyDbg和Cheat Engine工具逆向分析植物大战僵尸游戏

[系统安全] 六.逆向分析之条件语句和循环语句源码还原及流程控制

[系统安全] 七.逆向分析之PE病毒原理、C++实现文件加解密及OllyDbg逆向

[系统安全] 八.Windows漏洞利用之CVE-2019-0708复现及防御详解

[系统安全] 九.Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御

[系统安全] 十.Windows漏洞利用之SMBv3服务远程代码执行漏洞(CVE-2020-0796)及防御详解

[系统安全] 十一.那些年的熊猫烧香及PE病毒行为机理分析

[系统安全] 十二.熊猫烧香病毒IDA和OD逆向分析(上)病毒初始化

[系统安全] 十三.熊猫烧香病毒IDA和OD逆向分析(中)病毒释放机理

[系统安全] 十四.熊猫烧香病毒IDA和OD逆向分析--病毒释放过程(下)

声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。该样本不会分享给大家,分析工具会分享。(参考文献见后)

一.实验背景

对病毒进行逆向分析,可以彻底弄清楚病毒的行为,从而采取更有效的针对手段。为了节省篇幅,在这里我不打算将“熊猫烧香”进行彻底的分析,只会讲解一些比较重要的部分,大家只要掌握了这些思想,那么就可以处理很多的恶意程序了。

这里主要使用的工具包括:

PEiD:病毒加壳、脱壳基础性分析

IDA Pro:静态分析

OllyDbg:动态分析

实验文件:

setup.exe:熊猫烧香病毒

基本流程:

利用查壳工具检查病毒是否带壳

利用OD动态分析病毒

利用IDA静态分析病毒

注意:由于OD工具会将程序运行起来,所以我们在进行恶意代码分析时尽量在搭建好的虚拟机中操作。如果病毒传播性较强如WannaCry,建议断开网络和断开共享分析。

实验思路:

1.利用OD分析每一个CALL的功能

2.使用IDA Pro在宏观上把握程序的功能并及时对函数进行重命名操作

上篇主要分析sub_408024核心函数:

0x0040804D call sub_40277C

– 重命名为:GetFilePathAndName

– 功能:获取文件的完整路径及文件名称

0x0040805E call sub_405684

– 重命名为:GetFilePath

– 功能:获取去除病毒文件名后的路径

– IDA位置:0x0040805E

– 技巧:循环将病毒的完整路径从后往前检索,直到遇到斜杠(\)、反斜杠(/)、冒号(:)结束,从而提取病毒的路径或病毒的文件名(如setup.exe)

0x0040806E call sub_403ED4

– 重命名:StringCat

– 功能:拼接字符串,包含“Desktop_.ini”后缀

0x00408079 call sub_4057A4

– CheckFileExist

– 功能:检测文件“Desktop_.ini”是否存在

0x00408105 call sub_4040CC

– CheckPathIsExist

– 功能:检测文件的路径是否存在

0x0040812E call sub_403C44

– SetZeroFlag

– 功能:设置零标志位,将其设置为0

0x00408136 call sub_403ECC

– GetFileLen

– 功能:获取PE文件的长度

CMP语句就是验证PE文件最后一个数据是否为零

二.loc_408171位置分析

这次我们会继续跟着姜晔老师分析,接着上一篇博客讲解。同时这次分析会和之前有一些不一样的情况。

如果我们按照流程顺序一步步往下分析,确实能够弄清楚病毒的行为,但某些分支中的重要代码是执行不到的,所以我们需要采取一些策略,走完每个分支,彻底分析出病毒的行为。这也是逆向分析中非常重要的方法。

第一步,我们打开IDA Pro和OD载入病毒样本。

现在程序执行到了loc_408171位置处,我们让OD也跳转到对应的位置。

右键转到->表达式,输入408171。

按下F2增加断点,再按F9直接执行过来。

思考:OD重新打开断点为什么还保留着?

在OllyDbg中,它会把所有与程序后模块相关的信息保存在单独的文件中,以便在模块重新加载时继续使用。这些信息包括标签、注释、断点、监视、分析数据、条件等。

第二步,在OD中分析0x00408171位置。

首先是一个CMP比较操作(Compare),接着查看EBP-0x8的内容。

0x00408171 cmp dword ptr ss:[ebp-0x8], 0x0

我们可以看到它的内容是0,它的比较对象也是0。

第三步,分析JNZ跳转指令。

接着按下F8,可以看到比较后,ZF变成了1。由于二者都为0,所以在比较过后ZF=1,那么接下来的跳转并不执行,继续执行下面的内容。

JNZ 0x004082F0

JNZ(jump if not zero)结果不为零则转移,即z=1时跳转,但是z=1时,zf=0。故JNZ跳转的条件也是零标志位zf=0,由于指令执行的结果为0,此时的ZF值为1,故不执行跳转

CF(进位标志)=1:算术操作最高位产生了进位或借位,=0 最高位无进位或借位 ;

PF(奇偶标志)=1:数据最低8位中1的个数为偶数, =0 数据最低8位中1的个数为奇数;

AF(辅助进位标志)=1:D3→D4位产生了进位或借位, =0 D3→D4位无进位或借位;

ZF(零标志)=1:操作结果为0, =0 结果不为0;

SF(符号标志)=1:结果最高位为1,=0 结果最高位为0;

[系统安全] 十四.熊猫烧香病毒IDA和OD逆向分析--病毒释放过程(下)

OF(溢出标志)=1:此次运算发生了溢出, =0 无溢出。

第四步,分析函数sub_40532C。

在IDA中继续查看代码内容。

首先上一篇博客已经分析并重命名了sub_40277C函数的功能,它是获取文件路径和名称(GetFilePathAndName)。

C:\Users\14551\Desktop\setup.exe

接下来将EDP-0x3D4赋值给EDX,F8执行并在数据窗口中跟随,发现它此时还是空值。

按F8执行到sub_40532C函数,在IDA中我们双击进去,查看该函数。发现该函数的主要功能是API函数CharUpperBuffA。

CharUpperBuffA函数作用:把缓冲区中指定数目的字符转换成大写字母

总结,重命名及对应功能如下:

sub_40532C -> CharToUpper

功能:缓冲区中指定数目的字符转换成大写字母

PS:IDA中按ESC键返回上一层再重命名。

第五步,分析函数sub_4054BC。

在IDA中双击查看该函数的内容。可以发现它主要是调用了GetSystemDirectory函数,从而获取系统的路径。

总结,重命名及对应功能如下:

sub_4054BC -> GetSystemDir

功能:获取系统路径

三.sub_403F8C子函数

由于之前直接调用系统API函数,其功能分析还是很直观的。接下来我们继续分析函数sub_403F8C。

第一步,我们让OD跳转到0x004081AB的位置。

直接按F8执行下来,在这里可以看到PUSH是将刚才利用GetSystemDirectory函数所获取的系统路径字符串进行压栈。

压栈内容为system32这个目录。

C:\Windows\system32

第二步,按下F8继续分析,发现它又将drivers压栈,将spoclsv.exe字符串压榨。

drivers

spoclsv.exe

注意,上图仅显示了setup.00408658,没有将具体的值显示出来。

思考:OD中如何查看堆栈中的值?

选中ESP堆栈指针寄存器(主要用于存放堆栈内存储单元的偏移量),在“堆栈窗口中跟随”。然后依次选择值“0x00408644”和“0x00408658”,右键在“数据窗口中跟随”,即可查看堆栈中的值。

发现对应的值为“drivers”和“spoclsv.exe”,如下图所示。

写到这里,我们可以推测:下面这个函数的功能是将压入堆栈的字符串进行拼接,成为一个新的路径。

第三步,按下F8执行到这个Call函数进行分析。

按下F8执行过来后,选中EAX在数据窗口中跟随。

EAX是累加器(accumulator),它是很多加法乘法指令的缺省寄存器。

EBX是基地址(base)寄存器, 在内存寻址时存放基地址。

ECX是计数器(counter),是重复(REP)前缀指令和LOOP指令的内定计数器。

EDX则总是被用来放整数除法产生的余数。

在数据窗口中右键“转到”->“表达式”,然后输入值:

020F7E08

接着再CALL函数处按下F8,我们需要关注数据窗口中的前后变化情况。我们可以看到它新生成了一个路径字符串。

C:\Windows\system32\drivers\spoclsv.exe

前后对比如下图所示:

总结,重命名及对应功能如下:

sub_403F8C -> TwoStringCat

功能:将两个字符串进行连接

四.sub_4060D4子函数

事实上,这段程序的功能如下:

首先通过这个函数将字符串连接;

再将路径字符串转换为大写字母;

然后将这个字符串与这里进行对比。

第一步,我们通过OD来分析下比较功能,在OD中执行到4081E3位置,然后按F9执行过去。

0x004081E3 call sub_404018

第二步,分析sub_404018函数。

我们在这里看下它比对的是什么字符串,在数据窗口中跟随值,可以看到两个字符串分别是拼接的字符串和当前OD分析程序的字符串。

C:\USERS\14551\DESKTOP\SETUP.EXE

C:\WINDOWS\SYSTEM32\DRIVERS\SPOCLSV.EXE

很明显,我们分析的熊猫烧香病毒程序在桌面上,而比对的是DRIVERS路径下。

sub_404018函数的目的是分析当前这个程序是不是drivers目录下的这个程序,如果是的话执行一段代码,否则执行另一段代码。

因为目前不是在drivers路径下,因此它执行另一段代码,我们按下F8继续执行。JE跳转不成立,继续出现一个新的CALL。

0x004081F3 CALL setup.004060D4

第三步,sub_4060D4函数的参数分析。

该函数存在一个参数存在EAX中,通过数据窗口跟随发现值为:

spoclsv.exe

我们回到IDA查看该函数的基本组成,双击进入sub_4060D4函数。可以看到这个函数非常长,并且内部包括很多CALL函数,如果说一个个CALL分析,会发现它调用了很多的API函数。通过分析归纳该函数的作用如下:

查找当前内存中指定的进程,即查找当前是否有spoclsv.exe这个进程

总结,重命名及对应功能如下:

sub_4060D4 -> SearchAndTerminateProcess

功能:查找当前内存中的指定进程,若存在,则将其终止

读者可以下来详细分析下该函数的细节,这里仅补充一张图片。

五.CopyFile和WinExe子函数

下面很长一段代码因为之前已经分析过,并且有很多的注释,这里就不再赘述。

在CopyFile函数位置我们停下来分析。

0x004082A6 call CopyFileA

第一步,我们将OD跳转到文件名0x0040828C的位置,按下F2增加断点。

0x0040828C push eax

程序执行过来后,在这里我们跟踪下这个EAX地址。这里可以看到想要拷贝的地址就是刚才我们所连接成的字符串地址。

C:\Windows\system32\drivers\spoclsv.exe

那么,它所拷贝的内容是什么呢?

第二步,继续分析拷贝文件的内容。

按下F8执行到0x004082A5位置,可以看到它是将当前这个病毒文件复制到drivers目录下,通过CopyFile来实现。

事实上,它是将我们的当前文件改为spoclsv.exe之后,再复制到drivers目录中。

第三步,我们继续往下分析,看到一个WinExec函数。

通过OD来到4082E3位置,我们看看这个参数来判断它想执行什么程序。

第四步,按下F2增加断点,然后F9执行过来,并在数据窗口中跟随EAX值。

可以看到,它实际想执行的就是这个spoclsv.exe程序。也就是说,它在把当前这个病毒样本复制到drivers目录之后,那么这句代码就是将它执行起来。再往下ExitProcess是结束当前正在运行的进程,即熊猫烧香的病毒样本。

注意,当病毒本体将自身复制到“drivers”中并改名后,这里就是对改了名字的病毒程序执行运行的操作,然后主体程序就退出了。如果想继续用OD进行动态分析,要么载入“spoclsv.exe”,要么对之前的一处条件跳转进行修改,令程序以为自己就是“spoclsv.exe”。

第五步,回到跳转位置0x004081E8,对其进行分析。

在OD中跳转到该位置,然后按下F2下一个断点,并执行到断点处。

0x004081E8 JE 004082F0

正常来说,由于我们当前所分析的程序并不是drivers目录下的那个病毒样本,因此这个跳转是不成立的。这里为了使其成立,

可以将JZ修改为JNZ

,但是这改变了病毒程序。

最好的办法是改变ZF标志位,将原来的0改为1就可以了

第六步,双击ZF标志位,它会变成1。

双击后可以看到提示“跳转已实现”,现在这个病毒就以为自己是spoclsv.exe。

第七步,按下F8执行到4082F0位置。

前面我们已经分析过,真正实现病毒功能的也就是“spoclsv.exe”这个程序。

六.分析spoclsv.exe

虽说这个程序和“熊猫烧香.exe”是完全一样的,可是毕竟其内部的执行流程是不同的。为了得到病毒完整的资料,这里我利用OD载入“spoclsv.exe”进行动态分析。

第一步,接着上面的步骤,OD和IDA都跳转到4082F0位置。

第二步,可以看到这里出现了sub_40416C函数,我们在IDA中双击进入查看。

由于sub_40416C这个函数也比较抽象,不太容易分析,这需要耐心与细致,在此将过程省略。总结其功能如下:

sub_40416C -> DeleteStringBuff

功能:删除字符串中的一些信息,其中EAX保存的是想要操作字符串的地址,ECX保存的是想要删除的字符的个数,可以看到已经通过GetFileLen获取了字符的个数。

接着就将sub_40416C重命名为:DeleteStringBuff,然后程序跳转到loc_4085D3。

第三步,让IDA和OD跳转到4085D3位置。

OD跳转后按F2增加断点,再按F9执行过来。

第四步,分析call sub_4041B4前的参数。

按下F8执行到sub_4041B4函数调用出,我们查看EAX中保存的内容,在数据窗口中跟随。

可以看到这里的EAX保存的是一个标记数值,即为0x01。之后的CALL就是查找文件中是否包含有这个标记,如果包含有这个标记,那么就执行跳转,否则不跳转。

由此我们可以假设,这个0x01标记应该就是病毒将这个正常的PE程序感染后,在原本正常的程序中添加的01标记,用于标识该程序是否被感染。如果真是这样的话,若想分析跳转后的程序内容,要么在OD中修改标志位,要么对一个被感染的程序进行分析。这里我不再赘述,有兴趣的读者可以拿一个被感染的程序自行分析。

总结,重命名及对应功能如下:

sub_4041B4 -> SearchSignPos

功能:查找标记的位置

我们再回到OD, 由于我现在分析的是病毒程序,他自身没有0x01标志位,因此跳转不成立,它就继续往下执行。

我们可以看到,这部分的代码主要用于收尾工作,最后的CALL用于删除堆栈中所保存的地址,这些地址指向的是病毒写入的一些信息,继续按F8执行。

可以看到一个RETN,我们继续执行。发现熊猫烧香三个核心函数,其中sub_408024就执行完毕了。

sub_408024

sub_40CA5C

sub_40C97C

sub_408024是熊猫烧香病毒三大功能的第一项功能,分析至此,可见这第一项功能主要用于病毒的初始化工作。余下的两大功能我在此就不进行分析,有兴趣的读者可以独立研究试试看。

七.总结

如果你是一名新人,一定要踏踏实实亲自动手去完成这些基础的逆向分析,相信会让你逐步提升,过程确实很痛苦,但做什么事又不辛苦呢?加油!希望你能成长为一名厉害的系统安全工程师或病毒分析师,到时候记得回到这篇文章的起点,告诉你的好友秀璋。

setup.exe的熊猫烧香病毒程序,并衍生出一个spoclsv.exe程序。位置信息为:

C:\WINDOWS\system32\drivers\spoclsv.exe

它的后续功能如下,你可以试着继续分析。

第1点行为:创建spoclsv.exe程序并位于WINDOWS\system32\drivers目录

第2点行为:命令行模式下使用net share解除共享功能

第3点行为:删除安全类软件在注册表中自动启项

第4点行为:在注册表CurrentVersion\Run创建svcshare自启动项,每次开机时会自动运行病毒

第5点行为:禁用文件夹隐藏选项,修改注册表使得隐藏文件无法通过普通设置显示,从而隐藏病毒自身

第6点行为:将自身拷贝到根目录并命名为setup.exe,创建autorun.inf用于病毒的启动,这两个文件的属性都是“隐藏”。同时,会创建Desktop_.ini隐藏文件

感恩能与大家在华为云遇见!

希望能与大家一起在华为云社区共同成长,原文地址:https://blog.csdn.net/Eastmount/article/details/111712482

(By:娜璋之家 Eastmount 2021-12-17 夜于贵阳)

参考文献:

姜晔老师真的非常佩服和值得去学习,包括他苏宁到卡巴斯基的故事,推荐大家去阅读。也希望自己和大家的技术能不断提升,加油!

[1] 姜晔老师技术分享 - B站

[2] 姜晔老师的技术空间目录 - CSDN

[3] [网络安全自学篇] 木马原理详解、远程服务器IPC $漏洞及木马植入实验

[4] https://jiangye.blog.csdn.net/article/details/41313689

[5] [网络安全自学篇] 七十九.Windows PE病毒原理、分类及感染方式详解

[6] [网络安全自学篇] 四十九.Procmon软件基本用法及文件进程、注册表查看

[7] [安全攻防进阶篇] 八.那些年的熊猫烧香及PE病毒行为机理分析

[8] [网络安全自学篇] 七十三.WannaCry勒索病毒复现及分析(四)蠕虫传播机制源码详解

网络 通用安全

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:excel表格生成图片的方法步骤图
下一篇:第七章: C语言结构体(下)
相关文章