电子技术论坛

 找回密码
 快速注册

QQ登录

只需一步,快速开始

搜索
下载方法|用单线程|避免多扣帖子规范|求助必读|发帖建议积分策略|勋章介绍|新人必读获取金币|推广论坛|出售帖子基本礼节|致会员信|版规总则
禁涉政治|反对低俗|举报专帖征集相片|留下足迹|推荐精华上传附件|制作分卷|使用网盘禁发qq群|恶意灌水|纯表情帖加入团队|监督机制|安全上网
查看: 5459|回复: 4

[推荐]解开硬盘逻辑锁的一种有效方法

[复制链接]
发表于 2005-12-29 19:13:13 | 显示全部楼层 |阅读模式

注册家电维修技术论坛,与同行畅聊维修技术,享更多技术论坛功能。

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
<>一·序言 <BR>       不知道你是否曾碰到过从软盘和硬盘都启动不了计算机的情形?一般计算机的硬盘分区表被病毒感染后,若不能启动机子,通常从软盘可以启动。但在严重的情形下 ,不但从硬盘不能启动机子,就是从软盘也不能启动。有的恶毒的病毒就能使硬盘被死锁。笔者一次在自己机子上玩弄硬盘锁时,就被锁住过一次。结果在硬盘下选择DOS或WIN95模 式启动机子都死机,在软盘下用DOS启动也死机;在COMS中将硬盘类型选择None,虽然可以从软盘启动,但启动后没有硬盘,使用软盘上的FDISK命令,想重新分区或格式化都没门。 弄得我一筹莫展。 </P>
<><BR>       本来,硬盘被锁住时,可以采用3.0以下的DOS版本启动机子,机子启动后虽然也不认硬盘,但其不认的原因在于其管理不了现在的大硬盘,因此可以用Debug修改硬盘 分区表,修改后可以启动。但在已进入WINDOWS的年代,3.0以下的DOS实难找到,即使找到,你的机子上恐怕也因没有5寸软驱而不能使用。因此,最好的办法是编制一个程序来解决 这个问题。笔者通过尝试和思考,找到一种比较实用的方法,可以轻松解开死锁的硬盘,当然也把自己的硬盘解开了。下面,我将这种方法介绍出来。 </P>
<><BR>       二·硬盘锁住原理 <BR>       硬盘锁住通常是对硬盘的分区表做手脚,因此首先应该了解硬盘的分区表。硬盘分区表位于0柱面0磁头1区,这个扇区的前面200多个字节是主引导程序,后面从01BEH 开始的64个字节是分区表。分区表共64字节,分为4栏,每栏16字节,用来描述一个分区。如果是用DOS的FDISK程序分区后,最多只用两栏,第一栏描述基本的DOS分区,第二栏描述 扩展的DOS分区。 <BR>       分区表一栏的结构与各字节的含义如下: <BR>         00H-标志活动字节,活动DOS分区为80H,其它为00H。 <BR>         01H-本分区逻辑0扇区所在的磁头号。 <BR>         02H-逻辑0扇区所在柱面中的扇区号。 <BR>         03H-逻辑0扇区所在的柱面号。 <BR>         04H-分区类型标志。 <BR>         05H-本分区最后一个扇区的磁头号。 <BR>         06H-最后一个扇区的扇区号。 <BR>         07H-最后一个柱面的柱面号。 <BR>         08H-硬盘上在本分区之前的扇区总数,用双字表示。 <BR>         0CH-本分区的扇区总数,从逻辑0扇区计数,不含隐藏扇区,用双字表示。 <BR>       在上面的介绍中给出的柱面号与扇区号虽然各占一个字节,但实际上扇区号用6位表示,柱面号用10位表示,扇区号所在字节的最高两位实际上是柱面号的最高两位。 <BR>       分区表的最后两个字节是分区表的有效标志,如果将其改变,将不能从硬盘启动,这是一种简单的锁住硬盘的方法。解决的办法是从软盘启动,启动后硬盘仍然可以 使用。用Debug或Noratn中的Diskedit软件将硬盘该分区表中的标志恢复,则从硬盘启动也没有问题了。锁住硬盘的另一种方法是对分区参数做手脚,如果将分区参数全部变为0,则 启动时由于找不到分区参数,从硬盘是没法启动,从软盘启动后也不认硬盘,如果你敲入盘符C并回车,将出现提示Invalid <BR>       driver <BR>       specification。但所幸的是,毕竟可以启动机子,不认硬盘没关系,在A盘上用DOS的Debug仍然可以读出硬盘0柱面0磁头1扇区的内容,修改后再写入0柱面0磁头1扇 区,重新启动机子又没问题了。如果将分区表参数随意改为其它参数,则有可能不能用可以安装DOS的DOS系统盘启动,按F3退出后将出现内存分配错误,不能装载DOS的命令解释 器COMMAND的提示,系统就死机了,笔者就曾碰见过这种情形。但用一张格式化成系统盘的软盘则可以顺利启动,只要有Debug,你仍然可以将分区表参数修改回去。可怕的事情是, 如果你不幸将分区表参数改成一个循环链,即C盘的下一个分区指向D驱,D驱的下一个分区又指向C区,这样循环下去,DOS启动或WIN95启动时由于无休止的读取逻辑驱动器,就只有 死机的份了。这是只要有硬盘存在,不管你用软盘还是硬盘都没法启动机子了,由于不能启动是由于硬盘造成的,即使你将硬盘下到其它计算机上,也没法使用,这样硬盘就彻底被 锁死了,笔者所遭遇就是此情形。不信,你只需将硬盘0柱面0磁头1扇区的1D0H处改为1(如果你的D驱开始柱面号不够大,此处本来就为1),将1D1H处改为0,表示D盘的开始柱面号 跟C盘一样,看看你的计算机还能不能启动,不过你在没有充分的准备前绝不要试。 <BR>       一个完整的硬盘锁程序,不过是重新改写0柱面0磁头1扇区的引导程序,并将分区表破坏或故意制造一个循环分区表,而将真正的硬盘分区表参数和引导程序放在其它 隐藏扇区并保护起来,如果启动时口令不对,则不能启动机子,口令对了则顺利启动。这种硬盘锁程序,情形好的还可以用软盘启动;情形严重的就是连软盘也不能启动,硬盘真被 锁住。        三·解开硬盘锁的程序法 <BR>       如果硬盘被锁死,是否真的就无法解开呢?当然不是。看看问题的症结所在,根源在于DOS中的IO.SYS文件,它包含LOADER、IO1、IO2、IO3四个模块,其中IO1中包含 有一个很关键的程序SysInt_I,它在启动中很固执,非要去读分区表,而且不把分区表读完誓不罢休。如果碰上分区表是循环的,它就只有死机了。这是DOS的脆弱性和不完备性。其 实这也不能怪DOS,因为DOS为了获得硬盘使用权,就必需读分区表参数,而且DOS还约定驱动器号不能超过26,只不过没有考虑到此等循环分区表情形。一句话,机子不能启动不过是 DOS操作系统造成的,如果另写一个操作系统,或许就能启动机子。当然这只是说个笑话。 <BR>       明白了病因在于DOS,问题就好办了。DOS启动中不是要读硬盘分区表吗?我不让你读分区表甚至连硬盘都不让你读,不就可以顺利启动了。的确是这样的,开硬盘锁 的程序实现方法就是基于这个思想形成的。当然,这只有从软盘启动着手了。 <BR>       看看计算机的启动过程,上电首先进行的多项硬件自测跟我们没有关系,我们关心的只是它最开始和磁盘打交道时是干什么。如果选择从硬盘启动,则计算机和磁盘 最开始打交道是将硬盘0柱面0磁头1扇区的内容读入内存0000:7C00处并跳到0000:7C00处执行;如果选择从软盘启动,则计算机和磁盘最开始打交道是将A盘0磁道0磁头1扇区的内容 读入内存0000:7C00处并跳到0000:7C00处执行,在执行过程中,计算机并不检查该扇区的内容是什么,只机械地执行读命令,这使得许多系统型病毒得以生存。但利用这一点,恰 恰使我们的程序解锁法有了用武之地。如果我们用DOS格式化一张可以启动机子的系统软盘,将该软盘的0磁道0磁头1扇区的内容移到后面的空白扇区中,而重新写一段程序到该软盘 的0磁道0磁头1扇区,这样用软盘启动时首先执行的是我们所写的程序了。在这段程序中,具备这样一些功能:在DOS启动前抢先拦截INT <BR>       13H,驻留高端内存并监视INT <BR>       13H,判断是否读硬盘,如果是读硬盘就直接返回,这样就禁止了读硬盘,也就避免了DOS读硬盘循环分区表造成的死机;同时拦截对软盘的读取,如果读软盘的0磁道 0磁头1扇区,就改成读真正有引导程序和磁盘参数表的扇区,免得DOS在启动中找不到软盘的磁盘参数表而死机。完成这些任务的同时,还要读取软盘真正的引导程序并把控制权交给 它。 <BR>       该方法可以称为万能的,因为它在用软盘启动中,始终不与硬盘打交道,这样不管你硬盘用什么方法加锁了,对DOS的启动都没有影响。当然,这样启动的机子是不认 硬盘的,但这没有关系。你可在机子启动后,用Debug调出驻留高端内存的新INT <BR>       13H程序,将其改为只有一条直接执行旧INT 13H的语句,这样在Debug下可以用INT <BR>       13H读取硬盘0柱面0磁头1扇区的内容,如果你有备份,将分区表参数恢复后再写入0柱面0磁头1扇区,重新启动计算机就可以了。如果实在没有备份,去掉分区表中的 循环链,用正常DOS启动盘重启机子后至少也可以重新对硬盘分区,不至于硬盘被锁住打不开了。 <BR>         <BR>       四·程序及说明 <BR>         1·下面是写入软盘0磁道0头1扇区的源程序key.com,程序用debug输入。 <BR>       C&gt;debug <BR>       -a100 <BR>       100 CLI <BR>       101 XOR AX,AX <BR>       103 MOV DS,AX <BR>       105 MOV ES,AX <BR>       107 MOV SS,AX <BR>       109 MOV AX,7C00 <BR>       10C MOV SP,AX <BR>       10E STI <BR>       10F MOV SI,AX <BR>       111 MOV DI,7E00 <BR>       114 CLD <BR>       115 MOV CX,0200 <BR>       118 REPNZ <BR>       119 MOVSB <BR>       11A JMP 0000:7E1F <BR>       11F MOV CX,0003 <BR>       122 PUSH CX <BR>       123 MOV AX,0201;读启动软盘的引导扇区 <BR>       126 MOV BX,7C00 <BR>       129 MOV CX,4F01 <BR>       12C MOV DX,0100 <BR>       12F INT 13 <BR>       131 POP CX <BR>       132 DEC CX <BR>       133 JNZ 0122 <BR>       135 MOV AX,[004C];抢先获取INT 13H的位置 <BR>       138 MOV [7E88],AX <BR>       13B MOV AX,[004E] <BR>       13E MOV [7E8A],AX <BR>       141 MOV AX,[0413] <BR>       144 DEC AX <BR>       145 MOV [0413],AX <BR>       148 MOV CL,06 <BR>       14A SHL AX,CL <BR>       14C MOV ES,AX <BR>       14E XOR AX,AX <BR>       150 MOV DS,AX <BR>       152 MOV SI,7E6D;复制改写的INT 13H程序到高端内存 <BR>       155 MOV DI,0000 <BR>       158 MOV CX,0030 <BR>       15B REPNZ <BR>       015C MOVSB <BR>       015D MOV AX,0000;将新INT 13H位置写入中断向量表 <BR>       0160 MOV [004C],AX <BR>       0163 MOV AX,ES <BR>       0165 MOV [004E],AX <BR>       0168 JMP 0000:7C00 <BR>       016D PUSHF;新INT 13H程序 <BR>       016E CMP DX,0080;是否是硬盘 <BR>       0172 JNZ 0176;不是硬盘则继续 <BR>       0174 POPF <BR>       0175 IRET;是硬盘则直接返回 <BR>       0176 CMP DX,+00;是否读软盘BOOT区? <BR>       0179 JNZ 0186 <BR>       017B CMP CX,+01 <BR>       017E JNZ 0186 <BR>       0180 MOV CX,4F01;是则读79磁道1磁头1扇区 <BR>       0183 MOV DX,0100 <BR>       0186 POPF <BR>       0187 JMP 0000:0000;此处跳转去执行旧INT 13, <BR>                    ;旧INT 13H的位置由前面程序获得后写入。 <BR>       N key.com <BR>       RCX <BR>       200 <BR>       W <BR>       Q <BR>       2·程序的装载 <BR>          <BR>       在进行下面工作前,先用DOS格式化一张启动的系统盘,并保证没有坏扇区,最好进行启动测试,确保其可以启动机子。由于现在机子上大多只有3寸软驱,因此选 择1.44M的3.5寸软盘。然后用debug <BR>       key.com将程序key.com调入内存偏移地址为100H,同时在400H处写入一段装载程序。即: <BR>       C&gt;debug key.com <BR>       -a400 <BR>       400 MOV CX,0003 <BR>       403 PUSH CX <BR>       404 MOV AX,0201;将A盘引导程序读入内存1000H处 <BR>       407 MOV BX,1000;为确保成功,首次采用重复读3次 <BR>       40A MOV CX,0001 <BR>       40D MOV DX,0000 <BR>       410 INT 13 <BR>       412 POP CX <BR>       413 DEC CX <BR>       414 JNZ 0403 <BR>       416 MOV AX,0301;将已读入内存的软盘引导程序写入软盘 <BR>       419 MOV </P>

<>◎ 不懂汇编 gww (20543)于2002/04/07(20:15:09).. <BR>我不懂汇编,但在第四部分:四·程序及说明 中的的倒数第五行,也就是“0187 JMP 0000:0000”下边是不是少了一行,最后怎么结束?<BR>◎ 接上面 amspark (17671)于2002/01/10(21:57:32).. <BR>41C MOV CX,4F01 <BR>       41F MOV DX,0100 <BR>       422 INT 13 <BR>       424 MOV AX,0301;将key.com程序写入软盘0磁道0磁头1扇区 <BR>       427 MOV BX,0100 <BR>       42A MOV CX,0001 <BR>       42D MOV DX,0000 <BR>       430 INT 13 <BR>       432 INT 3 <BR>       为保证万无一失,最好将软盘这两个扇区的内容重新读出来看一看,以保证写成功了。做好这一切,保险的还是进行一次测试,即用该软盘启动一次机子,看能否成 功,若成功启动,你就可以用循环分区表法锁住硬盘,看从正常DOS下能否启动,然后再用此软盘启动机子试试,看看功效如何? <BR>       从该软盘启动后,不认硬盘,并且在高端内存驻留了新INT <BR>       13H程序,该段程序实际上是key.com中从16D到187部分。由于有此段程序存在,在debug下也无法读硬盘,也就没法恢复硬盘分区表,因此机子启动后首先应修改这段 程序。现在的机子基本内存通常都为640K,这样这段程序就位于内存中9FC0:0000处,在debug下,用U9FC0:0显示这段程序,可以看到位于9FC0:001A处是一条跳转指令,该跳转指 令即转去执行最原始的INT <BR>       13H。由于BIOS版本不一样,跳转指令指向的位置可能不一样,如笔者机子上是一条JMP <BR>       F000:A5D4语句。这时在在debug下编写这样一语句:a9FC0:0 JMP <BR>       F000:A5D4。这样,对硬盘的禁写与禁读都不再起作用了,在debug下用INT <BR>       13H的2号子功能可以读出硬盘分区表,修改恢复后再用3号子功能将数据写回分区表。退出debug,重新用正常DOS启动计算机,就可以了。 <BR>       附带提一下,在正常DOS下,该软盘由于没有BOOT区,也就没有磁盘参数表,从而不能使用,用DIR A:命令会出现General <BR>       failure reading drive A提示。不要理睬它,这并不影响它作特殊启动盘。 <BR>        五·建议 <BR>       为更好的保护你的硬盘,笔者建议你最好将你的硬盘分区表信息备份起来。备份有两种方式,一种是以文件形式将硬盘每个逻辑盘的分区信息存储起来;另一种是将 分区信息备份在硬盘隐藏扇区里。比如可以将0柱面0磁头1扇区备份在0柱面0磁头3扇区,将D盘开始柱面号0磁头1扇区备份在该柱面0磁头3扇区,其它逻辑盘也如此。这种方法简单、 方便,也很可靠。用NORTAN中的DISKEDI很容易操作和实现。有了备份分区表信息,就不怕破坏分区表的病毒了;再加上我给你的程序,即使有人真锁住了你的硬盘,你也可以轻而易 举解开了。 </P>
发表于 2008-4-13 10:38:17 | 显示全部楼层
谢谢
发表于 2008-6-12 17:14:57 | 显示全部楼层
高手啊 不过这样的情况一般不多吧
发表于 2008-7-19 00:06:42 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2014-4-3 20:52:46 | 显示全部楼层
:没有碰到过、·
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|家电维修技术论坛 ( 鄂ICP备09003585号-2 )

GMT+8, 2024-5-30 20:38 , Processed in 0.072428 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

CopyRight © 电子技术论坛
电子邮箱:8794149@qq.com | 联系 QQ:3081868839 | 官方网址:www.dzdu.com

Qiji. All Rights Reserved


服务条款 | 站长声明

Wuhan Qiji Technology Co., Ltd.武汉奇迹科技有限公司版权所有


鄂ICP备09003585号-2鄂公网安备42010602000420号

快速回复 返回顶部 返回列表