基本介紹
- 中文名:江民炸彈
- 外文名:jiangmin bomb
- 時間:1997年7月23日
- 事件:硬碟無法啟動
- 地點:北京
事件經過,邏輯炸彈表現,處理過程,相關看法,修複方法,
事件經過
凡是在MK300V4製作的仿真盤(盜版盤)上執行KV300L++的用戶硬碟數據均被破壞,
同時硬碟被鎖,軟硬碟皆不能啟動。
KV300邏輯炸彈可以造成電腦軟硬碟都不能啟動的現象,
當時在電腦界引起轟動。這是用常規原理不能解釋的現象。
邏輯炸彈表現
2.不做任何備份。
3.沒有任何提示。
4.在特定條件下激發(盜版盤)。
5.王江民始終沒有公開提供恢復程式。
6.如果用一般常用的修復磁碟工具,如NORTON,會造成不可逆轉的損失。
7.對其的恢復類似於CIH破壞數據的恢復,因為需要重建分區表。
8.在Windows 95環境下執行同樣會造成檔案分配表被破壞,數據損失。
處理過程
1997年7月23日,國內5家反病毒軟體公司(以下簡稱五廠商)在北京聯合舉行新聞發布會,一起譴責國內另一家著名的反病毒軟體公司—北京江民新技術有限責任公司(以下簡稱江民公司)。在發布會上,五廠商向多家新聞機構發放了一份“聯合聲明”,稱江民公司6月下旬發布的KV300L+ +版反病毒軟體(網路下載版)(以下簡稱KV300,本文無特殊說明,所指的均是這一特定下載版本)中含有“邏輯炸彈”,“在特定條件下對計算機實施破壞,其結果與某些計算機病毒的破壞作用相似……”。
同年7月24日,江民公司對五廠商的“聯合聲明”做出了強烈反應,認為這是“不正當的侵權行為”,並多次在各專業計算機所刊上登載“嚴正聲明”,江民公司對此的解釋是:江民公司並未在KV300中安放任何破壞性程式。五廠商所稱的“邏輯炸彈”,其實是江民公司為打擊日益猖獗的盜版軟體行為而在軟體中編制的“邏輯鎖”,這一“邏輯鎖”首先不可能對任何購買正版產品的用戶造成任何影響和損失,其次對部分盜版用戶也只是起到暫時鎖住機器的作用。江民公司特彆強調,KV300中的“邏輯鎖”與病毒沒有關係,因為病毒是具有自我複製和傳染性的破壞性程式,而“邏輯鎖”卻不會對用戶數據造成任何傷害。
1997年9月8日,公安部門認定KV300L++事件違反計算機安全保護條例之23條,屬於故意輸入有害數據,危害計算機信息 系統安全的行為,對其做出罰款3000元的決定。
相關看法
王江民口口聲聲說 KV300 L++ 裡面沒有邏輯炸彈, 只有所謂 ‘主動式邏輯鎖’似乎這樣講就不需要承擔責任。
的確, 在中國有關計算機安全和保護軟體消費者的法律還不健全, 王江民的類似行為暫時還無法受到法律的制裁. 但需要進行這方面的討論。 以了解消費者的權利和可以採取的措施。
從計算機安全形度講, 王江民沒能確認正版用戶不會受到意外損害, 他也沒有通過適當渠道告知正版用戶避免意外損害的方法, 他只是說明受到損害時由他解鎖。 這使KV300 的正版用戶會因此存在資料失密和損失的危險.。
由於, KV 300 內含有可能危害消費者權利和計算機安全的‘邏輯鎖’在國家沒有相關法律的情況下,消費者有權利相互告知並通知 KV300 的潛在用戶, 選擇其他的產品, 放棄 KV 300。
修複方法
KV300邏輯鎖技術分析
要不是親自試一下,你一定不會相信。
運行下面的程式,你的機器將不能從軟碟啟動,更不能從硬碟啟動。
而這個程式僅僅修改了你的硬碟的擴展DOS分區的首隱藏扇區。
代碼如下(彙編):
code segment
assume cs:code,ds:code
org 100h
begin:
xor ax,ax
mov dx,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分區的首隱藏扇區的內容,以備將來恢復時用。
筆者是在編制一個硬碟加鎖程式時,因計算有誤而偶然發現這一點的。僅僅因為修改硬碟一個隱藏扇區,造成機器從軟硬碟都不能啟動,從未見資料提及。作者當時很驚訝。
筆者估計是引導過程中,讀取硬碟分區表時形成循環的緣故。理由有兩點:
1、因為僅僅修改硬碟一個扇區,造成了如此現象,而該扇區僅記錄了硬碟分區表的一些信息;
2、啟動過程中,不管從軟碟啟動還是從硬碟啟動,最終的現象都是硬碟燈常亮。因此,換用不支持硬碟分區的低版本DOS系統盤也許能夠啟動,使用2.0版的系統盤,果然可以在CMOS設定為硬碟正常安裝的情況下啟動機器,啟動後雖仍不能進入硬碟,但可以用INT13h讀寫硬碟。在DEBUG中用正常的內容覆蓋硬碟的擴展DOS分區的首隱藏扇,重新啟動機器,成功。
為什麼從軟、硬碟啟動都會造成讀硬碟分區的死循環呢?筆者為此對硬碟分區表及DOS引導過程進行了分析,提出幾點粗淺看法,供參考。
=====================================
偏移量 含 義
=====================================
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 本分區的扇區數
=====================================
第一表項對應於本分區,第二表項則對應於下一分區,各位元組含義同上。這樣,各邏輯分區通過首隱藏扇區的分區信息表串起來形成了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對邏輯分區的管理機制基本上正確的,DOS的這種鍊表式數據結構,可以說到處可見,在設備管理中、在記憶體管理中、在檔案管理中,可謂比比皆是,而且嚴格地講,不僅DOS如此,其他作業系統亦如此。文中所述方法會造成當機,這是事實,但進而就說這是DOS的一個失誤,可就不應該了。原因很簡單:在DOS的這些鍊表式結構中,不管改變了哪一個,都可能引起當機。比如:改變了記憶體鏈(即MCB鏈),使之不符合DOS的要求,則馬上就會當機。能因此就說這是DOS的失誤嗎?顯然是不合適的。作為用戶,要求DOS能在任何情況下,都能正常運行,是可以理解的,但這也是不可能的。事實上,任何一種作業系統,進而言之,任何一種軟體,都不可能做到。那么,從開發的角度,或者說從程式設計的角度,用戶要設計一個較低級(指管理上)一點的程式,使其能和DOS一起工作,甚至控制DOS的工作,可能就要牽扯到對這些鍊表的操作,必須適應DOS!(不可能讓作業系統去適應您)比如想去管理記憶體,就必須符合DOS的管理方式,使DOS認為是合理的,否則DOS就死了。再比如想接管DOS的磁碟管理,也必須如此,否則,雖然DOS不至於馬上就死,但會造成磁碟的混亂和數據的丟失。
其次,《失誤》文中認為這是加密的一個好方法,實際上也不然。應該說《失誤》文中談到的種種現象都確實是存在的,即:硬碟、軟碟啟動結果都是當機,硬碟燈常亮。但並不是沒有辦法解決。這裡應該先明確一點, DOS為各邏輯盤建立磁碟基數表(即建立設備管理鍊表)的過程是由IO.SYS(或IBMBIO.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驅,打開電源,啟動“病”計算機,顯然這張盤並不是系統盤,不能真正啟動“病”計算機,但待這張盤“啟動”完後(硬碟燈亮了一下,顯示器上無任何顯示),再插入真正的系統盤,關機,再重新啟動,就可以了。
當然,明白了這一道理後,可能會有更好的方法,以上就算是拋磚引玉吧。
注意:不要修改CMOS。軟錯誤當然軟解決,千萬不能將CMOS設定硬碟為未安裝 。
以上方法,已在多台機器上驗證無誤。