- 帖子
- 336
- 精华
- 0
- 积分
- 684
- 智慧
- 336
- V 币
- 0
- 贡献
- 0
- 金豆
- 1008
- MV号码
- 1777777
- 注册时间
- 2010-4-29
- 最后登录
- 2011-2-17
|
楼主
发表于 2010-5-6 20:23
| 只看该作者
现代的启发式引擎主要面对的是:木马、间谍程序、下载者、已知恶意程序的变种等。现在,启发式引擎很少去分析代码,因为这些东西一般都是由高级语言的编译器 做成的,从代码风格上和正常程序没有太多区别(高级语言编译器一般以代码最优化为目标,而病毒的代码则一般以混淆分析者为目标)。即便代码风格异常,也有 可能是加壳所致(壳一般是由汇编写成的)。相反的,刚才提到的引入表、数据段中的字符串、资源,成了重要的判断依据。
以下载者为例,下载者一般是一个体积小巧的程序,用来下载一个体积更大、功能更完善的木马。针对这一特点,启发式引擎可以定义如下规则:
1、本身体积很小。
2、引入表中引入了UrlDownloadToFile。这是一个下载者普遍用来下载程序的API,但在正常程序中却很罕见。
3、数据段中存在形如“http://****/***.exe”的字符串。
4、引入表中不存在CreateWindow等用于创建窗口,和用户交互的API。
而针对一些进程插入式木马,则可以定义这些规则:
1、引入表中存在CreateRemoteThread,这是进程插入木马普遍采用的API,但在正常程序中很罕见。
2、资源中存在一个DLL文件。可以认为是运行中将要释放的,并进一步检查这个DLL。如果这个DLL符合其他特征就加重可疑度。
3、引入表中不存在CreateWindow等用于创建窗口,和用户交互的API。
可 以看到,这些规则都是非常经验化的,并不是说满足这些规则就一定是恶意程序,只是很有可能。实际实现起来当然没有上面说得那么简单,比如,API的调用除 了静态调用外还可以动态加载。而且还要考虑误报的问题。比如,可以计算“可疑API数目/总API数目”,避免一定的误报。
关于“加壳”: 在我看来,加壳倒也未必是启发式最大的障碍。因为本来就不分析代码,加壳带来的最大影响是一些保护壳会对引入表加密。对于启发式引擎,一定要把它解密。 对于多层加壳,启发式引擎可以认为两层以上的多层加壳为病毒,正常程序很少会这么做。这样的话就可以理解为什么有杀软把所有加了北斗壳的文件都认为是病毒,因为除了在中国,用北斗加壳的正常程序几乎看不到。 |
|