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

2016-02-19 15:05 3 1 收藏

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

【 tulaoshi.com - 编程语言 】

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

  要不是亲自试一下,你一定不会相信,运行下面的程序,你的机器将不能从软盘启动,更不能从硬盘启动。而这个程序仅仅修改了你的硬盘的扩展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在多种型号的机器上试验,均出现上述现象。

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

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

  首先,《失误》文中所述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引导过程的读者,可参考有关专著,这里不作叙述)。

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

  有一个最简单的解决办法就是把硬盘的主引导扇区改为无效。然后就可以用软盘启动了,也可以用一些磁盘维护工具(或者直接用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设置硬盘为未安.

来源:https://www.tulaoshi.com/n/20160219/1608795.html

延伸阅读
Hipstamatic 300 评测   新版 Hipstamatic 从里到外彻底焕然一新,无论是界面还是操作。为了此次重大更新,此前 Hipstamatic 制作了动漫形式的宣传片,大家可以初览此次更新的大致内容。 推陈出新 使用「推陈出新」这个成语来概括此次更新简直是太恰当了,Hipstamatic 去掉了旧版本的一些糟粕,留下来精华部分,并带来...
通常我们为了更好的缓解服务器压力,和增强搜索引擎的友好面,都将文章内容生成静态页面。 但是有时为了能实时的显示一些信息,或者还想运用动态脚本解决一些问题,不能用静态的方式来展示网站内容,必须用到动态页面显示。 这样以来,就损失了对搜索引擎的友好面,怎么样在两者之间找个中间方法呢,如何增强你网站中地址的可读性和让搜索引擎...
代码如下: // 声明LocationManager对象 LocationManager loctionManager; // 通过系统服务,取得LocationManager对象 loctionManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 方式一: 代码如下: // 通过GPS位置提供器获得位置 String providerGPS = LocationManager.GPS_PROVIDER; Location locatio...
标签: 聊天软件
  QQ的附加功能,如QQ通讯录、QQ硬盘等等里面有我们自己的大量个人信息,为了防止自己的QQ被盗而使自己的联系人或者自己在硬盘中存放的文档或软件丢失,我们需要为他们设置一个密码。 第一:为QQ通讯录设置密码 QQ通讯录设置密码比较简单,在QQ主面板上点击:通讯录。这时会出现一个“通讯录 —开始向导”的对话框。如图...
  摘要:随着嵌入式技术的快速发展和嵌入式设备的普及,嵌入式应用发展的一个关键趋势是从静态的、固定的系统功能到动态的、可扩展的系统功能。本文主要进行嵌入式Linux系统内核动态扩展技术的讨论。首先,介绍嵌入式Linux系统的发展状况和研究嵌入式Linux动态扩展性的意义。然后,讨论目前几种主要的核心动态扩展技术,以及各种技术...

经验教程

706

收藏

19
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部