AspToDll風火輪

AspToDll風火輪是一款編譯型的ASP代碼加密工具,擁有編譯型加密不可被還原的特性,加密原理是將ASP代碼轉換成VB6工程,藉助VB6編譯後無法被反編譯的重大特性,將ASP加密的可靠性推到前所未有的高度,是目前國內唯一的不可解密的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對象,只要加入了容錯性對象,就可以確保在不改變業務邏輯的前提下順利編譯通過,而不會再出現“子程式或函式未定義”的問題。
一直以來,不少試用版用戶向我抱怨,為什麼你這么輕鬆就可以封裝這么多開原始碼的系統,而試用版就連一個稍微複雜一點的首頁都編譯不了,主要的原因就是這個“加入容錯性對象”的功能。因為AspToDll風火輪的加密原理是轉換成VB工程,所以我們無法在確保我們自己權益的前提下讓試用版體驗到這一功能,請大家能夠理解。

相關詞條

熱門詞條

聯絡我們