中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS学习入门 & 精彩文章 (教学室) » 堵上DOS漏洞,破除硬盘锁的神话 [转帖]
English/Chinese Fix Translation
作者:
标题: 堵上DOS漏洞,破除硬盘锁的神话 [转帖] 上一主题 | 下一主题
ko20010214
版主




积分 7296
发帖 1628
注册 2002-10-16
状态 离线
『楼 主』:  堵上DOS漏洞,破除硬盘锁的神话 [转帖] [已使用 LLM 解释]


发信站: BBS 水木清华站 (Sat Apr 11 19:45:47 1998)

    从DOS3.3以上(含3.3版〕版本,增加了硬盘分区功能,但
是可能是编程者的疏忽,在IO.SYS的一个模块中有一个漏洞。由于该
漏洞,使得在某种情况下,会导致计算机从软硬盘启动均会失败。
    在一般情况下,这个漏洞也无关紧要。但是由于国内某著名
反病毒软件公司利用这一漏洞进行所谓版权保护,导致一些问题。由于
当软硬盘都不能启动时,危害极大。因此,介绍一种方法,可以堵上
这一漏洞,而保证DOS的其它功能仍正常,换句话说,修改后的DOS可同
正常的DOS一样使用。
    鉴于这种方法是通过对DOS内核汇编代码的分析,直接修改
IO.SYS文件,因此对于不同的DOS版本,情况略有不同。以下仅针对两
种典型的DOS版本,给出方案。
    1.西文MS-DOS6.22版修改方案: 用nu, debug, pctools,
     ultraedit等工具查找 IO.SYS文件中的串(以16进制表示〕:
            C2 03 06 E8 0A 00 07 72 03
        替换为:C2 03 90 E8 0A 00 72 80 90
     实际上只改动了四个字节。(其实该法也适合中文版
     MS-DOS6.22〕

    2. 西文IBM-DOS3.3版修改方案: 查找文件IBMBIO.SYS中串:
            C2 03 E8 2B 00 72 25 E8 2C
        替换为:C2 03 E8 2B 00 72 92 E8 2C
      实际上只改动了一个字节。

    3. 对于其它DOS版本,也可类似处理。

    在对DOS作如上的修改之后,则DOS的启动失误被纠正,再也
不会发生那种从软硬盘均不能启动的情况(当然那种软硬盘的硬件本
身出了问题的情况不包括在内〕。
    
    注意:1.本法不同于以前的各种方法。只需对系统盘的DOS作如
        上修改,任何其它的修改都是多余的甚至有害的。
       2.用以上方法修改过的DOS可正常使用,用完后不用再
        改回去。
    至于为什么要这样改,这样改又为什么能纠正启动失误,相信
有兴趣且懂汇编的朋友不难明白。


    !!!重要声明:介绍本法纯属技术问题,本人并无意与任何
            公司过不去,并非针对某种行之有效的保护
            版权的措施。若因本法的传播导致某种有效
            的保护版权的方法失效,则非本人本意。本
            人大力鼓励使用正版尤其是国产软件。
LLM 解释

这份发布于 1998 年的技术帖(后于 2003 年转贴至 CN-DOS)讨论的是早期 DOS 时代臭名昭著的“硬盘锁”问题及其内核层面的规避方案。

1. 技术背景:什么是“硬盘锁”?

“硬盘锁”并非硬件层面的锁定,而是利用了 MS-DOS 在启动过程中对分区表(Partition Table)链表结构的递归扫描机制。

在 MS-DOS 3.3 及更高版本中,为了支持逻辑分区,系统在初始化阶段会读取主引导记录(MBR)中的分区表。如果存在扩展分区,IO.SYS(或 IBMBIO.SYS)会读取扩展分区的分区表(EBR),并沿着链表查找下一个逻辑驱动器。

漏洞原理: 如果人为构造一个循环指向的分区表(例如:分区 A 的扩展分区表项指向分区 B,而分区 B 又指向分区 A),DOS 在启动时扫描分区表的代码会陷入死循环。由于这种扫描发生在系统加载驱动程序和 CONFIG.SYS 之前,计算机表现为自检通过后,在读取软盘或硬盘系统文件时永久死机。

2. 补丁原理分析

帖子中提供的十六进制修改方案,核心目的在于修改 IO.SYS 中处理磁盘读取错误或分区表解析的逻辑。

  • MS-DOS 6.22 补丁分析: 原始序列:C2 03 06 E8 0A 00 07 72 03 修改序列:C2 03 90 E8 0A 00 72 80 90 在汇编层面,这类修改通常涉及将 JC (Jump if Carry, 72) 或循环指令的目标地址进行偏移,或者使用 NOP (90) 抹除某些检查。通过这种修改,当 IO.SYS 遇到异常的分区表结构(如死循环或非法的磁盘偏移量)时,不再尝试无限递归或因溢出挂起,而是直接跳过该分区或报错返回。

  • 局限性: 这种方法虽然能让受感染/被锁的机器通过软盘启动,但它并没有解决“死循环”本身,而是通过硬编码的方式强行中断了 DOS 对分区链表的完整性检查。

3. 历史语境与后续评价

  • 软件版权保护争议: 文中提到的“国内某著名反病毒软件公司”是指当年的江民(KV300)。当时,KV300 在检测到盗版行为或某些逻辑触发时,会改写硬盘 MBR 制造上述循环分区表,导致用户电脑无法启动。这在当年引发了极大的法律和技术争议。

  • Wengier 与如是大师的回复:

    • Wengier 提到的 FreeDOSPC-DOS:这是从兼容性角度给出的方案。FreeDOS 等开源实现或 IBM 后期版本的 PC-DOS,其内核初始化逻辑与 MS-DOS 不同,部分版本在编写时已经考虑了分区表验证,不会因为循环链表而陷入死机,因此可以使用这些系统的启动盘引导,再运行修复工具(如 FDISK /MBR 或专用重建工具)恢复分区表。
    • 如是大师 的“以前的方法”:暗示在 2003 年时,这类基于 IO.SYS 的二进制修改已经不再是主流。随着 Windows 9x/Me 的普及,以及专门的 MBR 修复工具(如 DiskGenius 的前身 DiskMan)的出现,通过修改 DOS 内核来破解硬盘锁的需求已大幅减少。

4. 补充说明

针对此类“硬盘锁”的最彻底解决方案并非修改 IO.SYS,而是通过不依赖 DOS 中断(INT 21h/INT 25h/INT 26h)的底层磁盘工具,直接调用 BIOS 中断(INT 13h)写入正确的 MBR。在现代模拟环境(如 DOSBox 或虚拟机)中,由于虚拟化层对磁盘结构的保护,这种漏洞通常不会导致宿主机死机,但在维护真实历史硬件时仍需警惕。





ko20010214
=================================
大功告成,打个Kiss!
ko20010214@MSN.com
神州优雅Q300C
Intel CeleronM 370处理器 | 256MbDDR内存
40G硬盘 | USB2.0 | IEEE 1394
13.3 ' WXGA 宽屏(16:10) | COMBO光驱
10/100M网卡 | 四合一读卡器
2003-5-28 00:00
查看资料  发送邮件  发短消息  网志  OICQ (16959102)  编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27736
发帖 10521
注册 2002-10-9
状态 离线
『第 2 楼』:   使用 LLM 解释/回答一下

用ROM-DOS、FreeDOS或PC-DOS启动不就可以了吗?




Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

2003-5-28 00:00
查看资料  发送邮件  访问主页  发短消息  网志  OICQ (29206679)  编辑帖子  回复  引用回复
如是大师
元老会员

步行的人


积分 9654
发帖 3351
注册 2003-3-11
来自 湖北
状态 离线
『第 3 楼』:   使用 LLM 解释/回答一下

这是以前的方法呢。。




弄花香满衣,掬水月在手。
明月鹭鸟飞, 芦花白马走。
我自一过后,野渡现横舟。
青云碧空在,净瓶水不流。
http://dos.e-stone.cn/guestbook/index.asp
======中國DOS聯盟=====
我的新网页http://rsds.7i24.com欢迎光顾
2003-5-28 00:00
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: