- 相關推薦
用Windows終端仿真程序實現微機遠程文件傳送
有些硬盤防拷貝是通過對硬盤FAT表中的簇鏈的檢測來實現的,這與本文所推薦的方法原理一樣,都是通過檢測文件位置信息是否被改變來判斷文件是否已被移動的。但前者涉及到定位FAT表及文件所在目錄等繁瑣工作,而且還和硬盤型號及格式化信息有關,編程很不方便。本文所介紹的方法則不然,它直接與操作系統打交道,取出操作系統內核中現成的數據,即利用DOS系統文件表(SYSTEM FILE TABLE 簡稱SFT)來實現防拷貝。當您打開硬盤上的一個文件并移動讀寫指針時,DOS會時刻記錄讀寫指針所對應的硬盤位置。一個稍大些的文件在硬盤上要占用多個簇,這些簇并不是連續的,而是由操作系統一般按照“就近循環分配”原則為該文件分配的,這些簇的絕對簇號具有一定的隨機性,在FAT表中形成一個簇鏈。移動讀寫指針超過一個簇的大小時,則所對應的絕對簇號也要變化。只要該文件沒有被移動過(拷貝或整理硬盤),這些簇號就是固定的。一旦該文件被移動了,根據DOS簇分配原則,這些對應的簇號就會改變。由此,我們可以檢查特定的文件指針所對應的絕對簇號是否改變了來判斷該文件是否已被非法移動。
SFT是DOS在文件管理上的一個很重要的數據結構。只要DOS開始引用一個文件或設備,它必然要建立一個SFT。該表記錄了文件設備名、目錄特性、設備特性、文件大小和位置、DDPB(塊設備)或設備驅動程序標題(字符設備)的地址,以及打開模式等有關文件的存儲、訪問和操作的管理信息。其中有幾項數據可以用來確定文件在硬盤上的位置,它們是:文件讀寫指針所對應的絕對簇號,目錄項的相對索引號(即目錄項在目錄扇區中的序號),目錄項所在扇區的扇區號。
那么怎樣利用這幾項數據防拷貝呢?這里所說的防拷貝是指可以拷貝但拷貝后的文件不能執行或不能被使用,包括數據文件和可執行文件。若是可執行文件,則其本身包括一段檢測代碼,用以判斷其本身是否已被非法移動。若是數據文件,則在使用該數據文件的可執行文件中包括一段檢測代碼,來判斷該數據文件是否已被非法移動。當第一次將一個文件裝入硬盤后,它所占有的硬盤的簇號已是固定的了。這樣我們就可以作一個加密程序,在該程序里,約定一個或多個秘密的值N,N1,N2…,然后將文件指針分別移動到N或N1,N2…,在SFT中取出那幾項硬盤位置數據,再用約定的秘密算法加以運算,就得到了包含被加密文件位置信息的“鑰匙”,將它存于另一個文件中或干脆附加在被加密文件的末尾。在使用該文件的可執行文件的檢測代碼中,按同樣的算法取得當前的“鑰匙”,與先前保存的“鑰匙”相比較,若相等,則說明文件沒有被移動過,程序正常執行,否則,說明文件已不在先前的位置了,即已被非法移動過了,則程序異常執行。
我們先看看DOS系統中SFT的具體結構,系統有多個SFT,這個數目取決于CONFIG.SYS文件中的FILES=N的N值。在DOS4.0,5.0,6.0中,每個SFT的長度是3BH。多個SFT形成SFT數組,并不是整個系統的所有SFT組成一個連續的大數組,而是可能有多個SFT數組,每個數組由一個控制塊管理,它們之間由指針連接。每個SFT數組的結構如下:
偏移量 長度 說明
00H DWORD 指向下一個SFT數組的指針
04H WORD 本SFT數組內的SFT數目
06H nBYTEs 由SFT組成的數組(n=本數組中SFT數目*每個SFT所占字節數)
我們還必須知道第一個SFT數組所在的地址。這可由DOS功能調用52H先取得DOS的多重表指針,在多重表偏移量04H處即是一個長指針,它即指向第一個SFT數組的頭部。這樣剩下的SFT數組的位置也就知道了。
每當DOS打開一個新文件時,DOS就從這些SFT數組中找一個空閑的SFT項,分配給該文件。以后DOS就用此SFT控制訪問該文件。那么怎樣確定一個剛打開的文件所對應的SFT項是SFT數組中的第幾項呢?我們利用文件句柄和文件句柄表。每個進程都有一個文件句柄表,當
[1] [2] [3]
【用Windows終端仿真程序實現微機遠程文件傳送】相關文章:
飛行仿真中遙控器驅動程序的設計與實現05-02
地形仿真實現04-30
Mobile TV技術介紹及終端實現05-02
新型雙級解耦合微機械陀螺設計與仿真04-26
仿真訓練系統基于DirectPlay的RTI設計與實現04-27
無人機視景仿真的建模與實現04-27
飛機校靶視景仿真系統的設計與實現05-03
再入飛行器仿真系統設計與實現04-28