利用安裝程式防止軟體非法拷貝

來源:互聯網
上載者:User

利用安裝程式防止軟體非法拷貝
每個使用者都不希望自己開發的軟體被別人輕易的拷貝使用,自然而然想起了要對軟體進行加密。本文主要介紹一種通過安裝程式來拷貝軟體,防止軟體非法拷貝的方法。經過實踐證明這種方法非常適用於需要把軟體安裝到硬碟上才能使用的情況。
一、工作原理
通過在被加密的軟體中設定一個特殊的單元,由一個安裝程式將被加密的軟體裝入指定的硬碟(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。為了更好對軟體進行保護,通常還應考慮以下方面的問題。①為了加強安全性,可以在被加密的軟體中多處設定“首簇號”來進行檢驗。②為了防止複製安裝程式,可以在安裝程式本身所具有的功能完成後,把自身銷毀。可採用向其中填寫雜亂無章資料的方法,來破壞安裝程式的功能。③可以結合在安裝磁碟片上製作密鑰技術,當被加密軟體或安裝程式運行時檢查磁碟片的密鑰,這樣也可以防止對安裝程式的複製。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.