静态分析技术通常是研究恶意代码的第一步。静态分析指的是分析程序指令与结构来确定目标程序的功能的过程。在这个时候,病毒本身并不在运行状态。我们一般采用以下几种方式进行静态分析:
一、采用反病毒引擎扫描
如果尚不确定目标程序是否为病毒程序,我们可以首先采用多个不同的反病毒软件来扫描一下这个文件,看是否有哪个引擎能够识别它。(www.virscan.org、www.virustotal.com )
注意:只能通过MD5值查询,不允许将样本进行上传。
二、计算哈希值
哈希是一种用来唯一标识目标程序的常用方法。目标程序通过一个哈希算法,会产生出一段唯一的用于标识这个样本的哈希值,我们可以将这个值理解为是目标程序的指纹。常用的哈希算法有MD5、Sha-1以及CRC32等。由于仅仅采用一种算法,特别是MD5算法,有可能使得不同程序产生同样的哈希结果,所以一般会运用多种哈希验证文件的唯一性。
三、查找字符串
程序中的字符串就是一串可打印的字符序列,一个程序通常都会包含一些字符串,比如打印输出信息、连接的URL,或者是程序所调用的API函数等。从字符串中进行搜索是获取程序功能提示的一种简单方法。(在IDA和OD中都可以查找字符串)并不是所有的字符串都是有意义的,但是利用这个结果,也能够给我们的静态分析带来很大的便利了。
四、查找导入函数
如果软件被加壳的话,那么导入表中的函数会很少,所以可以从这里判断文件是否被加壳。如果没有加壳,那么导入表中会列出程序使用的大部分函数(除去程序动态获得的),我们就可以通过这些函数大致判断一下程序的行为。
五、解析宏
使用IDA反汇编程序的时候,IDA并不会将宏的名字解析出来,相反,它只会使用宏对应的数字进行显示,如下如所示:
如果只看这些数字,完全无法得知什么情况,好在IDA提供了解析机制,可以将数字转换为宏名。在对应的数字上右键,选择Enum:
然后在弹出的对话框中选择对应的宏即可!
六、侦壳操作
病毒木马编写者经常会使用加壳技术来让他们的恶意程序难以被检测或分析。正常的程序总是会包含很多字符串。而加了壳的恶意代码通过分析所得到的可打印字符串就会很少。如果查找出的程序的字符串很少时,那么这个程序就很有可能是加了壳的。此时往往就需要使用其它方法来进一步检测它们的行为。(常用PEiD进行查壳)