当前位置:天才代写 > tutorial > C语言/C++ 教程 > KV300技能阐明(有关硬盘锁)

KV300技能阐明(有关硬盘锁)

2017-11-06 08:00 星期一 所属: C语言/C++ 教程 浏览:477

副标题#e#

注:此措施有必然的风险性。老妖也没有试过。但愿各人思量清楚了再行事。

要不是亲自试一下,你必然不会相信,运行下面的措施,你的呆板将不能从软盘启动,更不能从硬盘启动。而这个措施仅仅修改了你的硬盘的扩展DOS分区的首埋没扇区。

code segment
assume cs:code,ds:code
org 100h
begin:
xor ax,ax
mov dl,80h
int 13h ;复位硬盘
mov ax,201h
mov bx,200h
mov cx,1
mov dx,80h
int 13h ;读主引导扇区到200H
mov cx,ds:[3d0h]mov [3ceh],0
mov bx,210h
mov ax,301h
int 13h ;写扩展分区首埋没扇区
int 19h ;快启动
code ends
end begin

措施很短,你可以在DEBUG中输入并运行。在编译成.com 之后,运行之前请生存好硬盘的扩展DOS分区的首埋没扇区的内容,以备未来规复时用。

笔者是在体例一个硬盘加锁措施时,因计较有误而偶尔发明这一点的。仅仅因为修改硬盘一个埋没扇区,造成呆板从软硬盘都不能启动,从未见资料提及。作者其时很惊奇。

为了办理问题,笔者按复位键,进入CMOS配置,将硬盘配置为未安装,则可以从软盘启动,可是,利用INT13h仍不能读写硬盘,因此无法将被粉碎的扇区复兴。

笔者预计是引导进程中,读取硬盘分区表时形成轮回的缘故。来由有两点:

1、因为仅仅修改硬盘一个扇区,造成了如此现象,而该扇区仅记录了硬盘分区表的一些信息;

2、启动进程中,不管从软盘启动照旧从硬盘启动,最终的现象都是硬盘灯第亮。因此,换用不支持硬盘分区的低版本DOS系统盘也许可以或许启动,利用2.0版的系统盘,公然可以在CMOS配置为硬盘正常安装的环境下启动呆板,启动后虽仍不能进入硬盘,但可以用INT13h读写硬盘。在DEBUG顶用正常的内容包围硬盘的扩展DOS分区的首埋没扇,从头启动呆板,乐成。


#p#副标题#e#

为什么从软、硬盘启动城市造成读硬盘分区的死轮回呢?笔者为此对硬盘分区表及DOS引导进程举办了阐明,提出几点粗浅观点,供参考。

各人知道,硬盘分区表位于主引导扇区的1BEh与1FDh处,占64个字节,共4个分区项。

每个表项对应一个逻辑分区,每个表项占16个字节,其寄义见表。

=====================================

偏移量  含 义

=====================================

0    引导符号(80h暗示勾当分区,00h暗示非勾当分区,其他值犯科)

1    天职区的起始磁头号

2-3   天职区的起始扇区号和起始柱号

4    分区范例(1-DOS,12位FAT;2-XENIX;4-DOS,16位FAT,小于32M;

5-扩展DOS;6-DOS,16位FAT,大于32M;0DBh-并发DOS.

5    天职区的竣事磁头号

6-7   天职区的竣事扇区号和竣事柱号

8-B   天职区的相对扇区号

C-F   天职区的扇区数

=====================================

各逻辑分区首埋没扇区与主引导扇区雷同,在偏移1BEh到1DDh处,记录两个分区表项第一表项对应于天职区,第二表项则对应于下一分区,各字节寄义同上。这样,各逻辑分区通过首埋没扇区的分区信息表串起来形成了DOS硬盘分区的所谓链式布局,使得DOS可以或许打点多个逻辑分区。DOS引导时,不管是从软盘启动照旧从硬盘启动,都将搜索这条链,以便为各逻辑盘成立磁盘基数表。

值得留意的是分区范例(偏移04h)中的扩展DOS分区是相对来说的,D盘相对付C是扩展DOS分区,但相对自己来说不是扩展的,因此在主引导扇区对应于D盘的分区表项中该字节为5,在D盘首埋没扇区此处应为1、4或6。相应地,某表项若04h字节为5,则01-03h三字节就记录所对应分区的首埋没扇区的物理地点,若04h字节为1、4或6(此时该表项必为第一表项),则01-03h字节记录所对应分区的DOS引导扇区。DOS搜索链表成立磁盘基数表的进程是这样的:首先查抄分区范例,若为1、4或6,则从01h-03h取分区dos引导扇区地点,按照引导扇区和分区表信息成立该分区的磁盘基数表,然后转向下一表项(假如有的话);若为5,则从01h-03h取该分区首埋没扇区地点,并转向该扇区,判定该扇区分区表,筹备成立下一分区的磁盘基数表;若04h为其他值则跳过,而调试措施运行后,04h字节被误置为5。引导时,DOS据此认为该表项指向下一个DOS扩展分区,于是从01h-03字节取“下一个”分区的起始物理地点,读取下一个分区的首埋没扇区,而此处又被误置为D盘的首埋没扇区的地点,于是呆板就陷于读取D盘首埋没扇区的死轮回中。

#p#副标题#e#
#p#分页标题#e#

固然产生如此环境的大概性微乎其微,但一但呈现,造成的危害不行低估,因为低版本的DOS已非常难找到,纵然找到也需要对硬盘分区表相识较深,才气挽救。作为一个完善的操纵系统,应该在任何环境下都是无懈可击的,并且仅需加几条指令就可制止如从此果,这不能不说是设计者的一个失误。更高版本的DOS是否留意到了这一点呢?笔者为此曾用dos3.30,5.0,6.20在多种型号的呆板上试验,均呈现上述现象。

固然这是一个失误,但我们可以操作它做一些有益的事。好比:许多硬盘加锁软件,固然可以做到从软盘启动不能利用硬盘,但无法制止对硬盘相识较深的人通过修复主引导扇区进入硬盘,因此,要到达完全锁住硬盘,必需做到从软盘不能启动呆板。DOS的这个失误为此提供了大概。笔者操作此点编写了一个硬盘主引导措施,使得呆板只能从硬盘启动,而且必需输入正确的口令;从软盘启动则死机。

首先,《失误》文中所述DOS对逻辑分区的打点机制根基上正确的,DOS的这种链表式数据布局,可以说处处可见,在设备打点中、在内存打点中、在文件打点中,可谓触目皆是,并且严格地讲,不只DOS如此,其他操纵系统亦如此。文中所述要了解造成死机,这是事实,但进而就说这是DOS的一个失误,可就不该该了。原因很简朴:在DOS的这些链表式布局中,不管改变了哪一个,都大概引起死机。好比:改变了内存链(即MCB链),使之不切合DOS的要求,则顿时就会死机。能因此就说这是DOS的失误吗?显然是不符合的。作为用户,要求DOS能在任何环境下,都能正常运行,是可

以领略的,但这也是不行能的。事实上,任何一种操纵系统,进而言之,任何一种软件,都不行能做到。那么,从开拓的角度,可能说从措施设计的角度,用户要设计一个较初级(指打点上)一点的措施,使其能和DOS一起事情,甚至节制DOS的事情,大概就要牵扯到对这些链表的操纵,怎么办呢?一句话,必需适应DOS!(不行能让操纵系统去适应您)好比想本身去打点内存,就必需切合DOS的打点方法,使DOS认为是公道的,不然DOS就死了。再好比想经受DOS的磁盘打点,也必需如此,不然,固然DOS不至于顿时就死,但会造成磁盘的杂乱和数据的丢失。

#p#副标题#e#

其次,《失误》文中认为这是加密的一个好要领,实际上也否则。应该说《失误》文中谈到的各种现象都确实是存在的,即:硬盘、软盘启动功效都是死机,硬盘灯常亮。但并不是没有步伐办理。这里应该先明晰一点, DOS为各逻辑盘成立磁盘基数表(即成立设备打点链表)的进程是由IO.SYS(或IBMIO.COM)文件来完成的,大白了这一点,我们就可以在IO.SYS取得节制权之前,先行一步,即:对软盘的DOS引导扇区–0面0道1扇区直接编程,就可以解除《失误》文中所述的环境(不熟悉DOS引导进程的读者,可参考有关专著,这里不作论述)。

有一个最简朴的办理步伐就是把硬盘的主引导扇区改为无效。然后就可以用软盘启动了,也可以用一些磁盘维护东西(可能直接用INT13H),来对硬盘事情了。好比:

规复主引导扇区和被粉碎了的“扩展分区首埋没扇区”。详细操纵如下。

首先用另一台计较机,找一张名目化好的软盘,插入A驱或B驱。按如下输入:

C:\DEBUG
-a 100
mov ax,0301
mov bx,0200
mov cx,0001
mov dx,0000
;假如您的软盘在B驱,这里应改为:mov dx,0001
int 13
int 3
-a 200
mov ax,0301
mov bx,0200
mov cx,0001
mov dx,0080
int 13
int 3
-g=100

执行完后,将软盘从驱动器中取出,此时这张盘就成了"开锁的钥匙",将其插入“病”计较机的A驱,打开电源,启动“病”计较机,显然这张盘并不是系统盘,不能真正启动“病”计较机,但待这张盘“启动”完后(硬盘灯亮了一下,显示器上无任何显示),再插入真正的系统盘,关机,再从头启动,就可以了。

虽然,大白了这一原理后,大概会有更好的要领,以上就算是抛砖引玉吧。

留意:不要修改CMOS。软错误虽然软办理,千万不能将CMOS配置硬盘为未安.

 

    关键字:

天才代写-代写联系方式