磁碟ID在ASP源碼防拷貝中的應用

來源:互聯網
上載者:User


自從ASP(Active Server Pages)問世以來,因其可以建立健壯易於維護、與平台無關的應用系統,ASP技術受到了越來越
多網路程式員的喜愛,使用ASP從事WEB開發的人也越來越多。但ASP只是一種非編譯型的、在服務端啟動並執行指令碼語言,採用
明文(plain text)方式來編寫,即使採用了ASP加密程式對ASP源碼進行加密,也不一定能保證發布到運行環境中去的ASP應
用程式不被非法拷貝。對於高許可權的管理員,可以輕而易舉從伺服器端拷貝出ASP程式應用到別的非授權網站。這樣給ASP
應用商業化帶來了一定的困難。如何有效保護開發出來的ASP程式,本文基於磁碟序號產生的隨機性,結合微軟官方免費
提供的ASP指令碼加密程式SCRENC.EXE,很好地解決了這個問題。

磁碟序號,簡稱磁碟ID,是對磁碟進行格式化時隨機產生的磁碟標識資訊,是一個卷序號。同一機器兩次格式化隨機
產生固定格式的序號相同幾率幾乎為零, DOS的後期版本和WINDOWS、WINNT均採用了這種磁碟標識方式,因而磁碟序列
號常被運用用於商業化軟體進行加密使用。從WINDOWS9.X切換到MS-DOS方式,鍵入DIR命令後斷行符號,螢幕出現當前卷標序列
號資訊,這個類似"0A48-1CD7"的序號是一個16進位數。一些限期使用的軟體,在使用到期日到了之後,會要求使用者線上
申請新的授權序號(使用許可)。這種授權序號相當一部分是採用了靜態磁碟序號結合時間產生的。安裝完畢之後
的軟體,程式即使被非法拷貝到非初始安裝環境中,也不能使用。

上述思想用VC、VB及DELIPHI程式設計語言都容易實現,那麼,在ASP中又如何?呢?VBScript作為一種健壯的、安全的使用者
語言,是受客戶機系統限制的,不能處理客戶機上API的調用,也不能直接操縱客戶機上的檔案和檔案系統之外的控制項。因
而本文採用VBScript並結合ASP內建群組件FileSystem來實現上述思想。 以下程式根據具體情況略加修改,可以應用於實際
的ASP應用系統。

作為講解執行個體,本文用到Access資料庫安全機制,實際應用中,可以用其它格式的檔案存放的資料。為便於闡述,我們先
建一個Access資料庫ID.mdb(密碼為"kxj"),內建一個DriveInfo表,資料結構如下:

id(自動編號) ;
Serno(文本,12,磁碟序號(10進位)) ;
Wrimark(數字,1,寫盤標誌,)。


說明

Wrimark 值為0代表合法使用者未安裝系統,值為1代表該系統已安裝。當值為1且序號與當前盤不符時,則判定為非法拷貝
使用者。

初始化時先定義一個新記錄,各欄位初始值分別為1,12345678,0。

在同一目錄下,例如C:\INTERPUB\WWWROOT下,放置首頁Default.asp,合法使用者首頁Success.asp,非法安裝使用者提示頁
Fail.htm及ID.mdb序號存放庫。

各ASP檔案的編寫操作如下:

1、用FrontPage(或NotePad),建立一個ASP檔案Default.asp,錄入以下程式碼:

<html>
<head>
<title>Sample</title>
</head>
<% dim conn,fs,f
Set conn = Server.CreateObject("ADODB.Connection")
conn.open "driver={Microsoft Access Driver (*.mdb)};uid=;pwd=kxj;dbq="&server.mappath("id.mdb")
set fs=server.createObject("scripting.filesystemobject")
testDrive=Server.MapPath("/DRIVEINFO.ASP")
'通過MapPath獲得當前盤盤符
testDrive=Left(testDrive,3)
set f=fs.getdrive(testDrive)
'調用GetDrive方法,將磁碟機賦予一個變數
Mysql="SELECT * From driveinfo where id=1"
set rsCheck = Server.CreateObject("ADODB.Recordset")
rsCheck.open Mysql,conn,1,1
FSER=trim(f.serialnumber)
'獲得當前盤序號
StrSerno=trim(rsCheck.fields("SERNO"))
StrMark=rsCheck.fields("WRIMARK")
if StrSerno<>FSER and StrMark=0 then
'若是首次安裝,則置寫盤標誌為1
session("pass")=true
'定義使用者Session,共置為全域ASP文檔標識變數
set rsMain = Server.CreateObject("ADODB.Recordset")
Mysql1="update driveinfo SET SERNO="&FSER&", WRIMARK=1"
rsMain.open Mysql1,conn,1,2
response.write("<a href='success.asp'>SETUP
SUCCESSFUL!WELCOME TO ACCESS THE WEBSITE!</a>")
set rsMain=nothing
else
if StrSerno=FSER then
'若是合法使用者再次合法進入
session("pass")=true
response.write("<a href='success.asp'>YOU ARE AUTHORIZED BY THE WEBSITE MANAGER,WELCOME TO ACCESS !</a
>")
else
'非法拷貝使用者
session("pass")=false
response.write("<a href='fail.htm'>IT IS ILLEGAL TO COPY THE WEBSITE'S ASP DOCUMENT.YOU ARE NOT RIGRT TO
USE THE PROGRAM.</a>")
end if
end if
response.write("<br>")
response.write("Volume Serial Number in drive "&testDrive)
response.write(f.serialnumber)
response.write("<br>")
response.write("Volume hex Serial Number in drive "&testDrive)
response.write(hex(f.serialnumber))
response.write("<br>")
'作為示範,本程式把當前盤序號列出來(16進位)
set f=nothing
set fs=nothing
%>
</html>


2、在合法使用者可以訪問的各個ASP檔案頭部,添加如下代碼:

<% if Session("pass")=false then
'對Session變數進行判定,非法則跳出本ASP檔案
response.redirect("fail.htm")
end if
%>


3、用ASP加密程式(例如微軟公司的SCRENC.EXE,別的ASP加密程式也可以)對各個ASP檔案進行加密。

在DOS狀態下運行SCRENC -l vbscript source.asp destination.asp,即把源檔案source.asp產生了包含密文ASP指令碼的新
檔案destination.asp。SCRENC.EXE可以在微軟公司網站(http://www.microsoft.com免費下載)。
以上程式碼在簡體中文NT4.0、IIS3.0及簡體中文PWIN9.8、PWS4.0下通過。




相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.