CIH病毒的运作原理及防范
?牐燙IH病毒是公认的破坏性最强的电脑病毒之一。它是一种Windows95/98系统下、只感染PE格式的文件的32位文件型恶性病毒。由于使用了 Windows下的VxD(虚拟设备驱动程序)技术,使得这种病毒在Windows环境下传播的破坏性、实时性和隐蔽性都特别强。
?牐燙IH 病毒的"原体"加"变种"一共有五种之多,包括V1.0、V1.1、V1.2、V1.3、V1.4总共五个版本,其中最流行的是V1.2版本,即每年4月26日发作的CIH病毒,V1.3版本的发作日期为每年的6月26日;而CIH病毒V1.4版本的发作日期则被修改为每月的26日,这一改变大大缩短了发作期限,增加了它的破坏性和危险性。
#1?牐燙IH的运作原理
?牐犕ǔ#珻IH病毒的传染方式是通过修改文件头部的程序入口地址,使其指向病毒的引导代码,在这一点上,CIH病毒和以前DOS环境中的多数病毒是类似的。下面是CIH病毒的一部分代码:
?牐牎?
?牐燳YY:??010202A5 mov ecx, dr0
?牐燳YY:??010202A8 jcxz short loc_10202BA ;CIH工作代码
?牐燳YY:??010202AA add dword ptr ?焄esp],15h
?牐燳YY:??010202AE
?牐燳YY:??010202AE loc_10202AE:??
?牐燳YY:??010202AE mov [ebx-4], bp
?牐燳YY:??010202B2 shr ebp, 10h
?牐燳YY:??010202B5 mov [ebx+2], bp
?牐燳YY:??010202B9 iret
?牐牎?
?牐犛烧獠糠治颐强梢钥闯觯荂IH工作在Ring0的部分代码,注意黑体字标出的部分,即为CIH判断自身是否已经进驻内存的指令,可以看出,如果dr0寄存器非零,CIH没有做更多的判断即直接退出了。因此我们很容易得到一种免疫CIH的方法,就是仿照CIH所采取的方法,直接修改掉dr0寄存器的值,改为非零即可。
?牐犝饫镄枰虻ソ樯芤幌耫r0寄存器,它属于Intel系列80386以上CPU的调试寄存器组中的一个地址控制寄存器,工作于Ring3级别(应用程序工作特权环)的程序是不能直接访问调试寄存器组的(我们一般编写的程序,都将处在Ring3级别),只有获得系统工作特权环的特权级别Ring0,才可以直接操作调试寄存器组。CIH病毒采用了一种比较巧妙的方法从Ring3环切入了Ring0环,在下面是CIH从Ring3切入Ring0的一段代码。
?牐牎?
?牐燳YY:??01020256 sidt qword ptr ?焄esp-2];取出中断描述符表地址
?牐燳YY:??0102025B pop ebx;获得中断描述符表地址首地址
?牐燳YY:??0102025C add [ebx] 1Ch ;修改ebx值,使指向int 3描述项地址
?牐燳YY:??0102025F cli
?牐燳YY:??01020260 mov ebp ?焄ebx]??
?牐燳YY:??01020262 mov bp ?焄ebx-4] ;保存原始int 3的入口地址
?牐燳YY:??01020266 lea esi,[ecx+12h]??
?牐燳YY:??01020269 push esi
?牐燳YY:??0102026A mov [ebx-4], si
?牐燳YY:??0102026E shr esi, 10h
?牐燳YY:??01020271 mov [ebx+2],si;修改int 3入口地址,使指向自身代码
?牐燳YY:??01020275 pop esi
?牐燳YY:??01020276 int 3;切入Ring0环运行自身代码
?牐牎?
#1?牐犎绾味訡IH免疫
?牐犞懒薈IH的运作原理,我们就可以相应地编出它的免疫器,无须进驻内存,只需同样切入Ring0,修改掉dr0寄存器的值就可以了,但是,不能直接就把dr0寄存器值修改掉。因为运行免疫程序时,内存中已经驻留了CIH,它会将dr0中置入原始的系统的文件系统API的钩子地址,如果我们贸然将dr0修改掉,带来的直接后果就是系统立刻瘫痪。因此,我们必须在切入Ring0准备修改dr0寄存器的值之前取出dr0的值,判断其并非上述地址才可以修改。
?牐犞链耍颐且丫梢钥闯鯟IH免疫器完整免疫CIH的工作原理了,由于每次机器启动都会复位CPU环境。因此,我们必须在每次Windows启动之前抢先运行我们的免疫程序,这样每次打开电脑时,就可以保护电脑不会被CIH感染,CIH永远不会驻留内存.