恶意代码分析通用规则
1.不要过于陷入细节。大多数恶意程序会是庞大而复杂的,你不可能了解每一个细节。你需要关注最关键的主要功能。当你遇到了一些困难和复杂的代码段后,你应该在进入到细节之前有一个概要性的了解。
2.其次,请记住对于不同的工作任务,可以使用不同的工具和方法。这里没有一种通吃的方法。每一种情况是不同的,而你将要学习的各种工具和技术将有类似的,有时甚至重叠的功能。如果你在使用一个工具的时候没有很好的运气,那么尝试另外一种。如果你在一个点上被卡住了,不要花太长时间在这个点上,尝试转移到其他问题。尝试从不同角度来分析恶意代码,或只是尝试不同的方法。
3.最后,请记住,恶意代码分析就像是猫抓老鼠的游戏。在新的恶意代码分析技术开发的同时,恶意代码编写者也在回应着可以挫败分析的新技术。作为一名恶意代码分析师,你如果想要取得成功,就必须能够认识、理解和战胜这些新技术,并能够快速地应对恶意代码分析艺术的新变化。
反病毒扫描引擎 virustotal virscan
哈希值 MD5(MD5deep、WinMD5(可以同时计算多个)) SHA-1
查找字符串 Strings
输出的字符:通常如果一个字符串很短并且不是一个单词的话,就是毫无意义的。
一般情况下会有dll文件、一些ip地址、错误消息信息(一般是最能够提供高价值信息的途径)等等。
加壳与混淆:特点是可打印字符串很少(Strings搜索字符串很少)、至少会包含LoadLibrary和GetProcAddress函数,是用来加载和使用其他函数功能的。
使用PEiD工具,注意的是许多PEiD插件会在没有警告的情况下运行恶意代码的可执行文件!用最新版!
PE文件格式
链接库与函数
静态链接、运行时连接和动态链接(动态链接是最常见的)
一些 Windows API允许程序员导入并没有在程序的文件头中列出的链接函数。其中,两个最为常见的是 LoadLibrary和 GetProcAddress。 LdrAetProcAddress和 LdrLoadDll也会被使用。 LoadLibrary和 GetProcAddress允许一个程序访问系统上任何库中的任何函数,这意味着当这些函数被使用时,你无法静态分析出可疑样本程序中会链接哪些函数。
使用DEpendency Walker工具探索动态链接函数
函数命名约定 字母A或者W结尾分别表示输入参数类型为ASCII字符串和宽字符字符串。
导入函数:微软MSDA 文档+附录A
导出函数:dll文件的导出函数比较多
静态分析技术实践
PE文件头与分节
使用PEview分析
使用Resoure Hacker工具查看资源节
PE文件头概述
Lab 1-1
这个实验使用Lab01-01.exe和Lab0l-01.dll文件,使用本章描述的工具和技术来获取关于这些文件的信息。
问题
1.将文件上传至https://www.virustotal.com/进行分析并查看报告。
2.这些文件是什么时候编译的?
3.这两个文件中是否存在迹象说明它们是否被加壳或混淆了?如果是,这些迹象在哪里?
4.是否有导入函数显示出了这个恶意代码是做什么的?如果是,是哪些导入函数?
5.是否有任何其他文件或基于主机的迹象,让你可以在受感染系统上查找?
6.是否有基于网络的迹象,可以用来发现受感染机器上的这个恶意代码?
7.你猜这些文件的目的是什么?