微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题CIH病毒的运作原理及防范
栏目软件世界
作者王应兵
发布2001年16期
  认识CIH病毒
  CIH病毒是公认的破坏性最强的电脑病毒之一。它是一种Windows95/98系统下、只感染PE格式的文件的32位文件型恶性病毒。由于使用了 Windows下的VxD(虚拟设备驱动程序)技术,使得这种病毒在Windows环境下传播的破坏性、实时性和隐蔽性都特别强。
  CIH 病毒的"原体"加"变种"一共有五种之多,包括V1.0、V1.1、V1.2、V1.3、V1.4总共五个版本,其中最流行的是V1.2版本,即每年4月26日发作的CIH病毒,V1.3版本的发作日期为每年的6月26日;而CIH病毒V1.4版本的发作日期则被修改为每月的26日,这一改变大大缩短了发作期限,增加了它的破坏性和危险性。
   CIH的运作原理
  通常,CIH病毒的传染方式是通过修改文件头部的程序入口地址,使其指向病毒的引导代码,在这一点上,CIH病毒和以前DOS环境中的多数病毒是类似的。下面是CIH病毒的一部分代码:
  ……
  YYY:010202A5  mov   ecx, dr0
  YYY:010202A8  jcxz  short loc_10202BA ;CIH工作代码
  YYY:010202AA   add   dword ptr [esp],15h
  YYY:010202AE
  YYY:010202AE  loc_10202AE:
  YYY:010202AE  mov  [ebx-4], bp
  YYY:010202B2  shr   ebp, 10h
  YYY:010202B5  mov  [ebx+2], bp
  YYY:010202B9  iret
  ……
  由这部分我们可以看出,是CIH工作在Ring0的部分代码,注意黑体字标出的部分,即为CIH判断自身是否已经进驻内存的指令,可以看出,如果dr0寄存器非零,CIH没有做更多的判断即直接退出了。因此我们很容易得到一种免疫CIH的方法,就是仿照CIH所采取的方法,直接修改掉dr0寄存器的值,改为非零即可。
  这里需要简单介绍一下dr0寄存器,它属于Intel系列80386以上CPU的调试寄存器组中的一个地址控制寄存器,工作于Ring3级别(应用程序工作特权环)的程序是不能直接访问调试寄存器组的(我们一般编写的程序,都将处在Ring3级别),只有获得系统工作特权环的特权级别Ring0,才可以直接操作调试寄存器组。CIH病毒采用了一种比较巧妙的方法从Ring3环切入了Ring0环,在下面是CIH从Ring3切入Ring0的一段代码。
  ……
  YYY:01020256   sidt  qword ptr [esp-2];取出中断描述符表地址
  YYY:0102025B  pop   ebx;获得中断描述符表地址首地址
  YYY:0102025C  add   [ebx] 1Ch ;修改ebx值,使指向int 3描述项地址
  YYY:0102025F  cli
  YYY:01020260   mov   ebp [ebx]
  YYY:01020262   mov   bp [ebx-4] ;保存原始int 3的入口地址
  YYY:01020266  lea esi,[ecx+12h]
  YYY:01020269   push  esi
  YYY:0102026A   mov  [ebx-4], si
  YYY:0102026E  shr   esi, 10h
  YYY:01020271   mov  [ebx+2],si;修改int 3入口地址,使指向自身代码
  YYY:01020275   pop   esi
  YYY:01020276  int 3;切入Ring0环运行自身代码
  ……
   如何对CIH免疫
  知道了CIH的运作原理,我们就可以相应地编出它的免疫器,无须进驻内存,只需同样切入Ring0,修改掉dr0寄存器的值就可以了,但是,不能直接就把dr0寄存器值修改掉。因为运行免疫程序时,内存中已经驻留了CIH,它会将dr0中置入原始的系统的文件系统API的钩子地址,如果我们贸然将dr0修改掉,带来的直接后果就是系统立刻瘫痪。因此,我们必须在切入Ring0准备修改dr0寄存器的值之前取出dr0的值,判断其并非上述地址才可以修改。
  至此,我们已经可以看出CIH免疫器完整免疫CIH的工作原理了,由于每次机器启动都会复位CPU环境。因此,我们必须在每次Windows启动之前抢先运行我们的免疫程序,这样每次打开电脑时,就可以保护电脑不会被CIH感染,CIH永远不会驻留内存.