也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大
少走了弯路,也就错过了风景,无论如何,感谢经历
关于Android安全的知识,可前往:https://blog.csdn.net/ananasorangey/category11955914.html
如果你想成为一名逆向分析或恶意代码检测工程师,或者对系统安全非常感兴趣,就必须要认真分析一些恶意样本。熊猫烧香病毒就是一款非常具有代表性的病毒,当年造成了非常大的影响,并且也有一定技术手段。本文主要学习姜晔老师视频,结合作者逆向经验进行总结,详细讲解了熊猫烧香的行为机理,并通过软件对其功能行为进行分析,这将有助于我们学习逆向分析和反病毒工作。后续作者还将对其进行逆向调试,以及WannaCry勒索蠕虫、各种恶意样本及木马的分析。基础性文章,希望您喜欢!
IDA和OD作为逆向分析的“倚天剑和“屠龙刀”,学好它们的基本用法至关重要。本文重点分析熊猫烧香病毒的功能函数,大家掌握这些技巧后才能更好地分析更多的代码。同时,本文部分实验参考姜晔老师的视频分析,真的非常佩服和值得去学习的一位老师。技术路上哪有享乐,为了提升安全能力,别抱怨,干就对了~
上一篇文章讲解了“熊猫烧香”病毒样本核心函数,我们利用OD和IDA工具结合调用函数的参数进行分析,它将有助于我们更好地理解病毒行为。这篇文件将继续分析sub_408024核心函数,分析每一个CALL函数,改为我们能够理解的名字,这往往也有助于对后续程序的理解。作者结合三篇文章绘制了一张分析图,希望加深大家对熊猫烧香的了解。这系列文章写得不容易,希望大家给点个赞和收藏,也欢迎评论和交流。
从2019年7月开始,我来到了一个陌生的专业——网络空间安全。初入安全领域,是非常痛苦和难受的,要学的东西太多、涉及面太广,但好在自己通过分享100篇“网络安全自学”系列文章,艰难前行着。感恩这一年相识、相知、相趣的安全大佬和朋友们,如果写得不好或不足之处,还请大家海涵!
接下来我将开启新的安全系列,叫“安全攻防进阶篇”,也是免费的100篇文章,作者将更加深入的去研究恶意样本分析、逆向分析、内网渗透、网络攻防实战等,也将通过在线笔记和实践操作的形式分享与博友们学习,希望能与您一起进步,加油~推荐前文:网络安全自学篇系列-100篇
https://blog.csdn.net/eastmount/category_9183790.html
话不多说,让我们开始新的征程吧!您的点赞、评论、收藏将是对我最大的支持,感恩安全路上一路前行,如果有写得不好或侵权的地方,可以联系我删除。基础性文章,希望对您有所帮助,作者目的是与安全人共同进步,加油~
文章目录:
一.实验背景
二.loc_408171位置分析
三.sub_403F8C子函数
四.sub_4060D4子函数
五.CopyFile和WinExe子函数
六.分析spoclsv.exe
七.总结
作者的github资源:
逆向分析:https://github.com/eastmountyxz/
SystemSecurity-ReverseAnalysis
网络安全:https://github.com/eastmountyxz/
NetworkSecuritySelf-study
声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。该样本不会分享给大家,分析工具会分享。(参考文献见后)
一.实验背景
对病毒进行逆向分析,可以彻底弄清楚病毒的行为,从而采取更有效的针对手段。为了节省篇幅,在这里我不打算将“熊猫烧香”进行彻底的分析,只会讲解一些比较重要的部分,大家只要掌握了这些思想,那么就可以处理很多的恶意程序了。
这里主要使用的工具包括:
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
– 功能:检测文件的路径是否存在0x00408126 call sub_4078E0
– WriteVirusInfoToMem
– 功能:写入病毒信息到内存中,病毒作者企图利用暴力P解的方式,来攻破计算机中的某些验证机制0x0040812E call sub_403C44
– SetZeroFlag
– 功能:设置零标志位,将其设置为00x00408136 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;
OF(溢出标志)=1:此次运算发生了溢出, =0 无溢出。
第四步,分析函数sub_40532C。
在IDA中继续查看代码内容。
首先上一篇博客已经分析并重命名了sub_40277C函数的功能,它是获取文件路径和名称(GetFilePathAndName)。
C:Users14551Desktopsetup.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:Windowssystem32
第二步,按下F8继续分析,发现它又将drivers压栈,将spoclsv.exe字符串压榨。
drivers
spoclsv.exe
注意,上图仅显示了setup.00408658,没有将具体的值显示出来。
思考:OD如何查看堆栈中的值?
选中ESP堆栈指针寄存器(主要用于存放堆栈内存储单元的偏移量),在“堆栈窗口中跟随”。然后依次选择值“0x00408644”和“0x00408658”,右键在“数据窗口中跟随”,即可查看堆栈中的值。
写到这里,我们可以推测:下面这个函数的功能是将压入堆栈的字符串进行拼接,成为一个新的路径。
第三步,按下F8执行到这个Call函数进行分析。
按下F8执行过来后,选中EAX在数据窗口中跟随。
EAX是累加器(accumulator),它是很多加法乘法指令的缺省寄存器。
EBX是基地址(base)寄存器, 在内存寻址时存放基地址。
ECX是计数器(counter),是重复(REP)前缀指令和LOOP指令的内定计数器。
EDX则总是被用来放整数除法产生的余数。
在数据窗口中右键“转到”->“表达式”,然后输入值:
020F7E08
接着在CALL函数处按下F8,我们需要关注数据窗口中的前后变化情况。我们可以看到它新生成了一个路径字符串。
C:Windowssystem32driversspoclsv.exe
前后对比如下图所示:
总结,重命名及对应功能如下:
sub_403F8C -> TwoStringCat
功能:将两个字符串进行连接
四.sub_4060D4子函数
事实上,这段程序的功能如下:
首先通过这个函数将字符串连接;
再将路径字符串转换为大写字母;
然后将这个字符串与这里进行对比。
第一步,我们通过OD来分析下比较功能,在OD中执行到4081E3位置,然后按F9执行过去。
0x004081E3 call sub_404018
第二步,分析sub_404018函数。
我们在这里看下它比对的是什么字符串,在数据窗口中跟随值,可以看到两个字符串分别是拼接的字符串和当前OD分析程序的字符串。
C:USERS14551DESKTOPSETUP.EXE
C:WINDOWSSYSTEM32DRIVERSSPOCLSV.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:Windowssystem32driversspoclsv.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”这个程序。
[系统安全] 八.那些年的熊猫烧香及PE病毒行为机理分析
六.分析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是熊猫烧香病毒三大功能的第一项功能,分析至此,可见这第一项功能主要用于病毒的初始化工作。余下的两大功能我在此就不进行分析,有兴趣的读者可以独立研究试试看。
七.总结
写到这里,关于sub_408024核心函数的部分功能就介绍完毕,它主要完成熊猫烧香的基础功能。请大家一定要动手跟着调试,感受下这部分的实验。同时作者是跟着姜晔老师的视频,一步步逆向分析熊猫烧香病毒的,后续还有WannaCry蠕虫等恶意样本的分析。这些分析技术是病毒分析和逆向分析的基础,相信大家只有掌握这些基本方法,才能更好地深入这个领域。
如果你是一名新人,一定要踏踏实实亲自动手去完成这些基础的逆向分析,相信会让你逐步提升,过程确实很痛苦,但做什么事又不辛苦呢?加油!希望你能成长为一名厉害的系统安全工程师或病毒分析师,到时候记得回到这篇文章的起点,告诉你的好友。
最后再给出这张图,希望加深大家对熊猫烧香的了解。这系列文章写得不容易,您的点赞、评论、收藏将是对我最大的支持,感恩安全路上一路前行,如果有写得不好或侵权的地方,可以联系我删除。基础性文章,希望对您有所帮助,作者目的是与安全人共同进步,加油~
setup.exe的熊猫烧香病毒程序,并衍生出一个spoclsv.exe程序。位置信息为:
C:WINDOWSsystem32driversspoclsv.exe
它的后续功能如下,你可以试着继续分析。
第1点行为:创建spoclsv.exe程序并位于WINDOWSsystem32drivers目录
第2点行为:命令行模式下使用net share解除共享功能
第3点行为:删除安全类软件在注册表中自动启项
第4点行为:在注册表CurrentVersionRun创建svcshare自启动项,每次开机时会自动运行病毒
第5点行为:禁用文件夹隐藏选项,修改注册表使得隐藏文件无法通过普通设置显示,从而隐藏病毒自身
第6点行为:将自身拷贝到根目录并命名为setup.exe,创建autorun.inf用于病毒的启动,这两个文件的属性都是“隐藏”。同时,会创建Desktop_.ini隐藏文件
学安全一年,认识了很多安全大佬和朋友,希望大家一起进步。这篇文章中如果存在一些不足,还请海涵。作者作为网络安全和系统安全初学者的慢慢成长路吧!希望未来能更透彻撰写相关文章。同时非常感谢参考文献中的安全大佬们的文章分享,深知自己很菜,得努力前行。编程没有捷径,逆向也没有捷径,它们都是搬砖活,少琢磨技巧,干就对了。什么时候你把攻击对手按在地上摩擦,你就赢了,也会慢慢形成了自己的安全经验和技巧。加油吧,少年希望这个路线对你有所帮助,共勉。
前文回顾(下面的超链接可以点击喔):
[系统安全] 一.什么是逆向分析、逆向分析应用及经典扫雷游戏逆向
[系统安全] 二.如何学好逆向分析及吕布传游戏逆向案例
[系统安全] 三.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逆向分析(下)病毒感染配置
2020年8月18新开的“娜璋AI安全之家”,主要围绕Python大数据分析、网络空间安全、人工智能、Web渗透及攻防技术进行讲解,同时分享CCF、SCI、南核北核论文的算法实现。娜璋之家会更加系统,并重构作者的所有文章,从零讲解Python和安全,写了近十年文章,真心想把自己所学所感所做分享出来,还请各位多多指教,真诚邀请您的关注!谢谢。2021年继续加油!
(By:Eastmount 2021-01-08 周六夜于武汉)
参考文献:
姜晔老师真的非常佩服和值得去学习,希望自己和大家的技术能不断提升,加油!
[1] [网络安全自学篇] 木马原理详解、远程服务器IPC $漏洞及木马植入实验
[2] 姜晔老师的技术空间目录 - CSDN
[3] 腾讯安全联合实验室 - 知乎文章
[4] [网络安全自学篇] 七十九.Windows PE病毒原理、分类及感染方式详解
[5] 姜晔老师技术分享 - B站
[6] [网络安全自学篇] 四十九.Procmon软件基本用法及文件进程、注册表查看
还没有评论,来说两句吧...