您当前的位置: 首页 > 网站编程 > ASP教程 > ASP程序加密/解密方法大揭密

ASP程序加密/解密方法大揭密

作者:guanchaofeng 来源:不详 发布时间: 2009-10-18 19:18 点击:
如今,用ASP技术构建的网站随处可见。由于ASP脚本是在服务器上解释执行的(无法编译),因此你辛苦开发出来的ASP代码,很容易被人拷去任意修改,如何保护ASP源代码呢?这是每个ASP站长都会遇到的难题,网上求解这类问题的帖子非常多,下面我们就来谈谈ASP程序的

ASP程序加密/解密方法大揭密

  如今,用ASP技术构建的网站随处可见。由于ASP脚本是在服务器上解释执行的(无法编译),因此你辛苦开发出来的ASP代码,很容易被人拷去任意修改,如何保护ASP源代码呢?这是每个ASP站长都会遇到的难题,网上求解这类问题的帖子非常多,下面我们就来谈谈ASP程序的加密方法。
  
  一、如何加密ASP程序?
  
  目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法。
  
  1、使用微软的MSScriptEncode进行加密
  
  微软提供了脚本编码器MSScriptEncode(下载地址http://www.itgene.cn/itgene/download/download.aspID=232),可以对ASP程序进行加密。这是一个简单的命令行工具,其执行文件是SRCENC.EXE,需要在DOS下运行。它只加密页面中嵌入的脚本代码,把网页中之间的ASP代码转换成不可读的乱码,其他部分则保持原样不变。加密后的程序,必须使用InternetExplorer5.0以上版本才能正常浏览。
  
  用SRCENC加密之后,文件中被加密过的部分将变成只读类型,假如你修改了加密部分(哪怕只改动一个字),就会导致整个文件不能使用。对于VBScript,加密后在源文件的第一行会显示:<SCRIPTLANGUAGE="VBScript.Encode">;而JScript(或JavaScript)则会显示:<SCRIPTLANGUAGE="JScript.Encode">
  
  (1)加密方法
  
  单击“开始”/程序/附件/命令提示符,在MS-DOS命令行中输入以下命令,即可对某个asp文件加密:
  
  SRCENC[switches]<要加密asp文件名><加密后的文件名>
  
  其中[switches]项目可以选以下5个参数
  
  [switches]含义举例
  
  /s可选。命令中带了该参数,加密过程中屏幕上就不会有输出。screnc/slacl.sctulacl.sct
  
  对当前目录中的脚本小程序lacl.sct加密,加密过程中屏幕不显示任何信息
  
  /f可选。指定输出文件是否覆盖同名输入文件。忽略,将不执行覆盖。screnc/flacl.asp
  
  对文件lacl.asp加密,并用编码后的同名文件覆盖原文件
  
  /xl可选。是否在.asp文件的顶部添加@Language指令。忽略,将添加。
  
  /ldefLanguage可选。指定ScriptEncoder加密中选择的缺省脚本语言。文件中不包含这种脚本语言特性的脚本将被ScriptEncoder忽略。
  
  对于HTML文件,JScript为内置缺省脚本语言;对于ASP文件,VBScript为缺省脚本语言;对于扩展名为.vbs或.js的文件,ScriptEncoder也有自适应能力。screnc/lvbscriptlacl.htmulacl.htm
  
  对文件lacl.htm加密,并生成输出文件ulacl.htm,确保没有指定语言属性的脚本块使用VBScript
  
  /edefExtension可选。指定待加密文件的文件扩展名。缺省状态下,ScriptEncoder能识别asa,asp,cdx,htm,html,js,sct和vbs文件。screnc/easp11\*.*f:\labxw-jm
  
  对11目录中的所有.ASP文件进行加密,并把编码后的输出文件放在f:\labxw-jm目录中
  
  (2)操作举例
  
  例如要加密当前目录中的lacl.asp文件,生成加密文件ulacl.asp,则在DOS下输入命令:
  
  screnclacl.aspulacl.asp
  
  对当前目录中的所有.ASP文件进行加密,并把编码后的输出文件放在f:\labxw中,则使用命令:
  
  screnc*.aspf:\labxw
  
  2、使用组件加密asp
  
  以上被screnc加密过的程序,是可以解密的(解密方法下文有介绍),如果你想彻底保护自己的asp代码,可以通过开发activexdll组件的方法进行保护。
  
  Dll文件是被编译过的机器代码,如果没有源项目文件,是不可能被反编译的,所以组件加密这种方法最安全,也不可能被破解。下面我们来举例说明操作过程,例如你要保护以下asp代码:
  
  setrs=server.createobject("adodb.recordset")
  
  sql="select*fromgqwherexs=1orderbydateasc"
  
  rs.opensql,conn,1,1
  
  ifrs.eofandrs.bofthen
  
  response.write"<AHREF=new0.asp?lbid=gqx><%=gqx%></A>"
  
  else
  
  Response.Write""
  
  endif
  
  setrs=nothing
  
  conn.close
  
  setconn=nothing
  
  可以把它们改写成VB组件,然后在ASP文件中调用组件即可。操作步骤如下:
  
  (1)新建一个vb6的activexdll项目
  
  在属性窗口中,命名你的库模块和项目文件(例如项目名lacl,模块名disp),以后在asp文件中,调用的对象名将为lacl_disp
  
  选择vb6中的项目菜单中的references,选中microsoftactivexdataobjects2.0library
  
  (2)编写VB组件
  
  接下来把<欲保护的asp代码>改写成VB组件,代码如下:
  
  publicfunctionhtml_combo(disp_tableasstring)asstring
  
  dimoutstringasstring
  
  dimconnasadodb.connection
  
  dimrstasadodb.recordset
  
  dimsqlstringasstring
  
  setconn=createobject("adodb.connection")
  
  setrst=createobject("adodb.recordset")
  
  sqlstring="select*from"&disp_table&"wherexs=1orderbydateasc"
  
  '以上是在VB中打开数据库操作,数据库中的表名、字段名,你可以根据自己的需要修改
  
  conn.open"dsn=sumnet"
  
  rst.opensqlstring,conn,3,3
  
  ifrst.eofandrst.bofthen
  
  outstring="还没有这类单位信息"
  
  else
  
  rst.movefirst
  
  outstring="<AHREF=new0.asp?lbid="&request("lbid")&"></A>"
  
  endif
  
  html_combo=outstring
  
  rst.close
  
  conn.close
  
  endfunction
  
  写好以上VB代码后,保存项目并开始编译。
  
  (3)生成安装文件
  
  打开visualstudio6中附带的packagedeploymentwizard程序,选择刚才建立的activex项目文件lacl;选择package,选择要打包的脚本或使用默认脚本,选择标准安装,为生成的安装文件选择一个存放目录,选择singlecab.其他均默认;然后单击下一步,安装文件就自动生成了!
  
  (4)在IIS服务器上安装组件
  
  在IIS服务器上运行这个安装文件,把组件安装到服务器上。
  
  (5)在网页中调用组件
  
  以后在ASP文件中,通过调用该组件完成原来的功能。在网页中调用你制作的组件,方法如下:
  
  <%@language="vbscript"%>
  
  <%
  
  setdiaoyong=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代码》对应的密文!
  
  OPTIONEXPLICIT
  
  constBASE_64_MAP_INIT="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
  
  dimnewline
  
  dimBase64EncMap(63)
  
  dimBase64DecMap(127)
  
  diminp,hu,encode
  
  callinitCodecs'初始化
  
  inp="<WORD处理后的asp代码>"'将要保护的asp代码用WORD处理,然后填在此处
  
  hu=base64Encode(inp)'调用函数base64Encode进行加密,得到密文hu
  
  Response.Write(hu)'显示密文
  
  PUBLICSUBinitCodecs()'初始化函数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
  
  foridx=0tomax-1
  
  Base64DecMap(ASC(Base64EncMap(idx)))=idx
  
  next
  
  ENDSUB
  
  PUBLICFUNCTIONbase64Encode(plain)'加密函数base64Encode
  
  iflen(plain)=0then
  
  base64Encode=""
  
  exitfunction
  
  endif
  
  dimret,ndx,by3,first,second,third
  
  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
  
  ifby3<len(plain)then
  
  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&Base64EncMap((first*16)AND48)
  
  ret=ret'&"="
  
  endif
  
  ret=ret'&"="
  
  endif
  
  base64Encode=ret
  
  ENDFUNCTION
  
  (3)重新改写要保护的asp文件
  
  改写原来的asp文件,在文件中增加UnEncode和base64Decode函数,全部代码如下:
  
  DimHu,Hu2
  
  '拷贝“欲保护asp代码”的密文将之存放到Hu变量中
  
  Hu=”c2V0IHJzPXNlcnZlci5jcmVhdGVvYmplY3Qo12Fkb2RiLnJlY29yZHNldOMpICAgICDuc3FsPeNzZWxlY3QgKiBmcm9tIGdxICB3aGVyZSB4cz0xIG9yZGVyIGJ5IGRhdGUgYXNj1yAgICAgsnJzLm9wZW4gc3FsLGNvbm4sMSwxICAgICDuaWYgcnMuZW9mIGFuZCBycy5ib2YgdGhlbiDucmVzcG9uc2Uud3JpdGUTvSD7INAg5iAgILUgvyAFILITsmVsc2UgsiAgICAgUmVzcG9uc2UuV3JpdGUg1zxBIEhSRUY9bmV3MC5hc3A/bGJpZD0TJnJlcXVlc3Qo12xiaWQTKSAmIOM+PC9BPuPuZW5kIGlmICAgIL5zZXQgcnM9bm90aGluZyAgICAgICAgsmNvbm4uY2xvc2UgICAgICDuc2V0IGNvbm49bm90aGluZyAgIL4”
  
  Hu2=base64Decode(hu)'还原要保护的ASP代码
  
  execute(UnEncode(Hu2))'还原单引号、回车换行,并执行原代码
  
  ’解密函数base64Decode
  
  FUNCTIONbase64Decode(scrambled)
  
  iflen(scrambled)=0then
  
  base64Decode=""
  
  exitfunction
  
  endif
  
  dimrealLen
  
  realLen=len(scrambled)
  
  dowhilemid(scrambled,realLen,1)="="
  
  realLen=realLen-1
  
  loop
  
  dimret,ndx,by4,first,second,third,fourth
  
  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
  
  ifndx<realLenthen
  
  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
  
  endif
  
  base64Decode=ret
  
  ENDFUNCTION
  
  '还原单引号、回车换行函数UnEncode
  
  functionUnEncode(cc)
  
  fori=1tolen(cc)
  
  ifmid(cc,i,1)<>"水"then
  
  ifmid(cc,i,1)="加"then
  
  temp=""""&temp
  
  else
  
  temp=Mid(cc,i,1)+temp
  
  endif
  
  else
  
  temp=newline&temp
  
  endif
  
  next
  
  UnEncode=temp
  
  endfunction
  
  将以上代码以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)可以对MSScriptEncode加密的ASP文件进行解密,还原出源代码。
  
  (1)解密方法
  
  单击“开始”/程序/附件/命令提示符,在MS-DOS命令行中输入以下命令,即可恢复原代码:
  
  ZWDECODE<已加密asp文件名>
  
  其中<已加密asp文件名>必需输入,该文件名可带目录路径;也必需输入,这是要生成的输出文件名,也可以带路径信息。
  
  (2)举例
  
  例如F:\22\lacl.asp曾被screnc加密处理过,现在要恢复其中的源代码,你可以在MS-DOS中输入以下命令:
  
  ZWDECODEF:\22\lacl.aspd:\ulacl.asp
  
  执行完毕,在D盘上就会生成一个ulacl.asp文件,打开该文件,你就能看到源代码了!

分享到:
本文"ASP程序加密/解密方法大揭密"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4