无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 1723|回复: 11
打印 上一主题 下一主题

《精 品 之 再 論 制 硬 盘 逻 辑 锁》

[复制链接]
跳转到指定楼层
1#
发表于 2006-7-26 21:37:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

一、序言

由于教学工作需要,本人在参看了贵刊98年第4期《硬盘逻辑锁技术研究及应用》与99年第3期《解开硬盘逻辑死锁的一种有效方法》的文章之后,决定以同类方法尝试一下,结果未获得成功,又“苦于”没有KV300 L++ 版,不得不自己做一个硬盘逻辑锁。在制作过程中发现,仅仅只做循环链表是不够的,并不能锁住硬盘。以下是本人经过多次实验后,总结出的一套加锁和解锁的方法,(本文所述均在本机上获得通过!)以供大家参考。硬盘逻辑锁的原理请参见以上文章。


二、制作前的准备:

    先将本硬盘(笔者使用的是Quantum SE 3.2G硬盘,C盘2.1G,D盘1.1G)的主引导程序(即0磁头0柱面1扇区的内容)备份到软盘中,这里是保存在软盘0磁头0柱面2扇区中,以便万一做不成功时,进行恢复。

C:\DOS>DEBUG

-a 100

mov ax,201

mov bx,200

mov cx,1

mov dx,80

int 13      ;读硬盘0磁头0柱面1扇区的内容到ES:200处

mov ax,301

mov bx,200

mov cx,2

mov dx, 0

int 13      ;写ES:200处内容到软盘0磁头0柱面2扇区

int 3



-g=100

;然后制作一张“启动盘1” :

-a 200

mov ax,201

mov bx,2000

mov cx,2   

mov dx,0   

int 13     ;读软盘0磁头0柱面2扇区的内容到ES:2000处

jb 200     

mov ax,301

mov bx,2000

mov cx,1   

mov dx,80  

int 13     

jmp ffff:0000



-w 200 0 0 1 ;执行此命令之前插入上述软盘,将这一段起引导作用的程序写到软盘的0磁头0柱面1扇区,使之成为一张特殊的“启动盘1”。


三、制作硬盘锁   

    我们先看一看硬盘分区表的信息(下述为实例,读者在操作中,显示的段地址不一定是1186):

C:\DOS>DEBUG

-a100

1186:0100 mov ax,201

1186:0103 mov bx,200

1186:0106 mov cx,1

1186:0109 mov dx,80

1186:010C int 13

1186:010E int 3

1186:010F ↙

-g=100


-d 3b0 L 50

1186:03B0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 80 01   

                                   起始磁头号

                 起始柱面号(01的高2位并上00)  

1186:03C0  01 00 06 7F BF 07 3F 00-00 00 C1 FB 3F 00 00 00   

                         结束磁头号、扇区号、柱面号(格式同前)

                 起始扇区号(01的低6位)

1186:03D0  81 08 05 7F FF 0C 00 FC-3F 00 80 1D 20 00 00 00   

1186:03E0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   

1186:03F0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA   


-e 3c2

02   ; 将分区类型 06 改为 02,即XENIX,该字节含义如下:

                0-无效分区

                1-DOS 12位FAT

                2-XENIX

                4-DOS 16位FAT 分区容量<32M

                5-扩展DOS分区

                6-DOS 16位FAT 分区容量>32M   

-e3d0

01  00 ;将D区的起始扇区号和柱面号改为与C区相同的起始扇区号和柱面号,形成循环链表

-a 100

1186:0100 mov ax,301

1186:0103 ↙


-g=100

;将改后的内容写入硬盘主引导扇区

-a 100

1186:0100 mov ax,201

1186:0103 ↙


-g=100

;再次读出硬盘主引导扇区内容

-d 3b0 L 50


1186:03B0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 80 01   

1186:03C0  01 00 02 7F BF 07 3F 00-00 00 C1 FB 3F 00 00 00  

1186:03D0  01 00 05 7F FF 0C 00 FC-3F 00 80 1D 20 00 00 00  

1186:03E0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   

1186:03F0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA  


;显示表明以上分区表内容已改好

-q

;退出DEBUG,重新启动系统,一切OK!Haha,软盘、硬盘都不能启动系统了!


四、症状说明:

    1.只修改C盘的分区类型,即将分区类型06改为02后,硬盘不能启动,A盘可以启动。

    2.只做循环链表,Win95/98不能启动,但DOS 6.22可正常启动,启动后将有相同容量、相同数据的24个逻辑驱动器(从C盘到Z盘),启动时提示如下错误信息:

       Warning: Logical drives past Z exist and will be ignored

           笔者在多年前就做过循环分区链表,它对DOS 6.22 的启动可以说无效,但对付DOS 6.22 的FDISK命令很管用,一运行就“死机”(同 Win95/98 启动一样,因循环检查分区链表而呈死机状)。

    3.以上两条都修改后,C盘、A盘的DOS 6.22 都不能启动,但可用 A 盘的DOS 3.3启动,启动后可以运行FDISK命令,也可用DEBUG等工具修改分区表(无需顾及C盘容量是否超过33M)。

       由此可见,硬盘逻辑锁只针对DOS高版本有效,对DOS 3.3根本不起作用,循环链表对Win95/98 的DOS 即已经有效。


五、解开硬盘锁的方法:

    采用贵刊98年第4期《硬盘逻辑锁技术研究及应用》文中所述修改CMOS的方法也无法启动系统,也就无法解开此逻辑锁,需在另一台机器上制作一张“启动盘2”,具体过程如下:


C:\DOS>DEBUG

-a 100

mov ax,201      

mov bx,2000     

mov cx,1        

mov dx,80      

int 13  

mov al,06     ; C的分区类型改为06     

mov [21c2],al  

mov al,0                              

mov [21d2],al  ; D的分区类型改为0 ,屏蔽其它分区

mov [21e2],al  ; E的分区类型改为0                  目的在于破坏循环链

mov [21f2],al  ; F的分区类型改为0     

mov ax,301   

mov bx,2000   

mov cx,1      

mov dx,80

int 13

jmp ffff:0000



-w 100 0 0 1  ;将本段程序写到软盘的逻辑0扇区,使之成为引导程序

-q

    用作好的“启动盘2”启动死锁机器,然后取出该“启动盘2”,再次开机切换到DOS 6.22系统,此时用 Norton 的 DISKEDIT.EXE 等工具或直接用 DEBUG 即可修复分区表。

    如果按照前面讲的将原主引导备份到软盘物理第二扇,也可以用“启动盘1”恢复主引导扇区的内容,一启动即告成功恢复。




[ 本帖最后由 sansa520 于 2006-7-26 09:44 PM 编辑 ]
2#
发表于 2006-7-26 22:55:36 | 只看该作者
这个玩意可别轻易尝试
回复

使用道具 举报

3#
发表于 2006-7-27 01:09:12 | 只看该作者
debug 可以将这些代码保存成 .com 的命令的,那样的话会更方便些


SORRY!这是我第二次犯了这样的错误了,请老毛桃看在凌晨5:40分的份上,再原谅6618一次,6618保证不再犯这样的低给错误!:L:L:L

[ 本帖最后由 6618 于 2006-7-27 05:51 AM 编辑 ]
回复

使用道具 举报

4#
发表于 2006-7-27 05:52:25 | 只看该作者
原帖由 老毛桃 于 2006-7-27 01:09 AM 发表
debug 可以将这些代码保存成 .com 的命令的,那样的话会更方便些

请问怎样保存成.com
回复

使用道具 举报

5#
发表于 2006-7-27 08:29:02 | 只看该作者
rcx         
:              <----輸入byte 數
n[檔名]   <----英數組合的檔名 如: test.com
w             <---建立test.com , 內容是:  ds:100 起的資料, 長度為cx
q              <---離開
回复

使用道具 举报

6#
发表于 2006-7-27 08:51:49 | 只看该作者
下面是一個簡單的 COM 檔 制作方法

C:\>debug
-a 100                               <--由cs:100處輸入代碼
0AFA:0100 mov dl,0        <--給dl初始值0
0AFA:0102 mov ah,2        <--顯示功能,字元在dl
0AFA:0104 int 21             <--系統呼叫
0AFA:0106 inc dl             <--增量,指向下一個字元
0AFA:0108 jnz 102          <--測試0,若不,跳回102,dl不斷增量至255(FF),再變回0
0AFA:010A int 20            <--結束程式
0AFA:010C
-rcx                                  <--改變cx值
CX 0000                           <--原來值
:c                                      <--輸入長度,  十六進位(hex)的c  =  12 (DEC)
-n test1.com                       <--命名
-w                                     <--寫入
Writing 0000C bytes
-q                                      <--離開  

C:\> test1        <-看看結果吧,這是個列出255 ascii字元的小程式, 長度12bytes
回复

使用道具 举报

7#
发表于 2006-7-27 09:35:43 | 只看该作者
好老的帖子,大概10年前的技术了
回复

使用道具 举报

8#
发表于 2006-7-28 04:40:58 | 只看该作者
原帖由 老毛桃 于 2006-7-27 01:09 发表
debug 可以将这些代码保存成 .com 的命令的,那样的话会更方便些


SORRY!这是我第二次犯了这样的错误了,请老毛桃看在凌晨5:40分的份上,再原谅6618一次,6618保证不再犯这样的低给错误!:L:L:L

晕死!
原帖由 pcs2006 于 2006-7-27 08:29 发表
rcx         
:              <----輸入byte 數
n   <----英數組合的檔名 如: test.com
w             <---建立test.com , 內容是:  ds:100 起的資料, 長度為cx
q              <---離開

6 楼的已经帮我回答了。
回复

使用道具 举报

9#
发表于 2006-7-28 11:53:08 | 只看该作者
看的我好累啊!
回复

使用道具 举报

10#
发表于 2006-8-2 22:30:32 | 只看该作者
Use a non miscrosoft bootable disk to boot the PC,and  you can solve it !
回复

使用道具 举报

11#
发表于 2006-8-5 13:48:05 | 只看该作者
呵呵 绝对的技术活。阿 。江民当年害了很多人 。。
回复

使用道具 举报

12#
发表于 2006-8-8 14:51:58 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2026-1-16 22:12

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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