样本名 | NO.3学习样本 |
---|---|
作者 | 样本分析攻城狮 |
时间 | 2024-11-22 |
平台 | Windows |
摘 要
加壳与脱壳是在样本分析中常见的名词,对于恶意样本的编写作者来说,让代码更难分析阻碍安全人员分析样本便是他们的目的。通常对样本进行加壳或者代码混淆是常见的做法。什么是加壳呢?就是在样本打开执行前先执行一段壳代码,执行完壳的代码才会真正的进入程序真正要执行的“入口点”,在这个过程中程序会被压缩并且难以分析,很难在样本中找到有用的线索,因此我们必须对样本进行脱壳操作,本章就查壳脱壳进行一个基础的分析与操作。
关键词: 加壳; 脱壳; 入口点; 恶意样本;
1 查找样本基本信息与脱壳操作
1.1 恶意样本查壳的基本操作
在拿到一个恶意样本之前我们需要先判断这个样本是否加了壳才能进一步进行分析。目前市面上常见的壳有UPX,ASpack,VMP壳等等。UPX是最常见的壳,可以对程序进行压缩提供一定的保护。VMP和其他商业加壳软件可以提供强大的反调试功能,当这些壳程序用到恶意样本中,将极大的增加分析师的分析难度。
查壳我们可以通过使用以下几款工具来分析样本是否加壳。使用Die这款工具来对NO.3学习样本进行查壳,结果如图可以看到操作系统、编译器、编译工具和语言等信息。该样本是用VS2022进行编写的,使用的C++语言,可以明显看到该样本是没有加壳的。
1.2 导入表信息查询判断是否“加壳”
使用StudyPE这款工具将样本拖入,可以看到很多信息。比如程序入口点,导入表的信息等等。可以看到KERNEL32.DLL这个动态库里面有很多函数,区段都为正常的区段。综合判断,可以分析出该样本是没有加壳的。
1.3 对样本进行加壳操作后查询
对NO.3.exe样本进行加壳操作,添加了UPX壳后我们按照1.2步骤中再来查看一下有什么变化。首先是使用DIE工具,可以看到提示添加了UPX的壳。
再使用StudePE查询加壳后的样本,可以看到,区段变为UPX。同时KERNEL32.DLL这个动态库里面有很多函数都看不到了,那么可以确定该样本存在了壳,程序入口也由15A4变为000092D0。在这里补充一点,如果程序加了壳那么我们可以看到KERNEL32.DLL里有LoadLibrary和 GetProcAddress这两个函数在加壳函数里是非常常见的。
2 脱壳基础操作
2.1 UPX脱壳操作
手动脱壳用到UPX.exe这个工具,在命令行处附上-d命令即可脱壳成功
3 总结
本章讲解了程序查壳和脱壳的基础技术,如使用DIE,StudyPE工具来查询区段,导入表等信息判断是否加壳。同时发现LoadLibrary和 GetProcAddress这两个函数在加壳程序或是样本是非常常见的,最后针对UPX的壳程序可以使用脱壳工具进行一键脱壳,在后续的分析中会讲解更高级的脱壳技术,手动脱壳等等。
附录:
在学习的过程中,需要对样本进行实践分析,为了模拟真实的恶意样本分析环境, 建议在每章的学习后,进行实践的操作。因此我在每章节的最后会编写一个作业样本 供大家分析学习,并且会在下一章的学习前,提供本章答案。请分析NO.3的作业样本, 并回答如下问题(学习样本和作业样本是分开的,学习样本上面下载即可)(因为工具和样本太多了,所有的学习过程中需要用到的工具和样本都已经放在圈子里了,包括虚拟环境经过我自己的测试都放在圈子里给大家,后续会提供一些我自写的内核工具给大家一起学习~)希望你我一起进步
NO.3学习样本:
NO.3作业样本:
纷传https://pc.fenchuan8.com/#/index?forum=95631
附录1 样本工具
样本工具
(1)使用到DIE。
(2)使用到UPX.exe脱壳工具。
(3)使用到NO.3学习样本.exe。
(4)使用到StudyPE工具。
作业
-
请分析NO.3作业样本,并回答下面问题
-
该样本是否加壳?如果加壳请尝试脱壳。
-
该样本是否有网络连接行为?
-
有哪些导入函数暗示了该程序的功能?请尝试分析该样本的功能。