本文将说明现有防毒软件自我保护机制与木马们的防御对策。适合新手至高手阅读,如果现在你正担心你的木马被查杀,不妨看看此文,你定会有收获的。
前些天,看论坛上有很多人说用进程结束的方法消灭杀毒软件来保护自己的马儿。不知大家发现没有,AVP和KV以及瑞星的一些进程都是无法结束的。这样杀毒软件还在运行着,撞上你的马还是会杀掉的。现在来说说这些进程为什么杀不掉。
因为杀毒软件是运行于Ring0级的,程序资源级别分为0、1、2、3, 0级最高,3级最低。只有0级资源的才能访问0级资源的程序。Ring0级运行于内存最高端,享有最高有权限。一般的木马都是2级资源级别的(像灰鸽子、黑洞、阿拉QQ大盗等等),有些是1级(像Bio-Net、Beast等等 这种不多)。当然无法结束位于0级资源的杀毒软件进程。
但是黑洞2001-2004的版本,却可以用他的进程过滤搞定很多杀毒软件。这是为什么?因为,他是不用进程结束的,而是窗口标题检测,发现类似“杀毒、木马克星、安全”之类的字眼就向该窗口发送无条件退出命令(WWQ_Quit)。这样就可以免除Ring资源级别的障碍了。阿拉QQ大盗则是干扰其扫描引擎来达到阻止杀毒软件的目的。
关于实现0级对0级资源程序的操作
目前,尚无对杀毒软件进程有效的解决方案。本人才思不及,只能给出解决的编程思路。
要对Ring0级资源操作,必须是汇编级语言。大家可以用Vxd技术来实现,这样编写起来比较方便,而且用汇编语言编写很可能会被杀毒软件认为是病毒,因为其病毒特征过于明显。把整个程序写成驱动程序的形式,加入到系统内存顶端,就可以对杀毒软件进程为所欲为。
首先程序启动,在内存最高端开辟一块内存,把自身复制上去并运行。然后写启动,写服务。接着在内存中搜寻杀毒软件内存标识符,找到以后,把杀毒软件内存标识符所在区域用无用垃圾数据覆盖,导致其出错退出。这些过程不能借助 INT13 写盘中断来完成,否则会被判定位病毒的。必须绕过杀毒软件设下的写盘捕获陷阱,这就需要极其高超的编程技术了。像这种编程能力,除了丧心病狂的病毒编写者还有操作系统编写者,其他人是无力触及的。等你有了这种能力,那么离你的超级病毒出炉也就不远了。
木马的防杀对策
加壳
这个不用说,好处多得没完。打个比方:把一个人的手接到脚上,把脚接到手上,这样公安就认不得你啦。
修改特征码
这个也是在加壳失败以后对付杀毒软件的好方法。需要注意的是,一个病毒被定义的特征码往往不止一条!所以要修改很多对才可以免查杀,这个还得靠运气。有时修改的特征码不一定对,如果特征码很多,那么修改工作将异常痛苦。
花指令
原来被KV杀的,用花指令技术处理过后还是被杀?因为KV的断点跟踪会不断追踪下去,除非你的程序无限大,否则总有一天,KV会报毒。
Rootkit
超级内核后门。好处很多,具体大家自己体会了。
引用一句经典名言:虽然瑞星的内存杀毒可以杀灰鸽子,可是重启后灰鸽子还是噗拉噗拉的飞着。
注意:瑞星的内存杀毒其实是进程+DLL监控,只是提取了部分木马的内存特征码。
对付KIS 2006,修改免杀相当复杂,不是简单改动源码和反汇编可以做到的。需要从源码处下功夫。