杀毒软件必须要具备两个功能:查毒和杀毒  查毒最简单的原理是找特征码。
  通常的病毒,都有一个能代表其唯一特征的部分。这个就是特征码。详细的特征码的例子,你可以参阅KV3000的一些帮助文件。这是最简单的一个办法。这个办法的缺点在于有误报的可能性。早期杀毒软件都是这种原理,新的杀毒软件基本上也有采用。误报率很大程度上取决于病毒的特征码的选定上。
  比如某病毒里有一个很独特的字符串:KJ_guest,这个就是我在杀VBS.KJ病毒的时候取的特征串。凡是带这个字符串的文件,除SYSTEM.DAT等注册表外,都是染毒文件。
  还有一个办法是这样的:建立一个虚拟机运行该代码,虚拟出一个运行环境。然后检查这段代码的企图。假如某代码对exe等文件进行修改操作,自然就有病毒嫌疑了,这个是陷阱法。
  还有一个办法是找病毒必须使用的某些指令的组合,这个办法是用来判断一些可疑代码的。他不能准确判断某代码是否是病毒,但绝对可以肯定有嫌疑。当你发现某html里有<APPLET NAME=KJ_guest HEIGHT=0 WIDTH=0 code=com.ms.activeX.ActiveXComponent></APPLET>这段代码的时候,你几乎可以肯定这是个恶意代码的组成部分,因为这一句几乎99%以上都是用来做坏事的。假如你写一个程序,对含有该代码的网页进行监视,那么可以拦截半数以上恶意代码的攻击。假如上一句和XXX.openTextFile、XXX.write、XXX.GetExtensionName、XXX.RegWrite这样的字眼组合在一起那几乎可以断定是个病毒了。(前提是包含在VBScript的Script元素里)。这是某些广谱杀毒软件的原理之一。
  以上都是一些非常简单的原理,而且仅仅是拿最简单的VBS病毒举个例子。还有许多其他的原理这里无法写清楚。而且许多东西是属于杀毒软件公司的内部商业机密,有些需要你自己进行研究。  杀毒的原理就是根据特定病毒写一段解毒代码。比如上面的KJ病毒,只要将所有带毒文件的染毒<script>部分删除掉就可以解毒。可以修改原病毒的感染部分加入解毒代码,使其由原感染途径解毒,这样最方便。我自己就总喜欢研究一些这种VBS病毒,由病毒本身修改而成的解毒代码我一般叫它“灭活疫苗”
  如果你把一些常用解毒办法写成一些现成的接口,这样就可以用比较简短的脚本来快速地解毒。KV3000的病毒库我怀疑就是用了这种技术。
  杀毒一般最好用汇编语言编写代码,否则程序将非常慢。另外,对于染毒文件的判断部分也是个比较有难度的地方。如果是一个个地对比,肯定很慢。我怀疑一些杀毒软件用了逐步过滤的办法。

解决方案 »

  1.   


    一般EXE病毒都要修改EXE入口
    所以先看入口是否正确,然后通过入口的JMP指令就可以找到病毒位置
    (只是大多数可以)
    worm一般是把原来的EXE放到自己的后面,然后自己改名成目标EXE,执行的时候把原来EXE释放,所以worm代码很好判断,是固定的。
    activex漏洞一般是比较代码,例如使用了clsid:XXXXXX-XXXXX-XXXXX_XXXXX是一个漏洞的ID,那么可以判断这段代码是危害性的代码。