AspToDll風火輪是一款編譯型的ASP代碼加密工具,擁有編譯型加密不可被還原的特性,加密原理是將ASP代碼轉換成VB6工程,藉助VB6編譯後無法被反編譯的重大特性,將ASP加密的可靠性推到前所未有的高度,是目前國內唯一的不可解密的ASP代碼加密工具。
基本介紹
- 中文名:AspToDll風火輪
- 作業:ASP代碼加密工具
- 領域:計算機編程
- 類型:編譯型
產品簡介,使用方法,
產品簡介
AspToDll風火輪是一款編譯型的ASP代碼加密工具,擁有編譯型加密不可被還原的特性,加密原理是將ASP代碼轉換成VB6工程,藉助VB6編譯後無法被反編譯的重大特性,將ASP加密的可靠性推到前所未有的高度,是目前國內唯一的不可解密的ASP代碼加密工具。自2004年發布第一版本以來(前身AspTransBuilder),到目前為止成功加密過國內外大小數萬個ASP網站,深受ASP開發者的喜愛。
長期以來,AspToDll風火輪以封裝DLL的加密方案為廣大ASP開發者提供強有力的代碼保護。眾所周知,只有封裝DLL的加密方式才是安全的加密方式,但是封裝DLL的加密方式需要使用者具備一定的ASP基礎,我們假定我們的客戶自己掌握ASP技術,便於調試。不過,ASP代碼本身的技術門檻很低,所以有大量的業餘開發者以及一般電腦愛好者也開發ASP程式,也需要加密ASP,他們無法駕馭封裝DLL形式的加密方案,只好退而求次,選擇低端的非編譯型ASP加密方案。
有鑒於此,我們在最新版AspToDll風火輪裡面集成了兩種常用的非編譯型Asp代碼加密方案,我們建議,業餘愛好者以及一般電腦愛好者使用“臨時檔案執行”方式的加密方案,這種加密方案可以無錯加密任意複雜的ASP程式,無需任何人工的修改量。而且,可以自定義加密解密算法,其對應的ASP代碼解密組件完全公開原始碼,業餘開發人員可以從中學習非編譯型ASP加密方法,打造出個性化的自定義的ASP代碼加密解密工具。
使用方法
使用AspToDll風火輪打造一款個性化的ASP代碼加密工具
打開ASP檔案,經常看到類似這樣的代碼,創建一個組件,然後傳入一大堆沒有意義的字元,如下:
<%
Dim obj
Set obj = Server.CreateObject("AspDeCode.DeCode")
obj.AddCode "PCUNCm9wdGlvbiBleHBsaWNpdA0KQ29uc3QgSkVUXzNYID0gNA0KaWYgIiImUmVxdWVzdC5Gb3JtKCJzZXNzaW9uaWQiKSYiIjw+"
obj.AddCode "IiImc2Vzc2lvbi5zZXNzaW9uaWQmIiIgdGhlbiBBbGVydCgi0KfR6cLrtO3O8yIpDQoNCkRpbSBkYnBhdGgsYm9vbElzOTcNCmRi"
obj.AddCode "PiINCglFbmQgSWYNCkVuZCBGdW5jdGlvbg0KDQpTdWIgQWxlcnQoTWVzc2FnZSkNCiU+DQo8c2NyaXB0IGxhbmd1YWdlPSdKYXZh"
obj.AddCode "U2NyaXB0JyB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPmFsZXJ0KCc8JT1NZXNzYWdlJT4nKTtoaXN0b3J5LmJhY2soKTs8L3Njcmlw"
obj.AddCode "dD48c2NyaXB0IGxhbmd1YWdlPSdKYXZhU2NyaXB0JyB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPndpbmRvdy5jbG9zZSgpOzwvc2Ny"
obj.AddCode "aXB0Pg0KPCUNCglyZXNwb25zZS5lbmQNCkVuZCBTdWINCiU+DQo="
obj.RunCode
Set obj = Nothing
%>
然ASP檔案卻可以正常執行,其實,這種ASP代碼是被一種加密算法加密了,那么,為何被加密了卻可以正確執行?這種加密都有一個共同的特徵,需要臨時解密,要在伺服器註冊一個對應的ASP代碼解密組件,我們看到,代碼的起始位置有一句創建組件的代碼,該組件將密文解密成原始的ASP腳本,再將腳本傳入產生的臨時檔案或者腳本引擎組件(Msscript.ocx)解釋執行。其中,產生臨時檔案的方式可以達到完全兼容,無需任何人工修改量的效果。不論其ASP代碼有多么複雜,都可以實現無錯加密。那么,其具體的工作原理又是怎樣的呢?
相信大多數ASP開發者都很想知道是怎樣運行的,而另一種以封裝DLL形式的加密方式沒有秘密可言,使用AspToDll風火輪將其生成VB6代碼,然後編譯通過就可。但這種ASP代碼解密組件的代碼卻是黑匣子,其中有什麼玄妙之處?雖然,對於專業技術人員來說,這其實並不是什麼秘密,不過,對於廣大的ASP業餘開發者或者一般電腦愛好者來說,卻不是那么容易看出其端倪的,讓AspToDll風火輪為大家解開其神秘的面紗。
打開AspToDll風火輪1.35版本,選擇好你要加密的源檔案目錄,輸出目錄,再點擊“編碼加密”按鈕,很快,目錄下的所有ASP源檔案已經被編碼並生成到輸出目錄的ASPCODE子目錄中,檢查當中的每一個檔案,發現都被加密成了如上的怪字元,我們只需要將輸出目錄的DLL子目錄裡面的AspDeCode.dll組件註冊一下(運行RegDll.bat),再去訪問AspCode目錄裡面的ASP檔案,運行效果簡直與加密之前如出一轍,不論你的代碼如何複雜,都不影響運行效果。
那么,AspDeCode.dll裡面又是具體如何工作的呢?相信廣大業餘開發者是最想知道的事情了,因此,AspToDll風火輪向大家直接提供了AspDeCode.dll的原始碼,就在AspToDll風火輪安裝之後的AspDeCode子目錄,為打開原始碼,我們需要安裝VB6,打開之後,我們發現加密和解密以及運行的代碼都非常簡單,只有一個DeCode類,裡面的加密解密算法就是幾段標準的BASE64代碼,在這裡,我們只需要重點介紹當中的RunCode過程,我們分析一下這段代碼:
Public Sub RunCode()
On Error Resume Next
Dim fso As New Scripting.FileSystemObject
Dim f As Scripting.TextStream
Dim strTemp As String
strTemp = "~" & Rnd & ".tmp"
Set f = fso.CreateTextFile(Server.MapPath(strTemp), True)
f.Write DecodeBase64String(strCode)
f.Close
Server.Transfer strTemp
DeleteFile Server.MapPath(strTemp)
End Sub
AspDeCode.dll就是通過執行這一段RunCode過程運行ASP的,首先是創建一個fso組件對象,然後生成一個隨機數字命名的臨時檔案,將密文用BASE64解密,寫入到臨時檔案中。最後,使用Server.Transfer方法轉向到臨時檔案執行,然後刪除臨時檔案,就這樣完成任務了,這種現買現賣的臨時檔案障眼法是不是很神奇呢?
好了,既然ASP代碼解密組件的代碼向大家公開了,意味著可以隨意修改AspDeCode.dll,個性化自己的ASP代碼解密組件了,你可以增加一些授權的代碼,還可以修改加密算法,在AspToDll風火輪裡面的編碼型加密標籤,點擊“自定義算法”選項,在左邊的文本框中寫入標準VBScript的加密算法,至於解密算法,你既可以在軟體中寫入解密算法,也可以直接修改AspDeCode.dll原始碼實現。通過修改自定義的加密解密算法,
你已經可以打造出一款完全無錯加密且又與眾不同的ASP代碼加密工具了。
AspToDll風火輪如何實現封裝DLL方案的高度兼容性
ASP封裝DLL的加密方案有別於一般的編碼型ASP加密方案,優點是沒有任何辦法可以解開,缺點是對ASP代碼的兼容性比較差。但是,為什麼AspToDll風火輪能夠在較少人工修改量的情況下成功封裝很複雜的ASP代碼,其中一個重要的功能就是“加入容錯性對象”,這一功能其實在1.0版本已經提供,直到1.2版本穩定下來。只有專業版本和企業版本提供這一功能,試用版和標準版是沒有的。下面介紹一下這個功能起到的作用。
在常用的ASP代碼系統中,包含檔案往往有著千絲萬縷的關係,我們看一下以下3個頁面:
page1原始碼:
<!--#include file="page3.asp"-->
<%
x=1
sub a
response.write "a"
end sub
call c
%>
page2原始碼:
<!--#include file="page3.asp"-->
<%
x=2
sub b
response.write "b"
end sub
call c
%>
page3原始碼:
<%
dim x
sub c
if x=1 then
call a
elseif x=2 then
call b
end if
end sub
%>
在這裡,page1和page2分別包含page3,也在頁面內執行page3的某個過程,page3裡面根據參數判斷執行page1或者page2的某個過程,如果採用編碼型的ASP加密方案,可以很輕鬆地處理掉,沒有任何錯誤。但是使用AspToDll風火輪標準版封裝這幾個簡單的頁面的時候發現,3個頁面都不能通過,提示的錯誤信息是“子程式或函式未定義”,其中page1,page2包含page3,所以3個頁面對應的class裡面都出現了page3裡面的所有代碼,其中也包含了sub c,我們看到3個class裡面生成的sub c 代碼都是一樣的,如下:
Sub c()
On Error GoTo Err
If x = 1 Then
Call a
ElseIf x = 2 Then
Call b
End If
Exit Sub
Err:
If Err.Number = -13572468 Then Err.Raise -13572468
AspToDll_WriteLog "\page1.asp, c: " & Err.Description
End Sub
當編譯dll的時候,提示page1頁面class中的“子程式或函式未定義”是因為,page1對應的class沒有sub b的定義,卻在代碼中執行sub b,導致語法錯誤,提示page2頁面class中的“子程式或函式未定義”是因為,page2對應的class中沒有sub a的定義,卻在代碼中執行sub a,也導致語法錯誤,至於page3的錯誤就更加明顯了,對應的class中都沒有sub a和sub b的定義,當然也出現“子程式或函式未定義”的錯誤了。
實際上,這算不算是語法錯誤呢,在asp頁面中,這不能叫做語法錯誤,因為asp頁面運行正常,在業務邏輯中看到,page1不可能會觸發執行sub b的條件,page2也不可能觸發執行sub a的條件,只要沒有觸發到這個可能報錯的條件,就不會產生語法錯誤,因為asp是解釋執行的,沒有編譯過程,也無需檢查語法了。
但是在vb裡面卻不行了,編譯之前首先要檢查語法錯誤,執行了沒有定義的過程就算語法錯誤,所有頁面中,只要有一個地方出現語法錯誤,dll就一定生成不了。這就是為什麼很多asp初學者對封裝dll的加密方式望而生畏的原因。在很多asp代碼中都有類似的情況,像這種“子程式或函式未定義”的問題,一般的asp封裝dll工具都沒有處理好,這就不難解釋,為什麼只有AspToDll風火輪能夠很輕鬆很短時間內成功封裝很複雜的asp代碼系統,那么AspToDll風火輪又是如何處理的呢?點選了“加入容錯性對象”之後,我們看看生成的3個sub c代碼是怎樣的:
page1的sub c:
Sub c()
On Error GoTo Err
If x = 1 Then
Call a
ElseIf x = 2 Then
Call AspToDll_Object.b
End If
Exit Sub
Err:
If Err.Number = -13572468 Then Err.Raise -13572468
AspToDll_WriteLog "\page1.asp, c: " & Err.Description
End Sub
page2的sub c:
Sub c()
On Error GoTo Err
If x = 1 Then
Call AspToDll_Object.a
ElseIf x = 2 Then
Call b
End If
Exit Sub
Err:
If Err.Number = -13572468 Then Err.Raise -13572468
AspToDll_WriteLog "\page2.asp, c: " & Err.Description
End Sub
page3的sub c:
Sub c()
On Error GoTo Err
If x = 1 Then
Call AspToDll_Object.a
ElseIf x = 2 Then
Call AspToDll_Object.b
End If
Exit Sub
Err:
If Err.Number = -13572468 Then Err.Raise -13572468
AspToDll_WriteLog "\page3.asp, c: " & Err.Description
End Sub
我們看到,在可能出現“子程式或函式未定義”這種錯誤的地方,前面都出現了“AspToDll_Object.”這樣的標識,而AspToDll_Object這個對象是一個無意義的對象,在每個class初始化的時候已經定義了,目的就是為了解決這樣的“子程式或函式未定義”的問題,AspToDll風火輪在將asp代碼轉換成vb代碼的時候已經自動識別當前頁面對應的class執行的哪些過程或者調用的哪個變數沒有定義的,就自動加上AspToDll_Object對象,只要加入了容錯性對象,就可以確保在不改變業務邏輯的前提下順利編譯通過,而不會再出現“子程式或函式未定義”的問題。