利用安裝程式防止軟體非法拷貝
每個使用者都不希望自己開發的軟體被別人輕易的拷貝使用,自然而然想起了要對軟體進行加密。本文主要介紹一種通過安裝程式來拷貝軟體,防止軟體非法拷貝的方法。經過實踐證明這種方法非常適用於需要把軟體安裝到硬碟上才能使用的情況。
一、工作原理
通過在被加密的軟體中設定乙個特殊的單元,由乙個安裝程式將被加密的軟體裝入指定的硬碟(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 ***',21 dup(?)
定義乙個d盤上檔名為my_run.***的檔案控制塊
二、實現方法
下面給出兩段程式,乙個是安裝程式,另乙個是檢驗程式。工作過程簡圖如下:
硬碟 記憶體 軟盤
┌──────┐ ┌──────┐
├──────┤ ① ├──────┤
│ 目錄區 │←──────────────┤ │
│ 首簇號 ├─┐③ ┌──────┐ │ 安裝程式 │
├──────┤ └─→│ 緩衝區 │ ② ├──────┤
│ 資料區 │ │ │←──┤被加密的檔案│
│被加密的檔案│←───┤被加密的檔案│ │(含檢驗程式)│
│(含檢驗程式)│ ④ │(含檢驗程式)│ ├──────┤
├──────┤ ├──────┤ │ │
│ │ │ │ │ │
└──────┘ └──────┘ └──────┘
①通過安裝程式將軟盤上被加密的軟體拷貝到硬碟上,這樣可以在硬碟的目錄區中產生乙個目錄項,並給該檔案確定乙個首簇號。
②將軟盤上的被加密的檔案送入到記憶體緩衝區中。
③把硬碟上的被加密的檔案的首簇號送入到記憶體緩衝區被加密的檔案中的指定單元。
④把記憶體緩衝區中的被加密檔案的內容再儲存到硬碟上被加密的檔案中。
三、乙個演示例項
;****my_inst.a******
code segment
assume cs:code,ds:code,es:code
100h
begin:
mov dx,offset dime_2;開啟a盤上my_run.***檔案
mov al,2
mov ah,3dh
int 21h
push ax;儲存檔案控制代碼
mov bx,ax
mov cx,0fff0h
mov dx,offset dime_0;把a盤上my_run.***讀到記憶體
mov ah,3fh
int 21h
pop bx
push ax;儲存檔案控制代碼
mov ah,3eh;關閉檔案
int 21h
mov dx,offset dime_1;在d盤上建立my_run.***檔案
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.***內容寫入到d盤my_rum.***
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.***的指定單元
int 21h
pop bx
mov ah,40h
mov dx,offset dime_3+1bh;緩衝區第26、27位元組為該檔案在硬碟的首簇號
mov cx,2
int 21h;把my_run.***檔案的首簇號寫入到檔案中
mov ah,3eh
int 21h;關閉檔案
mov ax,4c00h
int 21h;返回dos
dime_0 db 7000h dup(?);開闢乙個資料區,存放被加密檔案
dime_1 db "d:my_run.***",0
dime_2 db "a:/my_run.***",0
dime_3 db 40h dup(?);保留40h位元組的記憶體緩衝區
dime_4 db 4,"my_run ***",21 dup(?);檔案控制塊資料形式
dime_5 dw 0064h
code ends
end begin
利用安裝程式防止軟體非法拷貝
利用安裝程式防止軟體非法拷貝 每個使用者都不希望自己開發的軟體被別人輕易的拷貝使用,自然而然想起了要對軟體進行加密。本文主要介紹一種通過安裝程式來拷貝軟體,防止軟體非法拷貝的方法。經過實踐證明這種方法非常適用於需要把軟體安裝到硬碟上才能使用的情況。一 工作原理 通過在被加密的軟體中設定乙個特殊的單元...
利用Python程式拷貝檔案
知識點 python對檔案的操作 以系統檔案cmd.exe為例,拷貝檔案內容到桌面的新檔案裡,並正常執行 cmd.exe檔案所在路徑 c windows system32 cmd.exe sf open c windows system32 cmd.exe rb df open c users 使用...
利用FTP程式有效防止木馬的方法
做影視類 的站長都應該知道快播qvod吧,網際網路上大部分資源是以qvod 開頭的,這種資源相對安全好些,但是很一部分好的熱門的資源,是以http格式的,存在於資源站,這種資源普遍都是以彈窗廣告彈木馬之類惡行的,如果站長採用其資源,將威脅上網安全,對 造成大多的負面影響,不僅如此,如果資源管理員更換...