2.1 静态分析基础技术--《恶意代码分析实战》
静态分析指的是分析程序指令与结构来确定功能的过程,在这个时候,程序本身是不运行的。
本章将讨论可执行文件提取有用信息的方法,包括以下技术:
- 使用反病毒软件来确认程序样本的恶意性
- 使用哈希来识别恶意代码
- 从文件的字符串列表、函数、文件头信息种发掘有用的信息
1.反病毒引擎的扫描
分析一个可疑样本的时候,第一步最好是拿多个反病毒软件扫描此文件。但是反病毒软件是不完美的,它们主要依靠一个已知的恶意代码可识别片段的特征数据库,以及基于行为与匹配模式的分析来识别可疑文件。
类似 VirusTotal (https://www.virustotal.com/gui/home/upload)(https://www.virscan.org/)网站允许你上传一个文件,然后调用多个反病毒引擎来进行分析,最后生成一份报告,标识样本识别情况、是否恶意、恶意代码名称等。
2.哈希值:恶意代码的指纹
哈希值是一种用来唯一标识恶意代码的常用方法。恶意代码样本通过一个哈希程序,会产生出一段用于唯一标识这个样本的独特哈希值。
MD5 和 SHA-1 算法是常用的计算哈希值的方法。
注意,上面的网站可以计算出哈希值
3.加壳与混淆恶意代码
混淆程序是恶意代码编写者尝试去隐藏其执行过程的代码。而加壳程序则是混淆程序中的一类。加壳后的恶意程序会被压缩,并且难以分析。如果查看可打印字符串发现很少的时候,可能是混淆的或者是加壳的。
当加壳程序运行的时候,首先会运行一小段脱壳代码,来解压缩加壳的文件,然后再运行脱壳后的文件。当对加壳程序静态分析的时候,只有这一段脱壳代码可以被解析。
4.静态链接、运行时链接与动态链接
静态链接是Windows平台链接代码库最不常用的方式,当一个库被链接到可执行程序的时候,所有这个库的代码都会被复制到可执行文件当中。而在分析代码时,很难区分静态链接的代码与可执行程序本身的代码,因为PE文件头里没有表明这个文件包含有链接代码。
运行时链接在恶意代码中比较常用,特别是恶意代码被加壳或者混淆的时候,使用运行时链接的可执行程序,只有当需要使用函数的时候,才会链接到库。最常见的函数有LoadLibrary、GetProcAddress、LdrGetProcAddress、LdrLoadDll等。
动态链接是在程序启动时就会链接。PE文件头中存储了每个将被装载的库文件,以及每个会被程序使用的函数信息。
下一节
实验涉及:
1.反病毒引擎扫描、编译时间、查壳、导入表查看、字符串查看
2.UPX脱壳