您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系统,更加深入,也是作者的慢慢成长史。换专业确实挺难的,逆向分析也是块硬骨头,但我也试试,看看自己未来四年究竟能将它学到什么程度,漫漫长征路,偏向虎山行。享受过程,一起加油~
如果你想成为一名逆向分析或恶意代码检测工程师,或者对系统安全非常感兴趣,就必须要认真分析一些恶意样本。熊猫烧香病毒就是一款非常具有代表性的病毒,当年造成了非常大的影响,并且也有一定技术手段。本文主要学习姜晔老师视频,结合作者逆向经验进行总结,详细讲解了熊猫烧香的行为机理,并通过软件对其功能行为进行分析,这将有助于我们学习逆向分析和反病毒工作。后续作者还将对其进行逆向调试,以及WannaCry勒索蠕虫、各种恶意样本及木马的分析。基础性文章,希望您喜欢!
IDA和OD作为逆向分析的“倚天剑和“屠龙刀”,学好它们的基本用法至关重要。本文重点分析熊猫烧香病毒的功能函数,大家掌握这些技巧后才能更好地分析更多的代码。同时,本文部分实验参考姜晔老师的视频分析,真的非常佩服和值得去学习的一位老师。技术路上哪有享乐,为了提升安全能力,别抱怨,干就对了~
上一篇文章讲解了“熊猫烧香”病毒样本核心函数,我们利用OD和IDA工具结合调用函数的参数进行分析,它将有助于我们更好地理解病毒行为。这篇文件将继续分析sub_408024核心函数,分析每一个CALL函数,改为我们能够理解的名字,这往往也有助于对后续程序的理解。作者结合三篇文章绘制了一张分析图,希望加深大家对熊猫烧香的了解。这系列文章写得不容易,希望大家给点个赞和收藏,也欢迎评论和交流。
从2019年7月开始,我来到了一个陌生的专业——网络空间安全。初入安全领域,是非常痛苦和难受的,要学的东西太多、涉及面太广,但好在自己通过分享100篇“网络安全自学”系列文章,艰难前行着。感恩这一年相识、相知、相趣的安全大佬和朋友们,如果写得不好或不足之处,还请大家海涵!
接下来我将开启新的安全系列,叫“系统安全”,也是免费的100篇文章,作者将更加深入的去研究恶意样本分析、逆向分析、内网渗透、网络攻防实战等,也将通过在线笔记和实践操作的形式分享与博友们学习,希望能与您一起进步,加油~
- 推荐前文:网络安全自学篇系列-100篇
作者的github资源:
前文分析:
声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。该样本不会分享给大家,分析工具会分享。(参考文献见后)
对病毒进行逆向分析,可以彻底弄清楚病毒的行为,从而采取更有效的针对手段。为了节省篇幅,在这里我不打算将“熊猫烧香”进行彻底的分析,只会讲解一些比较重要的部分,大家只要掌握了这些思想,那么就可以处理很多的恶意程序了。
这里主要使用的工具包括:
实验文件:
基本流程:
注意:由于OD工具会将程序运行起来,所以我们在进行恶意代码分析时尽量在搭建好的虚拟机中操作。如果病毒传播性较强如WannaCry,建议断开网络和断开共享分析。
实验思路:
上篇主要分析sub_408024核心函数:
这次我们会继续跟着姜晔老师分析,接着上一篇博客讲解。同时这次分析会和之前有一些不一样的情况。
如果我们按照流程顺序一步步往下分析,确实能够弄清楚病毒的行为,但某些分支中的重要代码是执行不到的,所以我们需要采取一些策略,走完每个分支,彻底分析出病毒的行为。这也是逆向分析中非常重要的方法。
第一步,我们打开IDA Pro和OD载入病毒样本。
现在程序执行到了loc_408171位置处,我们让OD也跳转到对应的位置。
右键转到->表达式,输入408171。
按下F2增加断点,再按F9直接执行过来。
思考:OD重新打开断点为什么还保留着?
在OllyDbg中,它会把所有与程序后模块相关的信息保存在单独的文件中,以便在模块重新加载时继续使用。这些信息包括标签、注释、断点、监视、分析数据、条件等。
第二步,在OD中分析0x00408171位置。
首先是一个CMP比较操作(Compare),接着查看EBP-0x8的内容。
我们可以看到它的内容是0,它的比较对象也是0。
第三步,分析JNZ跳转指令。
接着按下F8,可以看到比较后,ZF变成了1。由于二者都为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)。
接下来将EDP-0x3D4赋值给EDX,F8执行并在数据窗口中跟随,发现它此时还是空值。
按F8执行到sub_40532C函数,在IDA中我们双击进去,查看该函数。发现该函数的主要功能是API函数CharUpperBuffA。
总结,重命名及对应功能如下:
PS:IDA中按ESC键返回上一层再重命名。
第五步,分析函数sub_4054BC。
在IDA中双击查看该函数的内容。可以发现它主要是调用了GetSystemDirectory函数,从而获取系统的路径。
总结,重命名及对应功能如下:
由于之前直接调用系统API函数,其功能分析还是很直观的。接下来我们继续分析函数sub_403F8C。
第一步,我们让OD跳转到0x004081AB的位置。
直接按F8执行下来,在这里可以看到PUSH是将刚才利用GetSystemDirectory函数所获取的系统路径字符串进行压栈。
压栈内容为system32这个目录。
第二步,按下F8继续分析,发现它又将drivers压栈,将spoclsv.exe字符串压榨。
注意,上图仅显示了setup.00408658,没有将具体的值显示出来。
思考:OD中如何查看堆栈中的值?
选中ESP堆栈指针寄存器(主要用于存放堆栈内存储单元的偏移量),在“堆栈窗口中跟随”。然后依次选择值“0x00408644”和“0x00408658”,右键在“数据窗口中跟随”,即可查看堆栈中的值。
写到这里,我们可以推测:下面这个函数的功能是将压入堆栈的字符串进行拼接,成为一个新的路径。
第三步,按下F8执行到这个Call函数进行分析。
按下F8执行过来后,选中EAX在数据窗口中跟随。
在数据窗口中右键“转到”->“表达式”,然后输入值:
接着再CALL函数处按下F8,我们需要关注数据窗口中的前后变化情况。我们可以看到它新生成了一个路径字符串。
前后对比如下图所示:
总结,重命名及对应功能如下:
事实上,这段程序的功能如下:
第一步,我们通过OD来分析下比较功能,在OD中执行到4081E3位置,然后按F9执行过去。
第二步,分析sub_404018函数。
我们在这里看下它比对的是什么字符串,在数据窗口中跟随值,可以看到两个字符串分别是拼接的字符串和当前OD分析程序的字符串。
很明显,我们分析的熊猫烧香病毒程序在桌面上,而比对的是DRIVERS路径下。
sub_404018函数的目的是分析当前这个程序是不是drivers目录下的这个程序,如果是的话执行一段代码,否则执行另一段代码。
因为目前不是在drivers路径下,因此它执行另一段代码,我们按下F8继续执行。JE跳转不成立,继续出现一个新的CALL。
第三步,sub_4060D4函数的参数分析。
该函数存在一个参数存在EAX中,通过数据窗口跟随发现值为:
我们回到IDA查看该函数的基本组成,双击进入sub_4060D4函数。可以看到这个函数非常长,并且内部包括很多CALL函数,如果说一个个CALL分析,会发现它调用了很多的API函数。通过分析归纳该函数的作用如下:
总结,重命名及对应功能如下:
读者可以下来详细分析下该函数的细节,这里仅补充一张图片。
下面很长一段代码因为之前已经分析过,并且有很多的注释,这里就不再赘述。
在CopyFile函数位置我们停下来分析。
第一步,我们将OD跳转到文件名0x0040828C的位置,按下F2增加断点。
程序执行过来后,在这里我们跟踪下这个EAX地址。这里可以看到想要拷贝的地址就是刚才我们所连接成的字符串地址。
那么,它所拷贝的内容是什么呢?
第二步,继续分析拷贝文件的内容。
按下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下一个断点,并执行到断点处。
正常来说,由于我们当前所分析的程序并不是drivers目录下的那个病毒样本,因此这个跳转是不成立的。这里为了使其成立,可以将JZ修改为JNZ,但是这改变了病毒程序。最好的办法是改变ZF标志位,将原来的0改为1就可以了。
第六步,双击ZF标志位,它会变成1。
双击后可以看到提示“跳转已实现”,现在这个病毒就以为自己是spoclsv.exe。
第七步,按下F8执行到4082F0位置。
前面我们已经分析过,真正实现病毒功能的也就是“spoclsv.exe”这个程序。
虽说这个程序和“熊猫烧香.exe”是完全一样的,可是毕竟其内部的执行流程是不同的。为了得到病毒完整的资料,这里我利用OD载入“spoclsv.exe”进行动态分析。
第一步,接着上面的步骤,OD和IDA都跳转到4082F0位置。
第二步,可以看到这里出现了sub_40416C函数,我们在IDA中双击进入查看。
由于sub_40416C这个函数也比较抽象,不太容易分析,这需要耐心与细致,在此将过程省略。总结其功能如下:
接着就将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中修改标志位,要么对一个被感染的程序进行分析。这里我不再赘述,有兴趣的读者可以拿一个被感染的程序自行分析。
总结,重命名及对应功能如下:
我们再回到OD, 由于我现在分析的是病毒程序,他自身没有0x01标志位,因此跳转不成立,它就继续往下执行。
我们可以看到,这部分的代码主要用于收尾工作,最后的CALL用于删除堆栈中所保存的地址,这些地址指向的是病毒写入的一些信息,继续按F8执行。
可以看到一个RETN,我们继续执行。发现熊猫烧香三个核心函数,其中sub_408024就执行完毕了。
sub_408024是熊猫烧香病毒三大功能的第一项功能,分析至此,可见这第一项功能主要用于病毒的初始化工作。余下的两大功能我在此就不进行分析,有兴趣的读者可以独立研究试试看。
写到这里,关于sub_408024核心函数的部分功能就介绍完毕,它主要完成熊猫烧香的基础功能。请大家一定要动手跟着调试,感受下这部分的实验。同时作者是跟着姜晔老师的视频,一步步逆向分析熊猫烧香病毒的,后续还有WannaCry蠕虫等恶意样本的分析。这些分析技术是病毒分析和逆向分析的基础,相信大家只有掌握这些基本方法,才能更好地深入这个领域。
如果你是一名新人,一定要踏踏实实亲自动手去完成这些基础的逆向分析,相信会让你逐步提升,过程确实很痛苦,但做什么事又不辛苦呢?加油!希望你能成长为一名厉害的系统安全工程师或病毒分析师,到时候记得回到这篇文章的起点,告诉你的好友秀璋。
最后再给出这张图,希望加深大家对熊猫烧香的了解。这系列文章写得不容易,您的点赞、评论、收藏将是对我最大的支持,感恩安全路上一路前行,如果有写得不好或侵权的地方,可以联系我删除。基础性文章,希望对您有所帮助,作者目的是与安全人共同进步,加油~
setup.exe的熊猫烧香病毒程序,并衍生出一个spoclsv.exe程序。位置信息为:
它的后续功能如下,你可以试着继续分析。
学安全一年,认识了很多安全大佬和朋友,希望大家一起进步。这篇文章中如果存在一些不足,还请海涵。作者作为网络安全和系统安全初学者的慢慢成长路吧!希望未来能更透彻撰写相关文章。同时非常感谢参考文献中的安全大佬们的文章分享,深知自己很菜,得努力前行。编程没有捷径,逆向也没有捷径,它们都是搬砖活,少琢磨技巧,干就对了。什么时候你把攻击对手按在地上摩擦,你就赢了,也会慢慢形成了自己的安全经验和技巧。加油吧,少年希望这个路线对你有所帮助,共勉。
2020年8月18新开的“娜璋AI安全之家”,主要围绕Python大数据分析、网络空间安全、人工智能、Web渗透及攻防技术进行讲解,同时分享CCF、SCI、南核北核论文的算法实现。娜璋之家会更加系统,并重构作者的所有文章,从零讲解Python和安全,写了近十年文章,真心想把自己所学所感所做分享出来,还请各位多多指教,真诚邀请您的关注!谢谢。
(By:Eastmount 2021-01-08 星期五 夜于武汉 http://blog.csdn.net/eastmount/ )
参考文献:
姜晔老师真的非常佩服和值得去学习,包括他苏宁到卡巴斯基的故事,推荐大家去阅读。也希望自己和大家的技术能不断提升,加油!
[1] 姜晔老师技术分享 - B站
[2] 姜晔老师的技术空间目录 - CSDN
[3] [网络安全自学篇] 木马原理详解、远程服务器IPC $漏洞及木马植入实验
[4] https://jiangye.blog.csdn.net/article/details/41313689
[5] [网络安全自学篇] 七十九.Windows PE病毒原理、分类及感染方式详解
[6] [网络安全自学篇] 四十九.Procmon软件基本用法及文件进程、注册表查看
[7] [安全攻防进阶篇] 八.那些年的熊猫烧香及PE病毒行为机理分析
[8] [网络安全自学篇] 七十三.WannaCry勒索病毒复现及分析(四)蠕虫传播机制源码详解