瑞星卡卡安全论坛

首页 » 技术交流区 » 反病毒/反流氓软件论坛 » 【分享】病毒变种的查杀
有毒问我 - 2005-9-9 19:06:00
我们曾谈到过交叉感染病毒的现象,这种情况下,病毒表现更趋复杂,感染后果具有不可测性。虽然原有的 "特征码
查毒"已经无能为力,但是,通过病毒分析虚拟机,我们还是可以很轻松在这种病毒感染现象下查杀病毒。
    另一方面呢?如果病毒产生变种了呢?
    所谓病毒变种,就是指一种病毒经过人为的改写或程序自动的异变,产生的具有新特性的病毒。这种病毒实际上是一
种新的病毒。这种"变种"有两种异变方向:非关键区异变和关键区异变。
    关键区异变将导致一种新病毒的产生。它是病毒感染机理、发作条件、表现方式等方面有了实质性的变化的一种变异
现象。而相应的,非关键区异变时,病毒并没有发生实质性变化,例如仅在病毒体中加入了一些"空指令 (NOP)"等。非关
键区异变并不产生病毒,但它致使病毒的识别更趋复杂。
    在特征码查毒中,出于查毒速度的考虑,软件并不对文件的全部进行扫描,而仅是扫描首部或尾部的一部分字节 (例
如PCKV就是扫描文件尾部的64K字节)。这种由软件选择的扫描部分即是所谓"病毒敏感区"。在"特征码查毒"中,哪怕仅是
"病毒敏感区"的一个字节发生了异变,都可能导致软件误查、误杀或者漏查!
    例如TaiPan 438这个病毒。我们进入程序首部的病毒体中,将首先看到如下代码:
        CALL xxxx
 xxxx: POP SI
        SUB SI,+03
        MOV AX,7BCE
        INT 21
    这即是病毒的"敏感区",也就是说,病毒的"特征码"即是从这一部分字节中取出。如果我们作如下改动,程序将未发
生任何实质性变化:
        CALL xxxx
 xxxx: MOV AX,7BCE { 将该指令移到POP指令之前}
        POP SI
        SUB SI,+03
        INT 21
    这是在病毒敏感区进行的一个"非关键区异变",仅移动了一些对程序运行不造成影响的指令。然而,这使得所有基于
"特征码"的反病毒软件将再无法查出该病毒!
如果我们用"打补丁"的方法来修改这个病毒,例如将上面代码修改为:
        CALL xxxx
 xxxx: JMP yyyy
        NOP
        NOP
        NOP
 zzzz: INT21
        ……
 yyyy: POP SI
        SUB SI,+03
        MOV AX,7BCE
        JMP zzzz
    由于病毒体的长度已经发生了变化,这种状况下的改写被称为"关键区改写"。但是,这也使得所有基于"特征码"的反
病毒软件失会了应有的功效。
    再来看另外一个方面,如果我们在"病毒敏感区"之外改写病毒,又会怎么样呢?事实上,由于"特征码"的原理是在于
"特征"的一一对比,如果我们在"敏感区"之外,对"非特征数据"进行修改,不难想象,以前的杀毒软件亦将报告有毒,但
这将导致破坏您的文件甚至于整个的操作系统(引导型病毒)!
    在虚拟机中,彻底摒弃了"病毒敏感区"和"特征码",系统是根据病毒体的执行结果来判定病毒的。因而不管病毒执行
中发生了什么样的变化 (例如变形、解码、重定向跳转、非正常调用等),只要最终的行为和表现呈现出病毒迹象, 则该
病毒仍无所藏身。因而虚拟机方案对各种变形变种病毒有极好的查杀效果
1
查看完整版本: 【分享】病毒变种的查杀