利用安裝程式防止軟體非法拷貝 |
|
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
利用安裝程式防止軟體非法拷貝
每個用戶都不希望自己開發的軟體被別人輕易的拷貝使用,自然而然崐想起了要對軟體進行加密。本文主要介紹一種通過安裝程式來拷貝軟體,崐防止軟體非法拷貝的方法。經過實踐證明這種方法非常適用於需要把軟體崐安裝到硬碟上才能使用的情況。
一、工作原理
通過在被加密的軟體中設置一個特殊的單元,由一個安裝程式將被加崐密的軟體裝入指定的硬碟(C、D、E等)分區上。在拷貝裝入硬碟的過程崐中,把被加密的軟體在硬碟中首簇號填寫到其指定單元中。同時在被加密崐的軟體中嵌入檢驗程式,當被加密的軟體在硬碟上運行時,檢驗程式首先崐判斷被加密的軟體在硬碟的首簇號與其本身程式中指定單元的內容是否相崐同。若不同,則認爲是該軟體是非法拷貝得到的,終止軟體的運行。如果崐相等,則認爲該軟體是通過安裝程式正常安裝得到的,允許軟體繼續運行。
本方法使用了一些DOS中斷調用對文件進行操作的深層知識,如INT21H中斷的11H,1AH,3CH,3DH,3EH,3FH,40H,42H號功能調用和文件控制崐塊(FCB)資料格式等。在此作一簡單介紹,更爲詳細的使用方法請參閱崐資料。
1、INT 21H中斷功能調用
①INT 21中斷11H號功能
作用:在指定盤的當前目錄下查找匹配的檔案名
調用:AH=11H
DS:DS=文件控制塊段:位移
返回:AL=00,成功,找到匹配的檔案名
AL=0FFH,失敗,未找到匹配的檔案名
②INT 21中斷1AH號功能
作用:置盤傳輸區地址
調用:AH=1AH
DS:DX=盤傳輸區段:位移
返回:無
③INT 21中斷3CH號功能
作用:創建文件
調用:AH=3CH
CX=文件屬性,00H:標準,01H:唯讀,02H:隱含,04H:系統
DS:DX=文件說明段:位移
返回:成功
進位元標誌=清
AX=文件描述字
失敗
進位元標誌=置
AX =錯誤代碼,3:路徑未找到,4:無描述字可用,5:拒絕訪問
④INT 21中斷3DH號功能
作用:打開文件
調用:AH=3DH
AL=存取模式,000:讀,001:寫,010:讀/寫
DS:DX=文件說明段:位移
返回:成功
進位元標誌=清
AX=文件描述字
失敗
進位元標誌=置
AX =錯誤代碼,1:功能號無效,2:文件未找到,3:路徑未找到,
4:無描述字可用,5:拒絕訪問
⑤INT 21中斷3EH號功能
作用:關閉文件
調用:AH=3EH
BX=文件描述字
返回:成功
進位元標誌=清
失敗
進位元標誌=置
AX =錯誤代碼,6:描述字無效
⑥INT 21H中斷3FH號功能
作用:讀文件
調用:AH=3FH
BX=文件描述字
CX=所讀位元組數
DS:DX=段:緩衝區位移
返回:成功
進位元標誌=清
AX=實際讀位元組數,0:文件結束
失敗
進位元標誌=置
AX =錯誤代碼,5:拒絕訪問,6:無描述字可用
⑦INT 21H中斷40H號功能
作用:寫文件
調用:AH=40H
BX=文件描述字
CX=寫的位元組數
DS:DX=緩衝區段:位移
返回:成功
進位元標誌=清
AX=實際寫位元組數,0:盤滿
失敗
進位元標誌=置
AX =錯誤代碼,5:拒絕訪問,6:無描述字可用
⑧INT 21H中斷42H號功能
作用:移動文件指標
調用:AH=42H
AL=方式碼,0:從文件開始絕對位元組位移
1:從當前位置的位元組位移
2:從文件尾的位元組位移
BX=文件描述字
CX=最有效一半位移(高字)
DX=次有效一半位移(低字)
返回:成功
進位元標誌=清
DX=最有效一半位移(高字)
AX=次有效一半位移(低字)
失敗
進位元標誌=置
AX =錯誤代碼,1:功能號無效,6:描述字無效
2、文件控制塊(FCB)資料格式
驅動器號,“檔案名 副檔名”
對於驅動器號來說,1:A驅,2:B驅,3:C分區,4:D分區,等等依崐次類推。
對於檔案名和副檔名來說,按8.3格式構造文件,總共11個字元,文崐件名不夠8個字元用空格補齊。
例如,DB 4,'MY_RUN COM',21 DUP(?)
定義一個D盤上檔案名爲MY_RUN.COM的文件控制塊
二、實現方法
下面給出兩段程式,一個是安裝程式,另一個是檢驗程式。工作過程崐簡圖如下: 硬碟 記憶體 軟碟
┌──────┐ ┌──────┐
├──────┤ ① ├──────┤
│ 目錄區 │←──────────────┤ │
│ 首簇號 ├─┐③ ┌──────┐ │ 安裝程式 │
├──────┤ └─→│ 緩衝區 │ ② ├──────┤
│ 資料區 │ │ │←──┤被加密的文件│
│被加密的文件│←───┤被加密的文件│ │(含檢驗程式)│
│(含檢驗程式)│ ④ │(含檢驗程式)│ ├──────┤
├──────┤ ├──────┤ │ │
│ │ │ │ │ │
└──────┘ └──────┘ └──────┘
①通過安裝程式將軟碟上被加密的軟體拷貝到硬碟上,這樣可以在硬崐盤的目錄區中産生一個目錄項,並給該文件確定一個首簇號。
②將軟碟上的被加密的文件送入到記憶體緩衝區中。
③把硬碟上的被加密的文件的首簇號送入到記憶體緩衝區被加密的文件崐中的指定單元。
④把記憶體緩衝區中的被加密文件的內容再保存到硬碟上被加密的文件崐中。
三、一個演示實例
;****MY_INST.ASM****
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE
ORG 100H
BEGIN:
MOV DX,OFFSET DIME_2;打開A盤上MY_RUN.COM文件
MOV AL,2
MOV AH,3DH
INT 21H
PUSH AX;保存文件控制碼
MOV BX,AX
MOV CX,0FFF0H
MOV DX,OFFSET DIME_0;把A盤上MY_RUN.COM讀到記憶體
MOV AH,3FH
INT 21H
POP BX
PUSH AX;保存文件控制碼
MOV AH,3EH;關閉文件
INT 21H
MOV DX,OFFSET DIME_1;在D盤上建立MY_RUN.COM文件
MOV CX,20H
MOV AH,3CH
INT 21H
PUSH AX;保存文件控制碼
MOV DX,OFFSET DIME_0
POP BX
POP CX
PUSH BX
MOV AH,40H;將記憶體中MY_RUN.COM內容寫入到D盤MY_RUM.COM
INT 21H
POP BX
MOV AH,3EH
INT 21H;關閉文件
MOV DX,OFFSET DIME_3
MOV AH,1AH;設置磁片傳輸位址
INT 21H
MOV DX,OFFSET DIME_4
MOV AH,11H;查找目錄項
INT 21H
MOV DX,OFFSET DIME_1
MOV AH,3DH
MOV AL,02H
INT 21H;打開文件
PUSH AX;保存文件控制碼
MOV BX,AX
MOV AX,4200H
MOV CX,0
MOV DX,WORD PTR DIME_5;移動文件指標到MY_RUN.COM的指定單元
INT 21H
POP BX
MOV AH,40H
MOV DX,OFFSET DIME_3 1BH;緩衝區第26、27位元組爲該文件在硬碟的首簇號
MOV CX,2
INT 21H;把MY_RUN.COM文件的首簇號寫入到文件中
MOV AH,3EH
INT 21H;關閉文件
MOV AX,4C00H
INT 21H;返回DOS
DIME_0 DB 7000H DUP(?);開闢一個資料區,存放被加密文件
DIME_1 DB "D:MY_RUN.COM",0
DIME_2 DB "A:\MY_RUN.COM",0
DIME_3 DB 40H DUP(?);保留40H位元組的記憶體緩衝區
DIME_4 DB 4,"MY_RUN COM",21 DUP(?);文件控制塊資料形式
DIME_5 DW 0064H
CODE ENDS
END BEGIN ;****MY_RUN.ASM****
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE
ORG 100H
BEGIN:
JMP START
DIME_1 DB 40H DUP(0);保留40H位元組的緩衝區
DIME_2 DB 4,"MY_RUN COM",21 DUP(0);文件控制塊資料格式
DIME_3 DB 0,0
START:
MOV AH,1AH
MOV DX,OFFSET DIME_1;設置資料傳輸地址
INT 21H
MOV AH,11H
MOV DX,OFFSET DIME_2;查找目錄項
INT 21H
MOV DI,OFFSET DIME_3
MOV SI,OFFSET DIME_1 1BH;目錄項第26、27位元組爲該文件首簇號
MOV CX,2
CLD
REPZ CMPSB;比較該文件在D盤中實際首簇號與該文件DIME_3單元的值是否相等
JZ EXIT1 ;相等,轉
MOV AH,09H;不相等
MOV DX,OFFSET MSG2;警鈴提示
INT 21H
MOV AX,4C00H;終止程式運行,返回DOS
INT 21H
EXIT1:
MOV AH,09H
MOV DX,OFFSET MSG1;顯示正確資訊,繼續運行程式
INT 21H
MOV AX,4C00H
INT 21H
MSG1 DB "Copyright Is Good",0DH,0AH,'$'
MSG2 DB 07,07," Copyright Is Invalid",0DH,0AH,0DH,0AH
DB "COPYRIGHT BY 607 SOFTWARE GROUP 1999",0DH,0AH,'$'
CODE ENDS
END BEGIN
本文的兩段程式MY_INST.ASM和MY_RUN.ASM,在TURBO MASM V2.0下編崐譯、連接生成COM文件,DOS6.22下調試通過。
四、使用方法
使用時將含有MY_INST.COM和MY_RUN.COM的文件的軟碟插入到驅動器A崐中,運行MY_INST.COM文件把軟碟上的MY_RUN.COM拷貝到硬碟(如D分區)崐的當前目錄下。&127;當在硬碟上運行MY_RUN.&127;COM文件,&127;&127;如果檢驗程式提示崐“COPYRIGHT IS GOOD”表示該程式是通過軟碟上的安裝程式MY_INST.COM崐安裝到硬碟上的。如果通過COPY命令或其他工具將軟碟上的MY_RUN.COM拷崐貝到D盤上運行,&127;則檢驗程式警鈴提示&127;“Copyright &127;Is &127;Invalid”&127;&127;,崐“COPYRIGHT BY 607 SOFTWARE GROUP 1999”,表示該程式是通過非法拷崐貝得到的。
五、結束語
最後,想要說的是,上述介紹的方法只是一個演示的例子,旨在起到崐抛磚引玉的作用。具體應用中用戶可以把檢驗程式MY_RUN.COM嵌入到自己崐想要加密的軟體中,安裝程式使用MY_INST.&127;COM。爲了更好對軟體進行保崐護,通常還應考慮以下方面的問題。①爲了加強安全性,可以在被加密的崐軟體中多處設置“首簇號”來進行檢驗。②爲了防止複製安裝程式,可以崐在安裝程式本身所具有的功能完成後,把自身銷毀。可採用向其中填寫雜崐亂無章資料的方法,來破壞安裝程式的功能。③可以結合在安裝軟碟上制崐作密鑰技術,當被加密軟體或安裝程式運行時檢查軟碟的密鑰,這樣也可崐以防止對安裝程式的複製。 發表人 - jackkcg 於 2002/12/13 23:52:33
------
********************************************************** 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |