标题：江民炸弹
简介
1997年6月24日王江民先生在其主页上发布了kv300l++版，内含逻辑炸弹。  
凡是在mk300v4制作的仿真盘（盗版盘）上执行kv300l++的用户硬盘数据均被破坏，
同时硬盘被锁，软硬盘皆不能启动。
Kv300逻辑炸弹可以造成电脑软硬盘都不能启动的现象，
当时在电脑界引起轰动。这是用常规原理不能解释的现象。
kv300逻辑炸弹表现
1．先破坏文件分配表，然后修改分区表造成硬盘被锁。 
2．不做任何备份 
3．没有任何提示 
4．在特定条件下激发（盗版盘） 
5．王江民始终没有公开提供恢复程序； 
6．如果用一般常用的修复磁盘工具，如NORTON,会造成不可逆转的损失； 
7．对其的恢复类似于cih破坏数据的恢复，因为需要重建分区表。 
8．在win95环境下执行同样会造成文件分配表被破坏，数据损失。
处理
1997年7月23日，国内5家反病毒软件公司（以下简称五厂商）在北京联合举行新闻发布会，一起谴责国内另一家著名的反病毒软件公司—北京江民新技术有限责任公司（以下简称江民公司）。在发布会上，五厂商向多家新闻机构发放了一份“联合声明”，称江民公司6月下旬发布的KV300L+ +版反病毒软件（网络下载版）（以下简称KV300，本文无特殊说明，所指的均是这一特定下载版本）中含有“逻辑炸弹”，“在特定条件下对计算机实施破坏，其结果与某些计算机病毒的破坏作用相似……” —7月24日，江民公司对五厂商的“联合声明”做出了强烈反应，认为这时“不正当的侵权行为”，并多次在各专业计算机所刊上登载“严正声明”，江民公司对此的解释是：江民公司并未在KV300中安放任何破坏性程序。五厂商所称的“逻辑炸弹”，其实是江民公司为打击日益猖獗的盗版软件行为而在软件中编制的“逻辑锁”，这一“逻辑锁”首先不可能对任何购买正版产品的用户造成任何影和损失，其次对部分盗版用户也只是起到暂时锁住机器的作用。江民公司特别强调，KV300中的“逻辑锁”与病毒没有关系，因为病毒是具有自我复制和传染性的破坏性程序，而“逻辑锁”却不会对用户数据造成任何伤害 1997年9月8日，公安部门认定kv300L++事件违反计算机安全保护条例之23条,属于故意输入有害数据，危害计算机信息 系统安全的行为，对其做出罚款3000元的决定
关于KV300 '逻辑锁' 的看法
王江民口口声声说 KV300 L++ 里面没有逻辑炸弹, 只有所谓 '主动式逻辑锁'. 似乎这样讲就不需要承担责任了!
的确, 在中国有关计算机安全和保护软件消费者的法律还不健全, 王江民的类似行为暂时还无法受到法律的制裁. 但我们需要进行这方面的讨论. 以了解我们消费者的权利和可以采取的措施.
从道义上和法律意义上讲, 王江民的这种做法已经侵犯了公民的权利. 王江民认为盗版应视同小偷, 可以用锁把他锁起来. 但是, 我们应该清楚, 中国法律只付予了警察等执法机关有执法的权利, 你王江民有什么权利执法? 你用逻辑锁把你的软件锁起来, 是你的权利. 但王江民没有权利锁别人的门!   即使, 经过国家有关部门的批准, 王江民有这样的执法权. 王江民也必须经过广告等形式公之于众.
从计算机安全角度讲. 王江民至今没能确认正版用户不会受到意外损害, 他也没有通过适当渠道告知正版用户避免意外损害的方法, 他只是说明受到损害时由他解锁. 这使KV300 的正版用户会因此存在资料失密和损失的危险. 对此, 如何赔偿??
由于, KV 300 内含有可能危害消费者权利和计算机安全的'逻辑锁'. 在目前, 国家没有相关法律的情况下. 我们消费者有权利相互告知并通知 KV300 的潜在用户, 选择其他的产品, 放弃 KV 300.
修复
KV300技术分析
要不是亲自试一下，你一定不会相信，运行下面的程序，你的机器将不能从软盘启
动,更不能从硬盘启动。而这个程序仅仅修改了你的硬盘的扩展ＤＯＳ分区的首隐藏扇区
。
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 之后，运行之前请保存好硬盘
的扩展ＤＯＳ分区的首隐藏扇区的内容，以备将来恢复时用。
笔者是在编制一个硬盘加锁程序时，因计算有误而偶然发现这一点的。仅仅因为修改硬盘一个隐藏扇区，造成机器从软硬盘都不能启动，从未见资料提及。作者当时很惊讶。
为了解决问题，笔者按复位键，进入ＣＭＯＳ设置，将硬盘设置为未安装，则可以从软盘启动，但是，使用INT13h仍不能读写硬盘，因此无法将被破坏的扇区复原。
笔者估计是引导过程中，读取硬盘分区表时形成循环的缘故。理由有两点：
１、因为仅仅修改硬盘一个扇区，造成了如此现象，而该扇区仅记录了硬盘分区表的一些信息；
２、启动过程中，不管从软盘启动还是从硬盘启动，最终的现象都是硬盘灯第亮。因此，换用不支持硬盘分区的低版本ＤＯＳ系统盘也许能够启动，使用2.0版的系统盘，果然可以在ＣＭＯＳ设置为硬盘正常安装的情况下启动机器，启动后虽仍不能进入硬盘，但可以用INT13h读写硬盘。在DEBUG中用正常的内容覆盖硬盘的扩展ＤＯＳ分区的首隐藏扇，重新启动机器，成功。
为什么从软、硬盘启动都会造成读硬盘分区的死循环呢？笔者为此对硬盘分区表及ＤＯＳ引导过程进行了分析，提出几点粗浅看法，供参考。
大家知道，硬盘分区表位于主引导扇区的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能够管理多个逻辑分区。ＤＯＳ引导时，不管是从软盘启动还是从硬盘启动，都将搜索这条链，以便为各逻辑盘建立磁盘基数表。
值得注意的是分区类型(偏移04h)中的扩展ＤＯＳ分区是相对来说的，Ｄ盘相对于Ｃ是扩展ＤＯＳ分区，但相对本身来说不是扩展的，因此在主引导扇区对应于Ｄ盘的分区表项中该字节为5，在Ｄ盘首隐藏扇区此处应为1、4或6。相应地，某表项若04h字节为5，则01-03h三字节就记录所对应分区的首隐藏扇区的物理地址，若04h字节为1、4或6(此时该表项必为第一表项)，则01-03h字节记录所对应分区的ＤＯＳ引导扇区。ＤＯＳ搜索链表建立磁盘基数表的过程是这样的：首先检查分区类型，若为1、4或6,则从01h-03h取分区dos引导扇区地址，根据引导扇区和分区表信息建立该分区的磁盘基数表，然后转向下一表项（如果有的话）；若为5，则从01h-03h取该分区首隐藏扇区地址，并转向该扇区，判断该扇区分区表，准备建立下一分区的磁盘基数表；若04h为其他值则跳过，而调试程序运行后，04h字节被误置为5。引导时，ＤＯＳ据此认为该表项指向下一个ＤＯＳ扩展分区，于是从01h-03字节取“下一个”分区的起始物理地址，读取下一个分区的首隐藏扇区，而此处又被误置为Ｄ盘的首隐藏扇区的地址，于是机器就陷于读取Ｄ盘首隐藏扇区的死循环中。
虽然发生如此情况的可能性微乎其微，但一但出现，造成的危害不可低估，因为低版本的ＤＯＳ已极度难找到，即使找到也需要对硬盘分区表了解较深，才能挽救。作为一个完善的操作系统，应该在任何情况下都是无懈可击的，而且仅需加几条指令就可避免如此后果，这不能不说是设计者的一个失误。更高版本的ＤＯＳ是否注意到了这一点呢？笔者为此曾用dos3.30,5.0,6.20在多种型号的机器上试验，均出现上述现象。
虽然这是一个失误，但我们可以利用它做一些有益的事。比如：很多硬盘加锁软件，虽然可以做到从软盘启动不能使用硬盘，但无法避免对硬盘了解较深的人通过修复主引导扇区进入硬盘，因此，要达到完全锁住硬盘，必须做到从软盘不能启动机器。ＤＯＳ的这个失误为此提供了可能。笔者利用此点编写了一个硬盘主引导程序，使得机器只能从硬盘启动，并且必须输入正确的口令；从软盘启动则死机。
利用
首先，《失误》文中所述ＤＯＳ对逻辑分区的管理机制基本上正确的，ＤＯＳ的这种链表式数据结构，可以说到处可见，在设备管理中、在内存管理中、在文件管理中，可谓比比皆是，而且严格地讲，不仅ＤＯＳ如此，其他操作系统亦如此。文中所述方法会造成死机，这是事实，但进而就说这是ＤＯＳ的一个失误，可就不应该了。原因很简单：在ＤＯＳ的这些链表式结构中，不管改变了哪一个，都可能引起死机。比如：改变了内存链（即ＭＣＢ链），使之不符合ＤＯＳ的要求，则马上就会死机。能因此就说这是ＤＯＳ的失误吗？显然是不合适的。作为用户，要求ＤＯＳ能在任何情况下，都能正常运行，是可以理解的，但这也是不可能的。事实上，任何一种操作系统，进而言之，任何一种软件，都不可能做到。那么，从开发的角度，或者说从程序设计的角度，用户要设计一个较低级（指管理上）一点的程序，使其能和ＤＯＳ一起工作，甚至控制ＤＯＳ的工作，可能就要牵扯到对这些链表的操作，怎么办呢？一句话，必须适应ＤＯＳ！（不可能让操作系统去适应您）比如想自己去管理内存，就必须符合ＤＯＳ的管理方式，使ＤＯＳ认为是合理的，否则ＤＯＳ就死了。再比如想接管ＤＯＳ的磁盘管理，也必须如此，否则，虽然ＤＯＳ不至于马上就死，但会造成磁盘的混乱和数据的丢失。
其次，《失误》文中认为这是加密的一个好方法，实际上也不然。应该说《失误》文中谈到的种种现象都确实是存在的，即：硬盘、软盘启动结果都是死机，硬盘灯常亮。但并不是没有办法解决。这里应该先明确一点, ＤＯＳ为各逻辑盘建立磁盘基数表（即建立设备管理链表）的过程是由ＩＯ．ＳＹＳ（或ＩＢＭＢＩＯ．ＣＯＭ）文件来完成的，明白了这一点，我们就可以在ＩＯ．ＳＹＳ取得控制权之前，先行一步，即：对软盘的DOS引导扇区--０面０道１扇区直接编程，就可以排除《失误》文中所述的情况（不熟悉ＤＯＳ引导过程的读者，可参考有关专著，这里不作叙述）。
有一个最简单的解决办法就是把硬盘的主引导扇区改为无效。然后就可以用软盘启动了，也可以用一些磁盘维护工具（或者直接用ＩＮＴ１３Ｈ），来对硬盘工作了。比如：恢复主引导扇区和被破坏了的“扩展分区首隐藏扇区”。具体操作如下。
首先用另一台计算机，找一张格式化好的软盘，插入Ａ驱或Ｂ驱。按如下输入：
Ｃ〉ＤＥＢＵＧ
-a  100
mov ax,0301
mov bx,0200
mov cx,0001
mov dx,0000
;如果您的软盘在Ｂ驱，这里应改为：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
执行完后，将软盘从驱动器中取出，此时这张盘就成了"开锁的钥匙"，将其插入“病”计算机的Ａ驱，打开电源，启动“病”计算机，显然这张盘并不是系统盘，不能真正启动“病”计算机，但待这张盘“启动”完后（硬盘灯亮了一下，显示器上无任何显示），再插入真正的系统盘，关机，再重新启动，就可以了。
当然，明白了这一道理后，可能会有更好的方法，以上就算是抛砖引玉吧。
注意：不要修改ＣＯＭＳ。软错误当然软解决，千万不能将ＣＯＭＳ设置硬盘为未安装 。
以上方法，已在多台机器上验证无误  .