给硬盘加逻辑锁的方法及解法Word下载.docx
《给硬盘加逻辑锁的方法及解法Word下载.docx》由会员分享,可在线阅读,更多相关《给硬盘加逻辑锁的方法及解法Word下载.docx(17页珍藏版)》请在冰点文库上搜索。
硬盘分区表位于硬盘的0磁道0柱面第1扇区(即0区)(注意:
该扇区为隐含扇区,0道0面的全部扇区均为隐含扇区,普通的访问命令无法直接访问,同时该磁道的其他62个扇区也是隐含的,因此有些多系统引导程序就把自己的程序代码放在其他隐含扇区,有些引导区也把自己的代码放在其他隐含扇区。
)。
在该扇区512字节中,硬盘的主引导记录区MBR(MainBootRecord)只占用了前446个字节(偏移000H&
#45;
&
偏移1BDH),另外的64个字节(偏移1BEH&
偏移1FDH)是硬盘分区表DPT&
DiskPartitionTable&
最后两个字节"
55AA"
(偏移1FEH-偏移1FFH)是分区结束标志。
主引导记录中包含了硬盘的一系列参数和一段引导程序。
其中的硬盘引导程序的主要作用是检查分区表是否正确并且在系统完成自检以后引导具有活动标志(80H)的分区上的,并将控制权交给活动盘上的操作系统的启动程序。
MBR是由分区(如Fdisk,SmartFDisk,DM,PQmagic等)所产生的,它不依赖哪一种,而且硬盘引导程序也是可以改变的,从而实现多系统共存。
主引导区的引导程序也可以全部为0,只是此时的硬盘不能引导起动。
不论硬盘所装的什么样的操作系统,其MBR区的分区表的结构是一样的,引导程序在操作系统下基本一样,MS6.22和MSDOS7.0不一样,其内容有所改变,但工作原理是一样的。
如果你的电脑C盘安装的是NT操作系统时,其MBR区的引导程序就会和WIN98的不同。
每个硬盘都只能有一个主引导区,扩展分区表可以有多个。
硬盘的分区表偏移长度所表达的意义
偏移量
内容说明
大小
分区状态(00h=非活动Inactive,80h=活动Active&
分区开始的磁头数
分区开始的柱面和扇区数
分区类型
分区结束的磁头数
分区结束的柱面和扇区数
第一个分区和MBR区之间的扇区总数,即隐含扇区总数。
分区中的扇区总数
偏移量01-03H字节表示的柱面数和扇区数的计算方法
CylinderBits7to0CylinderBits9+8SectorBits5to0
常用分区类型如下所示
数值
未知类型或不用
12BIT的FAT格式
16BIT_FAT表,空间小于32M
扩展MS_DOS分区
16BIT空间大于32MB
使用32BIT_FAT表,磁盘空间最大2GB
使用32BIT_FAT表,采用LBA模式,调用INT13扩展中断
使用16BIT_FAT表,调用INT13扩展中断
扩展MS_DOS分区,采用LBA模式,调用INT13扩展中断
■例:
下面是硬盘的MBR扇区内容:
上表内容左侧为偏称地址,中间为扇区内容16进制表示,右侧为ASCII表示,下同
分析硬盘分区表的内容定义:
其中从地址地03BE处的80开始到地址03FD处结尾,其间就是所谓的硬盘分区表,共64个字节,每个分区占16个字节。
也就是说不管硬盘有多大,最多也只能有四个主分区(扩展分区也是一个主分区)。
我们通常在WIN98下使用FDISK分区分区时,只分了一个活动分区和一个扩展分区。
从上面的分区表的内容我们可以看出,这个硬盘一共有3个主分区,两个0B分区(其中一个是隐含的,即在WIN98和其他中是不可见的)和一个0F扩展分区。
分区表中的“800101000BFE7FE63F00-0000E8607700”这一段内容就表示第一个主分区参数。
其中:
偏移地址BEH:
80表示当前分区为活动状态(如果该块硬盘不只有一个主分区,那么该位置的80H也可能是00H)
偏移地址BF-C1H:
01
00表示起始的磁头1柱面1,扇区数0
偏移地址C2H:
0B表示该分区是FAT32格式
偏移地址C3H-C5H:
FE
7F
E6
表示结束的磁头254D柱面486D扇区数63D
偏移地址C6H-C9H:
3F
00
00表示该硬盘有0000003FH(63D)个隐含扇区(也就是硬盘主引导区所在的0道0面的全部扇区)
偏移地址CAH-CDH:
E8
60
77
00表示该分区的全部扇区数(7760E8H=7823592D)
注意:
1)分区表中的内容全部是十六进制,并且高位在前,低位在后。
2)偏移地址C2H表示的分区类型常用的,04,05,06,0B,0C,0F,07等,如果把其前面的0改为1即,14,15,16,1B,1C,1F,17就表示该分区为隐含分区。
2.硬盘逻辑锁加锁的原理
一个完整的硬盘锁程序,就是人为的改写0柱面0磁头1扇区的引导程序,并将分区表破坏,并故意制造一个循环分区表,而将真正的硬盘分区表参数和引导程序放在其它隐藏扇区并保护起来。
在从自身启动时校验口令是否正确,如果口令不正确则无法启动电脑;
如果口令正确,则把硬盘分区的内容改为正常值读入内存,这时系统就可以顺利启动。
对于加锁的硬盘,即使我们把它放到别的机子也是不能启动的。
没有密码您无法读取硬盘中的信息和数据,这对于保护硬盘中的数据是一种非常好的办法。
但是如果想更安全,就必须把硬盘分区表中的内容进行加密存储,那时即时您使用这里介绍的方法启动电脑了,也无法正确读取硬盘分区表中的内容。
要想读取就必须了解程序的加密原理,然后解密。
三、硬盘逻辑锁加锁的方法
1)如果“55AA”的内容丢失,计算机不能从硬盘启动,系统提示:
“DISKBOOTFAILURE,INSERTSYSTEMDISKANDPRESSENTER.”,但是我们即使从软盘启动,也没有硬盘,用FDISK/STATUS命令显示硬盘未使用。
例如:
106C:
03C001000BFE7FE63F00-0000E86077000000......?
....`w...
03D041E71BFEBF652761-7700BF211F000000A....e&
#39;
aw..!
....
03E081660FFEFFFFE682-9600151DCC010000.f..............
03F00000000000000000-0000000000000000..............U.
还有,如果硬盘分区表中的活动标志都为“00H”时,这时硬盘也是不能启动的,但是由其他盘启动后,可以正常读取硬盘文件。
2)如果将硬盘分区参数全部变为0,这时由于没有分区参数存在,从硬盘是没法启动系统,这时从软盘启动后也无法认硬盘,这时系统认为硬盘是新的。
当你敲入盘符C:
并回车,将出现提示“Invaliddriverspecification”。
不过,我们还能够启动我们的计算机。
03D00000000000000000-0000000000000000A....e&
03F00000000000000000-00000000000055AA..............U.
3)如果将硬盘分区表参数改成一个循环链,即将D分区起始柱面,扇区数,磁道数指向C分区开始的起始柱面,磁道数,扇区数。
当计算机启动时,主引导程序分析硬盘分区表时就进入死循环状态,计算机无休止的读取分区信息。
这时无论我们是从硬盘启动还是从软盘启动,到检测硬盘那一步就死机。
具体表现为当出现“UpdateDMIdata”后,计算机只有光标闪烁,没有其他任何反应。
但是这种做法如果想恢复硬盘数据时也比较麻烦,在操作前必须对硬盘的主引导区数备份。
03C001000BFE7FE63F00-0000E86077000001......?
03D001001BFEBF652761-7700BF211F000000A....e&
这种方法只是部分硬盘能够被锁住。
4)通常的硬盘逻辑锁是将硬盘0柱面0磁头1扇区的1BF处改为01H改为00H,这就是把第一个主分区C盘的起始磁头数改为00,表示C盘从0面0道0区开始,这时计算机在启动时便进入死循环状态。
这种加锁硬盘的好处时,可以方便的改回正常状态。
有的加锁程序如恢复精灵和硬盘锁等程序不但把1BF处的01H改为00H,还同时把1C2处的值改为05H(该处的值一般为0BH或0CH)。
03C0010005FE7FE63F00-0000E86077000000......?
这种方法只要一改过存锁后重启计算机后肯定锁上,大多数逻辑锁都采用这种方法,恢复也很简单,只要把00H改为01H,再把05H改为0BH或0CH就可以了。
5)如果某个主分区的06-09表示该分区之前的扇区总数不等于前面分区的扇区总数加上隐含扇区总数,这时硬盘从自身可以启动,但不能从软驱,启动,也不能挂在别的硬盘启动。
也就是说:
地址2D6H-2D9H之间的“3F”加上地址2DAH-2DDH之间的“E8
00”应该等于3D6H-3D9H之间的“27
61
00”,即3F+7760E8=776127。
注意:
在数据格式中,高位数据在后,低位数据在前。
因此我们可以人为的通过磁盘编辑将“27
00”改为其他值一,使硬盘分区表出现错误而造成硬盘被锁。
这种产生的原因是在计算机工作过程中,因为外界的强脉冲干扰或意外的掉电可能会造成硬盘分区表中的数据改变。
这种锁法只对部分硬盘有效,有的硬盘改过后不影响正常使用,可以照常读写。
6)我们也可以把磁盘空间大于2G的FAT32格式的硬盘设置为FAT16的04,05,06格式,人为的造成硬盘错误。
7)我们也可以把硬盘的终止扇区号,柱面号,磁头号改为其他分区的终止扇区号,柱面号,磁头号。
8)将扩展分区表中的某个分区的首尾指针重新指向其前面的分区的首尾指针。
四、造成硬盘被锁的原因
1)使用硬盘加密后,忘记进入密码。
2)接收了具有恶意破坏功能的电子。
3)感染。
4)使用硬盘分区工具软件时意外掉电或关机或死机。
五、解锁的原理
我们再分析一下WIN98和MS启动软盘中的系统文件。
在WIN98中只有一个IO.SYS,而在MSDOS中有IO.SYS和MSDOS.SYS。
IO.SYS文件是输入输出管理文件(InputandOutput),它包含LOADER、IO1、IO2、IO3四个模块,其中IO1中包含有一个很关键的程序SysInt_I,它在启动中很固执,非要去读分区表,而且不把分区表读完誓不罢休。
如果碰上分区表是循环的,它就只有死机了,这是MSDOS的脆弱性和不完备性。
DOS为了获得硬盘使用权必需读分区表参数,而且DOS还约定器号不能超过26,这是系统的者没有考虑到此等循环分区表的严重后果。
注:
如果我们把加锁的硬盘挂在2000系统下就可以正常启动,并可以通过的磁盘工具将有问题的分区表进行修复。
如果在计算机从软盘启动过程中,我们人为的改动系统文件,不允许系统在启动过程中读取硬盘分区表中的内容也就是跳过正常的硬盘检测功能,这时我们可以启动计算机了。
六、制作特殊的启动盘
通过以上的分析你就明白了硬盘逻辑锁是怎么一回事了。
我们只要制作一张特殊的启动软盘(当然也可以做成启动),就可以解决。
1.用DEBUG制作特殊的启动软盘
1).下面是写入软盘0磁道0头1扇区的源程序,程序用debug输入。
0100CLI
0101XORAX,AX
0103MOVDS,AX
0105MOVES,AX
0107MOVSS,AX
0109MOVAX,7C00
010CMOVSP,AX
010ESTI
010FMOVSI,AX
0111MOVDI,7E00
0114CLD
0115MOVCX,0200
0118REPNZ
0119MOVSB
011AJMP0000:
7E1F
011FMOVCX,0003
0122PUSHCX
0123MOVAX,0201;
读启动软盘的引导扇区
0126MOVBX,7C00
0129MOVCX,4F01
012CMOVDX,0100
012FINT13
0131POPCX
0132DECCX
0133JNZ0122
0135MOVAX,[004C];
抢先获取INT13H的位置
0138MOV[7E88],AX
013BMOVAX,[004E]
013EMOV[7E8A],AX
0141MOVAX,[0413]
0144DECAX
0145MOV[0413],AX
0148MOVCL,06
014ASHLAX,CL
014CMOVES,AX
014EXORAX,AX
0150MOVDS,AX
0152MOVSI,7E6D;
复制改写的INT13H程序到高端内存
0155MOVDI,0000
0158MOVCX,0030
015BREPNZ
015CMOVSB
015DMOVAX,0000;
将新INT13H位置写入中断向量表
0160MOV[004C],AX
0163MOVAX,ES
0165MOV[004E],AX
0168JMP0000:
7C00
016DPUSHF;
新INT13H程序
016ECMPDX,0080;
是否是硬盘
0172JNZ0176;
不是硬盘则继续
0174POPF
0175IRET;
是硬盘则直接返回
0176CMPDX,+00;
是否读软盘BOOT区?
0179JNZ0186
017BCMPCX,+01
017EJNZ0186
0180MOVCX,4F01;
是则读79磁道1磁头1扇区
0183MOVDX,0100
0186POPF
0187JMP0000:
0000;
此处跳转去执行旧INT13,0188
;
旧INT13H的位置由前面程序获得后写入。
2&
程序的装载
在进行下面工作前,先用格式化一张启动的系统盘,并保证没有坏扇区,最好进行启动测试,确保其可以启动机子。
由于现在机子上大多只有3寸软驱,因此选择1.44M的3.5寸软盘。
然后用debug将程序调入内存偏移地址为100H,同时在400H处写入一段装载程序。
即:
0400MOVCX,0003
0403PUSHCX
0404MOVAX,0201;
将A盘引导程序读入内存1000H处
0407MOVBX,1000;
为确保成功,首次采用重复读3次
040AMOVCX,0001
040DMOVDX,0000
0410INT13
0412POPCX
0413DECCX
0414JNZ0403
0416MOVAX,0301;
将已读入内存的软盘引导程序写入软盘
0419MOVBX,1000;
最后一个磁道的首扇区
041CMOVCX,4F01
041FMOVDX,0100
0422INT13
0424MOVAX,0301;
将程序写入软盘0磁道0磁头1扇区
0427MOVBX,0100
042AMOVCX,0001
042DMOVDX,0000
0430INT13
0432INT3
为保证万无一失,最好将软盘这两个扇区的内容重新读出来看一看,以保证写成功了。
做好这一切,保险的还是进行一次测试,即用该软盘启动一次机子,看能否成功,若成功启动,你就可以用循环分区表法锁住硬盘,看从正常DOS下能否启动,然后再用此软盘启动机子试试,看看功效如何?
从该软盘启动后,不认硬盘,并且在高端内存驻留了新INT13H程序,该段程序实际上是中从16D到187部分。
由于有此段程序存在,在debug下也无法读硬盘,也就没法恢复硬盘分区表,因此机子启动后首先应修改这段程序。
现在的机子基本内存通常都为640K,这样这段程序就位于内存中9FC0:
0000处,在debug下,用U9FC0:
0显示这段程序,可以看到位于9FC0:
001A处是一条跳转指令,该跳转指令即转去执行最原始的INT13H。
由于BIOS版本不一样,跳转指令指向的位置可能不一样,如笔者机子上是一条JMPF000:
A5D4语句。
这时在在debug下编写这样一语句:
a9FC0:
0JMPF000:
A5D4。
这样,对硬盘的禁写与禁读都不再起作用了,在debug下用INT13H的2号子功能可以读出硬盘分区表,修改恢复后再用3号子功能将数据写回分区表。
退出debug,重新用正常DOS启动计算机,就可以了。
附带提一下,在正常DOS下,该软盘由于没有BOOT区,也就没有参数表,从而不能使用,用DIRA:
命令会出现GeneralfailurereadingdriveA提示。
不要理睬它,这并不影响它作特殊启动盘。
还有,在网上有专门解江民逻辑炸弹的程序,那个解锁软盘的解锁程序就在软盘的引导区里。
不过这个软盘还可以用来存储数据,只是不能用来启动系统。
只要我们启动了计算机,就可以利用以下的方法解开硬盘的逻辑锁了。
2.