360启发式引擎是什么
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/07 20:44:25
360启发式引擎是什么
360启发式引擎是什么
360启发式引擎是什么
启发式引擎的目标是自动化地区分正常程序与非正常程序,因此就要“尽一切可能”利用两者的不同点,哪怕这不同点很无赖,但是只要它是有效的,就是正确的
早期的启发式引擎主要是用来针对感染文件的病毒,不过这和熊猫烧香之辈有天壤之别.首先以前的文件感染病毒一般都是用汇编写的.其次,感染方法上,以前的文件感染病毒是把自己插入感染目标作为其一部分,而不像熊猫烧香那样把感染目标捆绑为自己的一部分.针对 以前的文件感染病毒,启发式引擎一般采用查找重定位指令、反EPO(对抗入口点模糊)、虚拟机(对抗多态)等方法,不过谈这个未免太枯燥,大家有兴趣自己 查查吧,更何况现在真正意义上的文件感染病毒少之又少.
到最近,恶意程序发生的最大变化就是,它们一般都是用高级语言(VC++、VB、Delphi...)写成,而且一般都是独立一个文件(不再插入别人感染),以往的启发式引擎面临变革.
API(Application Programming Interface),微软提供给编程者的接口,给编程者提供了极大的方便.举个例子,我要写一个读硬盘文件的程序,如果我要直接操作硬盘,那么意味着我 要了解硬盘的基本架构、我要了解不同的分区方式,以及FAT、FAT32、NTFS...,一个小小的程序足以把我累死,而且万一我的程序出问题了,整个 硬盘数据可能就报销了.有了API以后,我只要调用ReadFile等API函数,剩余的工作就可以交给Windows做了,而Windows的代码一般 可以确保其高效性和可靠性.换句话说,探知程序调用了哪些API就可以大致了解它要干什么了.
PE(Portable Executables)的格式,每个EXE文件都有自己的格式,并不是从第一个字节开始就是代码.引入表其中告诉系统这个EXE要调用哪些API.当系统加载EXE的时候,会根据引入表中的信息,把正确的API函数的位置填入引入表,这样EXE就能正常调用API了.除了用于存放代码的代码段,EXE文件中还有用于存放字符串等数据的数据段.对于更复杂、体积更大的数据,比如图像、运行中要释放的子文件、窗口的布局等则会作为资源存放.
现代的启发式引擎主要面对的是:木马、间谍程序、下载者、已知恶意程序的变种等.现在,启发式引擎很少去分析代码,因为这些东西一般都是由高级语言的编译器 做成的,从代码风格上和正常程序没有太多区别(高级语言编译器一般以代码最优化为目标,而病毒的代码则一般以混淆分析者为目标).即便代码风格异常,也有 可能是加壳所致(壳一般是由汇编写成的).相反的,刚才提到的引入表、数据段中的字符串、资源,成了重要的判断依据.
以下载者为例,下载者一般是一个体积小巧的程序,用来下载一个体积更大、功能更完善的木马.针对这一特点,启发式引擎可以定义如下规则:
1、本身体积很小.
2、引入表中引入了UrlDownloadToFile.这是一个下载者普遍用来下载程序的API,但在正常程序中却很罕见.
3、数据段中存在形如“http://****/***.exe”的字符串.
4、引入表中不存在CreateWindow等用于创建窗口,和用户交互的API.
而针对一些进程插入式木马,则可以定义这些规则:
1、引入表中存在CreateRemoteThread,这是进程插入木马普遍采用的API,但在正常程序中很罕见.
2、资源中存在一个DLL文件.可以认为是运行中将要释放的,并进一步检查这个DLL.如果这个DLL符合其他特征就加重可疑度.
3、引入表中不存在CreateWindow等用于创建窗口,和用户交互的API.
可 以看到,这些规则都是非常经验化的,并不是说满足这些规则就一定是恶意程序,只是很有可能.实际实现起来当然没有上面说得那么简单,比如,API的调用除 了静态调用外还可以动态加载.而且还要考虑误报的问题.比如,可以计算“可疑API数目/总API数目”,避免一定的误报.
关于“加壳”:在我看来,加壳倒也未必是启发式最大的障碍.因为本来就不分析代码~加壳带来的最大影响是一些保护壳会对引入表加密.对于启发式引擎,一定要把它解密.对于多层加壳,启发式引擎可以认为两层以上的多层加壳为病毒,正常程序很少会这么做.这样的话就可以理解为什么有杀软把所有加了北斗壳的文件都认为是病 毒,因为除了在中国,用北斗加壳的正常程序几乎看不到.