ASP程序加密解密方法全面解析
|
目前對ASP程序的加密方法主要有三種:腳本編碼器(SRCENC.EXE)加密、組件加密、自編程序加密,下面我們就來展開介紹這三種加密方法…… 如今,用ASP技術(shù)構(gòu)建的網(wǎng)站隨處可見。由于ASP腳本是在服務(wù)器上解釋執(zhí)行的(無法編譯),因此你辛苦開發(fā)出來的ASP代碼,很容易被人拷去任意修改,如何保護(hù)ASP源代碼呢?這是每個(gè)ASP站長都會遇到的難題,網(wǎng)上求解這類問題的帖子非常多,下面我們就來談?wù)凙SP程序的加密方法。 一、如何加密ASP程序? 目前對ASP程序的加密方法主要有三種:腳本編碼器(SRCENC.EXE)加密、組件加密、自編程序加密,下面我們就來展開介紹這三種加密方法。 1、使用微軟的MSScriptEncode進(jìn)行加密 微軟提供了腳本編碼器MSScriptEncode(下載地址http://www.itgene.cn/itgene/download/download.aspID=232),可以對ASP程序進(jìn)行加密。這是一個(gè)簡單的命令行工具,其執(zhí)行文件是SRCENC.EXE,需要在DOS下運(yùn)行。它只加密頁面中嵌入的腳本代碼,把網(wǎng)頁中之間的ASP代碼轉(zhuǎn)換成不可讀的亂碼,其他部分則保持原樣不變。加密后的程序,必須使用InternetExplorer5.0以上版本才能正常瀏覽。 用SRCENC加密之后,文件中被加密過的部分將變成只讀類型,假如你修改了加密部分(哪怕只改動一個(gè)字),就會導(dǎo)致整個(gè)文件不能使用。對于VBScript,加密后在源文件的第一行會顯示:<SCRIPTLANGUAGE="VBScript.Encode">;而JScript(或JavaScript)則會顯示:<SCRIPTLANGUAGE="JScript.Encode"> (1)加密方法 單擊“開始”/程序/附件/命令提示符,在MS-DOS命令行中輸入以下命令,即可對某個(gè)asp文件加密: SRCENC[switches]<要加密asp文件名><加密后的文件名> 其中[switches]項(xiàng)目可以選以下5個(gè)參數(shù) [switches]含義舉例 /s可選。命令中帶了該參數(shù),加密過程中屏幕上就不會有輸出。screnc/slacl.sctulacl.sct 對當(dāng)前目錄中的腳本小程序lacl.sct加密,加密過程中屏幕不顯示任何信息 /f可選。指定輸出文件是否覆蓋同名輸入文件。忽略,將不執(zhí)行覆蓋。screnc/flacl.asp 對文件lacl.asp加密,并用編碼后的同名文件覆蓋原文件 /xl可選。是否在.asp文件的頂部添加@Language指令。忽略,將添加。 /ldefLanguage可選。指定ScriptEncoder加密中選擇的缺省腳本語言。文件中不包含這種腳本語言特性的腳本將被ScriptEncoder忽略。 對于HTML文件,JScript為內(nèi)置缺省腳本語言;對于ASP文件,VBScript為缺省腳本語言;對于擴(kuò)展名為.vbs或.js的文件,ScriptEncoder也有自適應(yīng)能力。screnc/lvbscriptlacl.htmulacl.htm 對文件lacl.htm加密,并生成輸出文件ulacl.htm,確保沒有指定語言屬性的腳本塊使用VBScript /edefExtension可選。指定待加密文件的文件擴(kuò)展名。缺省狀態(tài)下,ScriptEncoder能識別asa,asp,cdx,htm,html,js,sct和vbs文件。screnc/easp11\*.*f:\labxw-jm 對11目錄中的所有.ASP文件進(jìn)行加密,并把編碼后的輸出文件放在f:\labxw-jm目錄中 (2)操作舉例 例如要加密當(dāng)前目錄中的lacl.asp文件,生成加密文件ulacl.asp,則在DOS下輸入命令: screnclacl.aspulacl.asp 對當(dāng)前目錄中的所有.ASP文件進(jìn)行加密,并把編碼后的輸出文件放在f:\labxw中,則使用命令: screnc*.aspf:\labxw 2、使用組件加密asp 以上被screnc加密過的程序,是可以解密的(解密方法下文有介紹),如果你想徹底保護(hù)自己的asp代碼,可以通過開發(fā)activexdll組件的方法進(jìn)行保護(hù)。 Dll文件是被編譯過的機(jī)器代碼,如果沒有源項(xiàng)目文件,是不可能被反編譯的,所以組件加密這種方法最安全,也不可能被破解。下面我們來舉例說明操作過程,例如你要保護(hù)以下asp代碼: 以下是引用片段: sql="select*fromgqwherexs=1orderbydateasc" rs.opensql,conn,1,1 response.write"<AHREF=new0.asp?lbid=gqx><%=gqx%></A>" else 可以把它們改寫成VB組件,然后在ASP文件中調(diào)用組件即可。操作步驟如下: (1)新建一個(gè)vb6的activexdll項(xiàng)目 在屬性窗口中,命名你的庫模塊和項(xiàng)目文件(例如項(xiàng)目名lacl,模塊名disp),以后在asp文件中,調(diào)用的對象名將為lacl_disp 選擇vb6中的項(xiàng)目菜單中的references,選中microsoftactivexdataobjects2.0library (2)編寫VB組件 接下來把<欲保護(hù)的asp代碼>改寫成VB組件,代碼如下: 以下是引用片段: dimoutstringasstring dimconnasadodb.connection dimrstasadodb.recordset dimsqlstringasstring setconn=createobject("adodb.connection") setrst=createobject("adodb.recordset") sqlstring="select*from"&disp_table&"wherexs=1orderbydateasc" '以上是在VB中打開數(shù)據(jù)庫操作,數(shù)據(jù)庫中的表名、字段名,你可以根據(jù)自己的需要修改 conn.open"dsn=sumnet" ifrst.eofandrst.bofthen outstring="還沒有這類單位信息" else endif rst.close 寫好以上VB代碼后,保存項(xiàng)目并開始編譯。 (3)生成安裝文件 打開visualstudio6中附帶的packagedeploymentwizard程序,選擇剛才建立的activex項(xiàng)目文件lacl;選擇package,選擇要打包的腳本或使用默認(rèn)腳本,選擇標(biāo)準(zhǔn)安裝,為生成的安裝文件選擇一個(gè)存放目錄,選擇singlecab.其他均默認(rèn);然后單擊下一步,安裝文件就自動生成了! (4)在IIS服務(wù)器上安裝組件 在IIS服務(wù)器上運(yùn)行這個(gè)安裝文件,把組件安裝到服務(wù)器上。 (5)在網(wǎng)頁中調(diào)用組件 以后在ASP文件中,通過調(diào)用該組件完成原來的功能。在網(wǎng)頁中調(diào)用你制作的組件,方法如下: 以下是引用片段: <% %> <html> <body> <%=diaoyong.html_combo("gq")%> <br> </body> </html> 你看,現(xiàn)在Asp文件中的內(nèi)容只是組件的調(diào)用(與以前完全不同),別人即使得到該文件,也無法編輯修改源代碼,因?yàn)榇a都被封裝在VB組件中了,對于組件中的代碼,外人是無法看到、也不能反編譯的! 3、自己編寫加密程序 組件加密方法雖然不可破解,但是要求你熟悉VB編程,需要把ASP代碼改寫成VB組件,工作量很大,所以建議大家自己編程來保護(hù)asp代碼,其基本思路是:寫一個(gè)加密函數(shù)base64Encode和解密函數(shù)base64Decode,先用加密函數(shù)處理<要保護(hù)的asp代碼>,得到對應(yīng)的密文hu;然后再用execute(base64Decode(hu))替換<欲保護(hù)的asp代碼>。 例如我們要保護(hù)上面那段asp代碼,可以這樣操作: (1)用WORD處理<要保護(hù)的ASP代碼> 將<要保護(hù)的ASP代碼>拷到WORD中;在WORD中,把代碼里的段落標(biāo)記(回車換行)全部替換成“水”這個(gè)漢字,方法是:點(diǎn)擊“編輯”/替換,光標(biāo)移到“查找內(nèi)容”欄,點(diǎn)“高級”/特殊字符,選擇“段落標(biāo)記”;光標(biāo)移到“替換為”欄,輸入“水”,最后點(diǎn)“全部替換”。同法,把代碼中的單引號也全部替換成“加”這個(gè)漢字。 (2)編寫、運(yùn)行加密程序 在FrontPage中編寫加密程序,該程序中有初始化函數(shù)initCodecs、加密函數(shù)base64Encode(代碼如下),把WORD處理后的代碼,copy粘貼在inp=""這句中,最后以test1.asp名存盤;在IE中輸入http://127.0.0.1/test1.asp本地運(yùn)行該文件;屏幕上會顯示一大段亂碼(例如c2V0IHJzPXNlcnZlci5jcmVhd...),這就是《要保護(hù)的asp代碼》對應(yīng)的密文! 以下是引用片段: dimnewline inp="<WORD處理后的asp代碼>"'將要保護(hù)的asp代碼用WORD處理,然后填在此處 hu=base64Encode(inp)'調(diào)用函數(shù)base64Encode進(jìn)行加密,得到密文hu Response.Write(hu)'顯示密文 PUBLICSUBinitCodecs()'初始化函數(shù)initCodecs newline="<P>"&chr(13)&chr(10) dimmax,idx max=len(BASE_64_MAP_INIT) foridx=0tomax-1 Base64EncMap(idx)=mid(BASE_64_MAP_INIT,idx+1,1) next Base64DecMap(ASC(Base64EncMap(idx)))=idx next iflen(plain)=0then base64Encode="" exitfunction by3=(len(plain)\3)*3 ndx=1 dowhilendx<=by3 first=asc(mid(plain,ndx+0,1)) second=asc(mid(plain,ndx+1,1)) third=asc(mid(plain,ndx+2,1)) ret=ret&Base64EncMap((first\4)AND63) ret=ret&Base64EncMap(((first*16)AND48)+((second\16)AND15)) ret=ret&Base64EncMap(((second*4)AND60)+((third\64)AND3)) ret=ret&Base64EncMap(thirdAND63) ndx=ndx+3 loop first=asc(mid(plain,ndx+0,1)) ret=ret&Base64EncMap((first\4)AND63) if(len(plain)MOD3)=2then second=asc(mid(plain,ndx+1,1)) ret=ret&Base64EncMap(((first*16)AND48)+((second\16)AND15)) ret=ret&Base64EncMap(((second*4)AND60)) else ret=ret'&"=" endif endif ENDFUNCTION (3)重新改寫要保護(hù)的asp文件 改寫原來的asp文件,在文件中增加UnEncode和base64Decode函數(shù),全部代碼如下: 以下是引用片段: Hu=”c2V0IHJzPXNlcnZlci5jcmVhdGVvYmplY3Qo12Fkb2RiLnJlY29yZHNldOMpICAgICDuc3FsPeNzZWxlY3QgKiBmcm9tIGdxICB3aGVyZSB4cz0xIG9yZGVyIGJ5IGRhdGUgYXNj1yAgICAgsnJzLm9wZW4gc3FsLGNvbm4sMSwxICAgICDuaWYgcnMuZW9mIGFuZCBycy5ib2YgdGhlbiDucmVzcG9uc2Uud3JpdGUTvSD7INAg5iAgILUgvyAFILITsmVsc2UgsiAgICAgUmVzcG9uc2UuV3JpdGUg1zxBIEhSRUY9bmV3MC5hc3A/bGJpZD0TJnJlcXVlc3Qo12xiaWQTKSAmIOM+PC9BPuPuZW5kIGlmICAgIL5zZXQgcnM9bm90aGluZyAgICAgICAgsmNvbm4uY2xvc2UgICAgICDuc2V0IGNvbm49bm90aGluZyAgIL4” Hu2=base64Decode(hu)'還原要保護(hù)的ASP代碼 execute(UnEncode(Hu2))'還原單引號、回車換行,并執(zhí)行原代碼 ’解密函數(shù)base64Decode iflen(scrambled)=0then base64Decode="" exitfunction dowhilemid(scrambled,realLen,1)="=" realLen=realLen-1 loop ret="" by4=(realLen\4)*4 ndx=1 dowhilendx<=by4 first=Base64DecMap(asc(mid(scrambled,ndx+0,1))) second=Base64DecMap(asc(mid(scrambled,ndx+1,1))) third=Base64DecMap(asc(mid(scrambled,ndx+2,1))) fourth=Base64DecMap(asc(mid(scrambled,ndx+3,1))) ret=ret&chr(((first*4)AND255)+((second\16)AND3)) ret=ret&chr(((second*16)AND255)+((third\4)AND15)) ret=ret&chr(((third*64)AND255)+(fourthAND63)) ndx=ndx+4 loop first=Base64DecMap(asc(mid(scrambled,ndx+0,1))) second=Base64DecMap(asc(mid(scrambled,ndx+1,1))) ret=ret&chr(((first*4)AND255)+((second\16)AND3)) ifrealLenMOD4=3then third=Base64DecMap(asc(mid(scrambled,ndx+2,1))) ret=ret&chr(((second*16)AND255)+((third\4)AND15)) endif ENDFUNCTION ifmid(cc,i,1)<>"水"then ifmid(cc,i,1)="加"then temp=""""&temp else endif 將以上代碼以test2.asp名存盤。 (4)用SRCENC加密test2.asp 用SRCENC加密test2.asp,然后把它發(fā)布到服務(wù)器上,這樣別人即使得到該文件、破解了SRCENC加密,也無法看到原代碼,因?yàn)樵a在test2.asp中是密文(Hu=”c2V0IHJzPXNlcnZlc...),所以ASP代碼就被保護(hù)起來了! 二、加密過的asp程序如何解密? 如何對加密過的asp程序解密呢?首先我們要告訴大家,用組件法加密的asp程序是無法解密的,而screnc加密過的程序則可以解密,方法是:使用解密軟件(ZWDECODE.EXE)。 ZWDECODE.EXE(下載地址http://www.mydown.com/softdown/45/45183.html)可以對MSScriptEncode加密的ASP文件進(jìn)行解密,還原出源代碼。 (1)解密方法 單擊“開始”/程序/附件/命令提示符,在MS-DOS命令行中輸入以下命令,即可恢復(fù)原代碼: ZWDECODE<已加密asp文件名> 其中<已加密asp文件名>必需輸入,該文件名可帶目錄路徑;也必需輸入,這是要生成的輸出文件名,也可以帶路徑信息。 (2)舉例 例如F:\22\lacl.asp曾被screnc加密處理過,現(xiàn)在要恢復(fù)其中的源代碼,你可以在MS-DOS中輸入以下命令: ZWDECODEF:\22\lacl.aspd:\ulacl.asp 執(zhí)行完畢,在D盤上就會生成一個(gè)ulacl.asp文件,打開該文件,你就能看到源代碼了! |
總結(jié)
以上是生活随笔為你收集整理的ASP程序加密解密方法全面解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 醒图怎么把两张照片合在一起
- 下一篇: redux的工作流程