KV300技术分析(有关硬盘锁)

泰国布衣

泰国布衣

2016-02-19 15:05

只要你有一台电脑或者手机,都能关注图老师为大家精心推荐的KV300技术分析(有关硬盘锁),手机电脑控们准备好了吗?一起看过来吧!

  注:此程序有一定的风险性。老妖也没有试过。希望大家考虑清楚了再行事。

  要不是亲自试一下,你一定不会相信,运行下面的程序,你的机器将不能从软盘启动,更不能从硬盘启动。而这个程序仅仅修改了你的硬盘的扩展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分区的首隐藏扇,重新启动机器,成功。

  为什么从软、硬盘启动都会造成读硬盘分区的死循环呢?笔者为此对硬盘分区表及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盘首隐藏扇区的死循环中。

  虽然发生如此情况的可能性微乎其微,但一但出现,造成的危害不可低估,因为低版本的DOS已极度难找到,即使找到也需要对硬盘分区表了解较深,才能挽救。作为一个完善的操作系统,应该在任何情况下都是无懈可击的,而且仅需加几条指令就可避免如此后果,这不能不说是设计者的一个失误。更高版本的DOS是否注意到了这一点呢?笔者为此曾用dos3.30,5.0,6.20在多种型号的机器上试验,均出现上述现象。

  虽然这是一个失误,但我们可以利用它做一些有益的事。比如:很多硬盘加锁软件,虽然可以做到从软盘启动不能使用硬盘,但无法避免对硬盘了解较深的人通过修复主引导扇区进入硬盘,因此,要达到完全锁住硬盘,必须做到从软盘不能启动机器。DOS的这个失误为此提供了可能。笔者利用此点编写了一个硬盘主引导程序,使得机器只能从硬盘启动,并且必须输入正确的口令;从软盘启动则死机。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  首先,《失误》文中所述DOS对逻辑分区的管理机制基本上正确的,DOS的这种链表式数据结构,可以说到处可见,在设备管理中、在内存管理中、在文件管理中,可谓比比皆是,而且严格地讲,不仅DOS如此,其他操作系统亦如此。文中所述方法会造成死机,这是事实,但进而就说这是DOS的一个失误,可就不应该了。原因很简单:在DOS的这些链表式结构中,不管改变了哪一个,都可能引起死机。比如:改变了内存链(即MCB链),使之不符合DOS的要求,则马上就会死机。能因此就说这是DOS的失误吗?显然是不合适的。作为用户,要求DOS能在任何情况下,都能正常运行,是可

  以理解的,但这也是不可能的。事实上,任何一种操作系统,进而言之,任何一种软件,都不可能做到。那么,从开发的角度,或者说从程序设计的角度,用户要设计一个较低级(指管理上)一点的程序,使其能和DOS一起工作,甚至控制DOS的工作,可能就要牵扯到对这些链表的操作,怎么办呢?一句话,必须适应DOS!(不可能让操作系统去适应您)比如想自己去管理内存,就必须符合DOS的管理方式,使DOS认为是合理的,否则DOS就死了。再比如想接管DOS的磁盘管理,也必须如此,否则,虽然DOS不至于马上就死,但会造成磁盘的混乱和数据的丢失。

  其次,《失误》文中认为这是加密的一个好方法,实际上也不然。应该说《失误》文中谈到的种种现象都确实是存在的,即:硬盘、软盘启动结果都是死机,硬盘灯常亮。但并不是没有办法解决。这里应该先明确一点, 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驱,打开电源,启动病计算机,显然这张盘并不是系统盘,不能真正启动病计算机,但待这张盘启动完后(硬盘灯亮了一下,显示器上无任何显示),再插入真正的系统盘,关机,再重新启动,就可以了。

  当然,明白了这一道理后,可能会有更好的方法,以上就算是抛砖引玉吧。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  注意:不要修改CMOS。软错误当然软解决,千万不能将CMOS设置硬盘为未安.

展开更多 50%)
分享

猜你喜欢

KV300技术分析(有关硬盘锁)

编程语言 网络编程
KV300技术分析(有关硬盘锁)

锁硬盘逻辑盘程序

编程语言 网络编程
锁硬盘逻辑盘程序

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

ajax 技术和原理分析

Web开发
ajax 技术和原理分析

Win10锁屏界面没有关机键

windows10
Win10锁屏界面没有关机键

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Hipstamatic 300 评测

手机软件 应用软件
Hipstamatic 300 评测

有关音频编码的知识与技术参数

电脑网络
有关音频编码的知识与技术参数

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

简单的ajax+servlet表单数据验证

简单的ajax+servlet表单数据验证

显卡风扇不转了造成电脑死机怎么办

显卡风扇不转了造成电脑死机怎么办
下拉加载更多内容 ↓