ASP程序加密解密方法全面解析

 

目前對ASP程序的加密方法主要有三種:腳本編碼器(SRCENC.EXE)加密、組件加密、自編程序加密,下面我們就來展開介紹這三種加密方法……
  如今,用ASP技術構建的網站隨處可見。由於ASP腳本是在服務器上解釋執行的(無法編譯),因此你辛苦開發出來的ASP代碼,很容易被人拷去任意修改,如何保護ASP源代碼呢?這是每個ASP站長都會遇到的難題,網上求解這類問題的帖子非常多,下面我們就來談談ASP程序的加密方法。
  一、如何加密ASP程序?
  目前對ASP程序的加密方法主要有三種:腳本編碼器(SRCENC.EXE)加密、組件加密、自編程序加密,下面我們就來展開介紹這三種加密方法。
  1、使用微軟的MS Script Encode進行加密
  微軟提供了腳本編碼器MS Script Encode(下載地址http://www.itgene.cn/itgene/download/download.aspID=232),可以對ASP程序進行加密。這是一個簡單的命令行工具,其執行文件是SRCENC.EXE,需要在DOS下運行。它只加密頁面中嵌入的腳本代碼,把網頁中之間的ASP代碼轉換成不可讀的亂碼,其他部分則保持原樣不變。加密後的程序,必須使用Internet Explorer 5.0以上版本才能正常瀏覽。
  用SRCENC加密之後,文件中被加密過的部分將變成只讀類型,假如你修改了加密部分(哪怕只改動一個字),就會導致整個文件不能使用。對於 VBScript,加密後在源文件的第一行會顯示:<SCRIPT LANGUAGE="VBScript.Encode">;而JScript(或 JavaScript)則會顯示:<SCRIPT LANGUAGE="JScript.Encode">
  (1)加密方法
  單擊“開始”/程序/附件/命令提示符,在MS-DOS 命令行中輸入以下命令,即可對某個asp文件加密:
SRCENC  [switches]  <要加密asp文件名>  <加密後的文件名>
  其中[switches]項目可以選以下5個參數
  [switches] 含義 舉例
  /s 可選。命令中帶了該參數,加密過程中屏幕上就不會有輸出。 screnc /s lacl.sct ulacl.sct
  對當前目錄中的腳本小程序lacl.sct加密,加密過程中屏幕不顯示任何信息
  /f 可選。指定輸出文件是否覆蓋同名輸入文件。忽略,將不執行覆蓋。 screnc /f lacl.asp
  對文件 lacl.asp加密,並用編碼後的同名文件覆蓋原文件
  /xl 可選。是否在.asp文件的頂部添加@Language指令。忽略,將添加。
  /l defLanguage 可選。指定Script Encoder加密中選擇的缺省腳本語言。文件中不包含這種腳本語言特性的腳本將被Script Encoder 忽略。
  對於HTML文件,JScript爲內置缺省腳本語言;對於ASP文件,VBScript爲缺省腳本語言;對於擴展名爲.vbs或.js的文件,Script Encoder也有自適應能力。 screnc /l vbscript lacl.htm ulacl.htm
  對文件 lacl.htm加密,並生成輸出文件 ulacl.htm,確保沒有指定語言屬性的腳本塊使用 VBScript
  /e defExtension 可選。指定待加密文件的文件擴展名。缺省狀態下,Script Encoder能識別asa,asp,cdx,htm,html,js,sct和vbs文件。 screnc /e asp 11\*.* f:\labxw-jm
  對11目錄中的所有.ASP 文件進行加密,並把編碼後的輸出文件放在f:\labxw-jm目錄中
  (2)操作舉例
  例如要加密當前目錄中的lacl.asp文件,生成加密文件ulacl.asp,則在DOS下輸入命令:
  screnc lacl.asp ulacl.asp
  對當前目錄中的所有 .ASP 文件進行加密,並把編碼後的輸出文件放在f:\labxw中,則使用命令:
  screnc *.asp f:\labxw
  2、使用組件加密asp
  以上被screnc加密過的程序,是可以解密的(解密方法下文有介紹),如果你想徹底保護自己的asp代碼,可以通過開發activex dll組件的方法進行保護。
  Dll文件是被編譯過的機器代碼,如果沒有源項目文件,是不可能被反編譯的,所以組件加密這種方法最安全,也不可能被破解。下面我們來舉例說明操作過程,例如你要保護以下asp代碼:
以下是引用片段:
  set rs=server.createobject("adodb.recordset")
  sql="select * from gq where xs=1 order by date asc"
  rs.open sql,conn,1,1
  if rs.eof and rs.bof then
  response.write"<A href="http://blog.77169.com/new0.asp?lbid=gqx ";><%= gqx %></A>"
  else
  Response.Write ""
  end if
  set rs=nothing
  conn.close
  set conn=nothing

  可以把它們改寫成VB組件,然後在ASP文件中調用組件即可。操作步驟如下:
  (1)新建一個vb6的activex dll項目
  在屬性窗口中,命名你的庫模塊和項目文件(例如項目名lacl,模塊名disp),以後在asp文件中,調用的對象名將爲lacl_disp
  選擇vb6中的項目菜單中的references ,選中microsoft activex data objects 2.0 library
  (2)編寫VB組件
  接下來把<欲保護的asp代碼>改寫成VB組件,代碼如下:
以下是引用片段:
  public function html_combo(disp_table as string) as string
  dim outstring as string
  dim conn as adodb.connection
  dim rst as adodb.recordset
  dim sqlstring as string
  set conn = createobject("adodb.connection")
  set rst = createobject("adodb.recordset")
  sqlstring = "select * from " & disp_table & " where xs=1 order by date asc"
  '以上是在VB中打開數據庫操作,數據庫中的表名、字段名,你可以根據自己的需要修改
  conn.open "dsn=sumnet"
  rst.open sqlstring, conn, 3, 3
  if rst.eof and rst.bof then
  outstring = "還沒有這類單位信息"
  else
  rst.movefirst
  outstring = "<A href="http://blog.77169.com/new0.asp?lbid=""&request("lbid") & "></A>"
  end if
  html_combo = outstring
  rst.close
  conn.close
  end function

  寫好以上VB代碼後,保存項目並開始編譯。
  (3)生成安裝文件
  打開visual studio 6中附帶的package deployment wizard程序,選擇剛纔建立的activex項目文件lacl;選擇package,選擇要打包的腳本或使用默認腳本,選擇標準安裝,爲生成的安裝文件選擇一個存放目錄,選擇single cab. 其他均默認;然後單擊下一步,安裝文件就自動生成了!
  (4)在IIS服務器上安裝組件
  在IIS服務器上運行這個安裝文件,把組件安裝到服務器上。
  (5)在網頁中調用組件
  以後在ASP文件中,通過調用該組件完成原來的功能。在網頁中調用你製作的組件,方法如下:
以下是引用片段:
  <%@ language="vbscript" %>
  <%
  set diaoyong = server.createobject("lacl_disp.disp")
  %>                          
  <html>
  <body>
  <%= diaoyong.html_combo("gq")%>
  <br>
  </body>
  </html>

  你看,現在Asp文件中的內容只是組件的調用(與以前完全不同),別人即使得到該文件,也無法編輯修改源代碼,因爲代碼都被封裝在VB組件中了,對於組件中的代碼,外人是無法看到、也不能反編譯的!
  3、自己編寫加密程序
  組件加密方法雖然不可破解,但是要求你熟悉VB編程,需要把ASP代碼改寫成VB組件,工作量很大,所以建議大家自己編程來保護asp代碼,其基本思路是:寫一個加密函數base64Encode和解密函數base64Decode,先用加密函數處理<要保護的asp代碼>,得到對應的密文hu;然後再用execute(base64Decode(hu))替換<欲保護的asp代碼>。
  例如我們要保護上面那段asp代碼,可以這樣操作:
  (1)用WORD處理<要保護的ASP代碼>
  將<要保護的ASP代碼>拷到WORD中;在WORD中,把代碼裏的段落標記(回車換行)全部替換成“水”這個漢字,方法是:點擊“編輯”/替換,光標移到“查找內容”欄,點“高級”/特殊字符,選擇“段落標記”;光標移到“替換爲”欄,輸入“水”,最後點“全部替換”。同法,把代碼中的單引號也全部替換成“加”這個漢字。
  (2)編寫、運行加密程序
  在FrontPage中編寫加密程序,該程序中有初始化函數initCodecs、加密函數base64Encode(代碼如下),把WORD處理後的代碼,copy粘貼在inp = ""這句中,最後以test1.asp名存盤;在IE中輸入http://127.0.0.1/test1.asp本地運行該文件;屏幕上會顯示一大段亂碼(例如c2V0IHJzPXNlcnZlci5jcmVhd...),這就是《要保護的asp代碼》對應的密文!
以下是引用片段:
  OPTION EXPLICIT
  const BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
  dim newline
  dim Base64EncMap(63)
  dim Base64DecMap(127)
  dim inp,hu,encode
  call initCodecs '初始化
  inp = "<WORD處理後的asp代碼>" '將要保護的asp代碼用WORD處理,然後填在此處
  hu= base64Encode(inp) '調用函數base64Encode進行加密,得到密文hu
  Response.Write(hu) '顯示密文
  PUBLIC SUB initCodecs() '初始化函數initCodecs
  newline = "<P>" & chr(13) & chr(10)
  dim max, idx
  max = len(BASE_64_MAP_INIT)
  for idx = 0 to max - 1
  Base64EncMap(idx) = mid(BASE_64_MAP_INIT, idx + 1, 1)
  next
  for idx = 0 to max - 1
  Base64DecMap(ASC(Base64EncMap(idx))) = idx
  next
  END SUB
  PUBLIC FUNCTION base64Encode(plain) '加密函數base64Encode
  if len(plain) = 0 then
  base64Encode = ""
  exit function
  end if
  dim ret, ndx, by3, first, second, third
  by3 = (len(plain) \ 3) * 3
  ndx = 1
  do while ndx <= 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) AND 63 )
  ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
  ret = ret & Base64EncMap( ((second * 4) AND 60) + ((third \ 64) AND 3 ) )
  ret = ret & Base64EncMap( third AND 63)
  ndx = ndx + 3
  loop
  if by3 < len(plain) then
  first = asc(mid(plain, ndx+0, 1))
  ret = ret & Base64EncMap( (first \ 4) AND 63 )
  if (len(plain) MOD 3 ) = 2 then
  second = asc(mid(plain, ndx+1, 1))
  ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
  ret = ret & Base64EncMap( ((second * 4) AND 60) )
  else
  ret = ret & Base64EncMap( (first * 16) AND 48)
  ret = ret '& "="
  end if
  ret = ret '& "="
  end if
  base64Encode = ret
  END FUNCTION
  (3)重新改寫要保護的asp文件
  改寫原來的asp文件,在文件中增加UnEncode 和base64Decode函數,全部代碼如下:
以下是引用片段:
  Dim Hu,Hu2
  '拷貝“欲保護asp代碼”的密文 將之存放到Hu變量中
  Hu=”c2V0IHJzPXNlcnZlci5jcmVhdGVvYmplY3Qo12Fkb2RiLnJlY29yZHNldOMpICAgICDuc3FsPeNzZWxlY3QgKiBmcm9tIGdxICB3aGVyZSB4cz0xIG9yZGVyIGJ5IGRhdGUgYXNj1yAgICAgsnJzLm9wZW4gc3FsLGNvbm4sMSwxICAgICDuaWYgcnMuZW9mIGFuZCBycy5ib2YgdGhlbiDucmVzcG9uc2Uud3JpdGUTvSD7INAg5iAgILUgvyAFILITsmVsc2UgsiAgICAgUmVzcG9uc2UuV3JpdGUg1zxBIEhSRUY9bmV3MC5hc3A/bGJpZD0TJnJlcXVlc3Qo12xiaWQTKSAmIOM+PC9BPuPuZW5kIGlmICAgIL5zZXQgcnM9bm90aGluZyAgICAgICAgsmNvbm4uY2xvc2UgICAgICDuc2V0IGNvbm49bm90aGluZyAgIL4”
  Hu2= base64Decode(hu) '還原要保護的ASP代碼
  execute(UnEncode(Hu2)) '還原單引號、回車換行,並執行原代碼
  ’解密函數base64Decode
  FUNCTION base64Decode(scrambled)
  if len(scrambled) = 0 then
  base64Decode = ""
  exit function
  end if
  dim realLen
  realLen = len(scrambled)
  do while mid(scrambled, realLen, 1) = "="
  realLen = realLen - 1
  loop
  dim ret, ndx, by4, first, second, third, fourth
  ret = ""
  by4 = (realLen \ 4) * 4
  ndx = 1
  do while ndx <= 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) AND 255) + ((second \ 16) AND 3))
  ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15))
  ret = ret & chr( ((third * 64) AND 255) + (fourth AND 63))
  ndx = ndx + 4
  loop
  if ndx < realLen then
  first = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
  second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
  ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3))
  if realLen MOD 4 = 3 then
  third = Base64DecMap(asc(mid(scrambled,ndx+2,1)))
  ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15))
  end if
  end if
  base64Decode = ret
  END FUNCTION
  '還原單引號、回車換行函數UnEncode
  function UnEncode(cc)
  for i = 1 to len(cc)
  if mid(cc,i,1)<> "水" then
  if mid(cc,i,1)="加" then
  temp = """" & temp
  else
  temp = Mid(cc, i, 1) + temp
  end if
  else
  temp=newline&temp
  end if
  next
  UnEncode=temp
  end function

  將以上代碼以test2.asp名存盤。
  (4)用SRCENC加密test2.asp
  用SRCENC加密test2.asp,然後把它發佈到服務器上,這樣別人即使得到該文件、破解了SRCENC加密,也無法看到原代碼,因爲原代碼在test2.asp中是密文(Hu=”c2V0IHJzPXNlcnZlc...),所以ASP代碼就被保護起來了!
  
     二、加密過的asp程序如何解密?
  如何對加密過的asp程序解密呢?首先我們要告訴大家,用組件法加密的asp程序是無法解密的,而screnc加密過的程序則可以解密,方法是:使用解密軟件(ZWDECODE.EXE)。
  ZWDECODE.EXE(下載地址http://www.mydown.com/softdown/45/45183.html)可以對MS Script Encode加密的ASP文件進行解密,還原出源代碼。
  (1)解密方法
  單擊“開始”/程序/附件/命令提示符,在MS-DOS 命令行中輸入以下命令,即可恢復原代碼:
  ZWDECODE <已加密asp文件名>
  其中<已加密asp文件名>必需輸入,該文件名可帶目錄路徑;也必需輸入,這是要生成的輸出文件名,也可以帶路徑信息。
  (2)舉例
  例如F:\22\lacl.asp曾被screnc加密處理過,現在要恢復其中的源代碼,你可以在MS-DOS中輸入以下命令:
  ZWDECODE F:\22\lacl.asp d:\ulacl.asp
  執行完畢,在D盤上就會生成一個ulacl.asp文件,打開該文件,你就能看到源代碼了!
目前對ASP程序的加密方法主要有三種:腳本編碼器(SRCENC.EXE)加密、組件加密、自編程序加密,下面我們就來展開介紹這三種加密方法……
  如今,用ASP技術構建的網站隨處可見。由於ASP腳本是在服務器上解釋執行的(無法編譯),因此你辛苦開發出來的ASP代碼,很容易被人拷去任意修改,如何保護ASP源代碼呢?這是每個ASP站長都會遇到的難題,網上求解這類問題的帖子非常多,下面我們就來談談ASP程序的加密方法。
  一、如何加密ASP程序?
  目前對ASP程序的加密方法主要有三種:腳本編碼器(SRCENC.EXE)加密、組件加密、自編程序加密,下面我們就來展開介紹這三種加密方法。
  1、使用微軟的MS Script Encode進行加密
  微軟提供了腳本編碼器MS Script Encode(下載地址http://www.itgene.cn/itgene/download/download.aspID=232),可以對ASP程序進行加密。這是一個簡單的命令行工具,其執行文件是SRCENC.EXE,需要在DOS下運行。它只加密頁面中嵌入的腳本代碼,把網頁中之間的ASP代碼轉換成不可讀的亂碼,其他部分則保持原樣不變。加密後的程序,必須使用Internet Explorer 5.0以上版本才能正常瀏覽。
  用SRCENC加密之後,文件中被加密過的部分將變成只讀類型,假如你修改了加密部分(哪怕只改動一個字),就會導致整個文件不能使用。對於 VBScript,加密後在源文件的第一行會顯示:<SCRIPT LANGUAGE="VBScript.Encode">;而JScript(或 JavaScript)則會顯示:<SCRIPT LANGUAGE="JScript.Encode">
  (1)加密方法
  單擊“開始”/程序/附件/命令提示符,在MS-DOS 命令行中輸入以下命令,即可對某個asp文件加密:
SRCENC  [switches]  <要加密asp文件名>  <加密後的文件名>
  其中[switches]項目可以選以下5個參數
  [switches] 含義 舉例
  /s 可選。命令中帶了該參數,加密過程中屏幕上就不會有輸出。 screnc /s lacl.sct ulacl.sct
  對當前目錄中的腳本小程序lacl.sct加密,加密過程中屏幕不顯示任何信息
  /f 可選。指定輸出文件是否覆蓋同名輸入文件。忽略,將不執行覆蓋。 screnc /f lacl.asp
  對文件 lacl.asp加密,並用編碼後的同名文件覆蓋原文件
  /xl 可選。是否在.asp文件的頂部添加@Language指令。忽略,將添加。
  /l defLanguage 可選。指定Script Encoder加密中選擇的缺省腳本語言。文件中不包含這種腳本語言特性的腳本將被Script Encoder 忽略。
  對於HTML文件,JScript爲內置缺省腳本語言;對於ASP文件,VBScript爲缺省腳本語言;對於擴展名爲.vbs或.js的文件,Script Encoder也有自適應能力。 screnc /l vbscript lacl.htm ulacl.htm
  對文件 lacl.htm加密,並生成輸出文件 ulacl.htm,確保沒有指定語言屬性的腳本塊使用 VBScript
  /e defExtension 可選。指定待加密文件的文件擴展名。缺省狀態下,Script Encoder能識別asa,asp,cdx,htm,html,js,sct和vbs文件。 screnc /e asp 11\*.* f:\labxw-jm
  對11目錄中的所有.ASP 文件進行加密,並把編碼後的輸出文件放在f:\labxw-jm目錄中
  (2)操作舉例
  例如要加密當前目錄中的lacl.asp文件,生成加密文件ulacl.asp,則在DOS下輸入命令:
  screnc lacl.asp ulacl.asp
  對當前目錄中的所有 .ASP 文件進行加密,並把編碼後的輸出文件放在f:\labxw中,則使用命令:
  screnc *.asp f:\labxw
  2、使用組件加密asp
  以上被screnc加密過的程序,是可以解密的(解密方法下文有介紹),如果你想徹底保護自己的asp代碼,可以通過開發activex dll組件的方法進行保護。
  Dll文件是被編譯過的機器代碼,如果沒有源項目文件,是不可能被反編譯的,所以組件加密這種方法最安全,也不可能被破解。下面我們來舉例說明操作過程,例如你要保護以下asp代碼:
以下是引用片段:
  set rs=server.createobject("adodb.recordset")
  sql="select * from gq where xs=1 order by date asc"
  rs.open sql,conn,1,1
  if rs.eof and rs.bof then
  response.write"<A href="http://blog.77169.com/new0.asp?lbid=gqx ";><%= gqx %></A>"
  else
  Response.Write ""
  end if
  set rs=nothing
  conn.close
  set conn=nothing

  可以把它們改寫成VB組件,然後在ASP文件中調用組件即可。操作步驟如下:
  (1)新建一個vb6的activex dll項目
  在屬性窗口中,命名你的庫模塊和項目文件(例如項目名lacl,模塊名disp),以後在asp文件中,調用的對象名將爲lacl_disp
  選擇vb6中的項目菜單中的references ,選中microsoft activex data objects 2.0 library
  (2)編寫VB組件
  接下來把<欲保護的asp代碼>改寫成VB組件,代碼如下:
以下是引用片段:
  public function html_combo(disp_table as string) as string
  dim outstring as string
  dim conn as adodb.connection
  dim rst as adodb.recordset
  dim sqlstring as string
  set conn = createobject("adodb.connection")
  set rst = createobject("adodb.recordset")
  sqlstring = "select * from " & disp_table & " where xs=1 order by date asc"
  '以上是在VB中打開數據庫操作,數據庫中的表名、字段名,你可以根據自己的需要修改
  conn.open "dsn=sumnet"
  rst.open sqlstring, conn, 3, 3
  if rst.eof and rst.bof then
  outstring = "還沒有這類單位信息"
  else
  rst.movefirst
  outstring = "<A href="http://blog.77169.com/new0.asp?lbid=""&request("lbid") & "></A>"
  end if
  html_combo = outstring
  rst.close
  conn.close
  end function

  寫好以上VB代碼後,保存項目並開始編譯。
  (3)生成安裝文件
  打開visual studio 6中附帶的package deployment wizard程序,選擇剛纔建立的activex項目文件lacl;選擇package,選擇要打包的腳本或使用默認腳本,選擇標準安裝,爲生成的安裝文件選擇一個存放目錄,選擇single cab. 其他均默認;然後單擊下一步,安裝文件就自動生成了!
  (4)在IIS服務器上安裝組件
  在IIS服務器上運行這個安裝文件,把組件安裝到服務器上。
  (5)在網頁中調用組件
  以後在ASP文件中,通過調用該組件完成原來的功能。在網頁中調用你製作的組件,方法如下:
以下是引用片段:
  <%@ language="vbscript" %>
  <%
  set diaoyong = server.createobject("lacl_disp.disp")
  %>                          
  <html>
  <body>
  <%= diaoyong.html_combo("gq")%>
  <br>
  </body>
  </html>

  你看,現在Asp文件中的內容只是組件的調用(與以前完全不同),別人即使得到該文件,也無法編輯修改源代碼,因爲代碼都被封裝在VB組件中了,對於組件中的代碼,外人是無法看到、也不能反編譯的!
  3、自己編寫加密程序
  組件加密方法雖然不可破解,但是要求你熟悉VB編程,需要把ASP代碼改寫成VB組件,工作量很大,所以建議大家自己編程來保護asp代碼,其基本思路是:寫一個加密函數base64Encode和解密函數base64Decode,先用加密函數處理<要保護的asp代碼>,得到對應的密文hu;然後再用execute(base64Decode(hu))替換<欲保護的asp代碼>。
  例如我們要保護上面那段asp代碼,可以這樣操作:
  (1)用WORD處理<要保護的ASP代碼>
  將<要保護的ASP代碼>拷到WORD中;在WORD中,把代碼裏的段落標記(回車換行)全部替換成“水”這個漢字,方法是:點擊“編輯”/替換,光標移到“查找內容”欄,點“高級”/特殊字符,選擇“段落標記”;光標移到“替換爲”欄,輸入“水”,最後點“全部替換”。同法,把代碼中的單引號也全部替換成“加”這個漢字。
  (2)編寫、運行加密程序
  在FrontPage中編寫加密程序,該程序中有初始化函數initCodecs、加密函數base64Encode(代碼如下),把WORD處理後的代碼,copy粘貼在inp = ""這句中,最後以test1.asp名存盤;在IE中輸入http://127.0.0.1/test1.asp本地運行該文件;屏幕上會顯示一大段亂碼(例如c2V0IHJzPXNlcnZlci5jcmVhd...),這就是《要保護的asp代碼》對應的密文!
以下是引用片段:
  OPTION EXPLICIT
  const BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
  dim newline
  dim Base64EncMap(63)
  dim Base64DecMap(127)
  dim inp,hu,encode
  call initCodecs '初始化
  inp = "<WORD處理後的asp代碼>" '將要保護的asp代碼用WORD處理,然後填在此處
  hu= base64Encode(inp) '調用函數base64Encode進行加密,得到密文hu
  Response.Write(hu) '顯示密文
  PUBLIC SUB initCodecs() '初始化函數initCodecs
  newline = "<P>" & chr(13) & chr(10)
  dim max, idx
  max = len(BASE_64_MAP_INIT)
  for idx = 0 to max - 1
  Base64EncMap(idx) = mid(BASE_64_MAP_INIT, idx + 1, 1)
  next
  for idx = 0 to max - 1
  Base64DecMap(ASC(Base64EncMap(idx))) = idx
  next
  END SUB
  PUBLIC FUNCTION base64Encode(plain) '加密函數base64Encode
  if len(plain) = 0 then
  base64Encode = ""
  exit function
  end if
  dim ret, ndx, by3, first, second, third
  by3 = (len(plain) \ 3) * 3
  ndx = 1
  do while ndx <= 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) AND 63 )
  ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
  ret = ret & Base64EncMap( ((second * 4) AND 60) + ((third \ 64) AND 3 ) )
  ret = ret & Base64EncMap( third AND 63)
  ndx = ndx + 3
  loop
  if by3 < len(plain) then
  first = asc(mid(plain, ndx+0, 1))
  ret = ret & Base64EncMap( (first \ 4) AND 63 )
  if (len(plain) MOD 3 ) = 2 then
  second = asc(mid(plain, ndx+1, 1))
  ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
  ret = ret & Base64EncMap( ((second * 4) AND 60) )
  else
  ret = ret & Base64EncMap( (first * 16) AND 48)
  ret = ret '& "="
  end if
  ret = ret '& "="
  end if
  base64Encode = ret
  END FUNCTION
  (3)重新改寫要保護的asp文件
  改寫原來的asp文件,在文件中增加UnEncode 和base64Decode函數,全部代碼如下:
以下是引用片段:
  Dim Hu,Hu2
  '拷貝“欲保護asp代碼”的密文 將之存放到Hu變量中
  Hu=”c2V0IHJzPXNlcnZlci5jcmVhdGVvYmplY3Qo12Fkb2RiLnJlY29yZHNldOMpICAgICDuc3FsPeNzZWxlY3QgKiBmcm9tIGdxICB3aGVyZSB4cz0xIG9yZGVyIGJ5IGRhdGUgYXNj1yAgICAgsnJzLm9wZW4gc3FsLGNvbm4sMSwxICAgICDuaWYgcnMuZW9mIGFuZCBycy5ib2YgdGhlbiDucmVzcG9uc2Uud3JpdGUTvSD7INAg5iAgILUgvyAFILITsmVsc2UgsiAgICAgUmVzcG9uc2UuV3JpdGUg1zxBIEhSRUY9bmV3MC5hc3A/bGJpZD0TJnJlcXVlc3Qo12xiaWQTKSAmIOM+PC9BPuPuZW5kIGlmICAgIL5zZXQgcnM9bm90aGluZyAgICAgICAgsmNvbm4uY2xvc2UgICAgICDuc2V0IGNvbm49bm90aGluZyAgIL4”
  Hu2= base64Decode(hu) '還原要保護的ASP代碼
  execute(UnEncode(Hu2)) '還原單引號、回車換行,並執行原代碼
  ’解密函數base64Decode
  FUNCTION base64Decode(scrambled)
  if len(scrambled) = 0 then
  base64Decode = ""
  exit function
  end if
  dim realLen
  realLen = len(scrambled)
  do while mid(scrambled, realLen, 1) = "="
  realLen = realLen - 1
  loop
  dim ret, ndx, by4, first, second, third, fourth
  ret = ""
  by4 = (realLen \ 4) * 4
  ndx = 1
  do while ndx <= 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) AND 255) + ((second \ 16) AND 3))
  ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15))
  ret = ret & chr( ((third * 64) AND 255) + (fourth AND 63))
  ndx = ndx + 4
  loop
  if ndx < realLen then
  first = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
  second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
  ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3))
  if realLen MOD 4 = 3 then
  third = Base64DecMap(asc(mid(scrambled,ndx+2,1)))
  ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15))
  end if
  end if
  base64Decode = ret
  END FUNCTION
  '還原單引號、回車換行函數UnEncode
  function UnEncode(cc)
  for i = 1 to len(cc)
  if mid(cc,i,1)<> "水" then
  if mid(cc,i,1)="加" then
  temp = """" & temp
  else
  temp = Mid(cc, i, 1) + temp
  end if
  else
  temp=newline&temp
  end if
  next
  UnEncode=temp
  end function

  將以上代碼以test2.asp名存盤。
  (4)用SRCENC加密test2.asp
  用SRCENC加密test2.asp,然後把它發佈到服務器上,這樣別人即使得到該文件、破解了SRCENC加密,也無法看到原代碼,因爲原代碼在test2.asp中是密文(Hu=”c2V0IHJzPXNlcnZlc...),所以ASP代碼就被保護起來了!
  
     二、加密過的asp程序如何解密?
  如何對加密過的asp程序解密呢?首先我們要告訴大家,用組件法加密的asp程序是無法解密的,而screnc加密過的程序則可以解密,方法是:使用解密軟件(ZWDECODE.EXE)。
  ZWDECODE.EXE(下載地址http://www.mydown.com/softdown/45/45183.html)可以對MS Script Encode加密的ASP文件進行解密,還原出源代碼。
  (1)解密方法
  單擊“開始”/程序/附件/命令提示符,在MS-DOS 命令行中輸入以下命令,即可恢復原代碼:
  ZWDECODE <已加密asp文件名>
  其中<已加密asp文件名>必需輸入,該文件名可帶目錄路徑;也必需輸入,這是要生成的輸出文件名,也可以帶路徑信息。
  (2)舉例
  例如F:\22\lacl.asp曾被screnc加密處理過,現在要恢復其中的源代碼,你可以在MS-DOS中輸入以下命令:
  ZWDECODE F:\22\lacl.asp d:\ulacl.asp
  執行完畢,在D盤上就會生成一個ulacl.asp文件,打開該文件,你就能看到源代碼了!

(完)

發佈了35 篇原創文章 · 獲贊 6 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章