网站安全之ASP程序加密解密方法全面解析.docx
- 文档编号:6236448
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:12
- 大小:21.09KB
网站安全之ASP程序加密解密方法全面解析.docx
《网站安全之ASP程序加密解密方法全面解析.docx》由会员分享,可在线阅读,更多相关《网站安全之ASP程序加密解密方法全面解析.docx(12页珍藏版)》请在冰豆网上搜索。
网站安全之ASP程序加密解密方法全面解析
网站安全之ASP程序加密解密方法全面解析
如今,用ASP技术构建的网站随处可见。
由于ASP脚本是在服务器上解释执行的(无法编译),因此你辛苦开发出来的ASP代码,很容易被人拷去任意修改,如何保护ASP源代码呢?
这是每个ASP站长都会遇到的难题,网上求解这类问题的帖子非常多,下面我们就来谈谈ASP程序的加密方法。
一、如何加密ASP程序?
目前对ASP程序的加密方法主要有三种:
脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法。
1、使用微软的MSScriptEncode进行加密
微软提供了脚本编码器MSScriptEncode(下载地址Explorer5.0以上版本才能正常浏览。
用SRCENC加密之后,文件中被加密过的部分将变成只读类型,假如你修改了加密部分(哪怕只改动一个字),就会导致整个文件不能使用。
对于VBScript,加密后在源文件的第一行会显示:
(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" lbid=gqx><%=gqx%>" 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=" lbid="&request("lbid")&">" 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") %> <%=diaoyong.html_combo("gq")%> 你看,现在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=" hu=base64Encode(inp)'调用函数base64Encode进行加密,得到密文hu Response.Write(hu)'显示密文 PUBLICSUBinitCodecs()'初始化函数initCodecs newline=" "&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 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 (5)在网页中调用组件 以后在ASP文件中,通过调用该组件完成原来的功能。 在网页中调用你制作的组件,方法如下: 以下是引用片段: <%@language="vbscript"%> <% setdiaoyong=server.createobject("lacl_disp.disp") %> <%=diaoyong.html_combo("gq")%> 你看,现在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=" hu=base64Encode(inp)'调用函数base64Encode进行加密,得到密文hu Response.Write(hu)'显示密文 PUBLICSUBinitCodecs()'初始化函数initCodecs newline=" "&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 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 realL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网站 安全 ASP 程序 加密 解密 方法 全面 解析
![提示](https://static.bdocx.com/images/bang_tan.gif)