s7edge曲面壁纸:ASP代码加密函数

来源:百度文库 编辑:偶看新闻 时间:2024/04/30 00:04:19
function UnEncode(temp)
but=1
for i =1 to len(temp)
if mid(temp,i,1)<>"汤" then
pk=asc(mid(temp,i,1))-but
if pk>126 then
pk=pk-95
elseif pk<32 then
pk=pk+95
end if
a=a&chr(pk)
else
a=a&vbcrlf
end if
next
UnEncode=a
end function
function Encode(temp)
but=1
cc=replace(temp,vbcrlf,"汤")
for i= 1 to len(cc)
if mid(cc,i,1)<>"汤" then
pk=asc(mid(cc,i,1))+but
if pk>126 then
pk=pk-95
elseif pk<32 then
pk=pk+95
end if
a=a&chr(pk)
else
a=a&"汤"
end if
next
’a=replace(a,"""","""""")
Encode=a
end function  ***************************************************************************ASP代码加密解密三大方法【转帖】2010-06-21 14:24ASP代码加密解密三大方法
asp技法2010-04-09 13:46:38阅读151
目前对ASP程序的加密方法首要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法…
如今,用ASP技能构建的网站随处可见。由于ASP脚本是在服务器上诠释执行的(无法编译),因此你辛苦开发出来的ASP代码,很容易被人拷去任意修改,如何保护ASP源代码呢?这是每1个ASP站长城市遇到的困难的问题,网上求解这类问题的帖子很是多,下面我们就来谈谈ASP程序的加密方法。
一、如何加密ASP程序?
目前对ASP程序的加密方法首要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法。
1、施用微软的MS Script Encode进行加密
微软提供了脚本编码器MS Script Encode,可以对ASP程序进行加密。这是1个简单的命令行工具,其执行文件是SRCENC.EXE,需要在DOS下运行。它只加密页面中嵌入的脚本代码,把网页中之间的ASP代码转换成不可读的乱码,其他部分则保持原样不变。加密后的程序,必需施用Internet Explorer 5.0以上版本才能没事了浏览。
用SRCENC加密之后,文件中被加密过的部分将变成只读类型,假如你修改了加密部分(哪怕只改动1个字),就会引起全般文件不能施用。对VBScript,加密后在源文件的第一行会预示:SCRIPT LANGUAGE="VBScript.Encode";而JScript(或JavaScript)则会预示:SCRIPT LANGUAGE="JScript.Encode"
(1)加密方法
裸机"开始"/程序/附件/命令提醒符,在MS-DOS命令行中输入以下命令,即可对某个asp文件加密:
SRCENC[switches]要加密asp文件名加密后的文件名
其中[switches]项目可以选以下五个参数
[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=new0.asp?lbid=gqx%=gqx%/A"else Response.Write""end if set rs=not你好ng conn.close set conn=not你好ng
可以把它们改写成VB组件,然后在ASP文件中挪用组件即可。操作步调如下:
(1)新建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=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,选择要打包的脚本或施用默许脚本,选择标准安装,为天生的安装文件选择1个存放目次,选择single cab.其他均默许;然后裸机下一步,安装文件就不用人力天生了!
⑷在IIS服务器上安装组件
在IIS服务器上运行这个安装文件,把组件安装到服务器上。
⑸在网页中挪用组件
以后在ASP文件中,经由过程挪用该组件完成原来的功效。在网页中挪用你制作的组件,方法如下:
以下是援用片段:%@language="vbscript"%%set diaoyong=server.createobject("lacl_disp.disp")%html body%=diaoyong.html_combo("gq")%br/body/html
你看,现在Asp文件中的内部实质意义只是组件的挪用(与以前完全不同),别人即使得到该文件,也无法编辑修改源代码,因为代码都被封装在VB组件中了,对组件中的代码,外人是无法看到、也不能反编译的!
三、本身编写加密程序
组件加密方法虽然不可破解,但是要求你熟悉VB编程,需要把ASP代码改写成VB组件,工作量很大,以是建议大家本身编程来保护asp代码,其基本思路是:写1个加密函数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中输入本地运行该文件;荧幕上会预示一大段乱码(例如c2V0IHJzPXNlcnZlci5jcmVhd.),这就是《要保护的asp代码》对应的密文!
以下是援用片段:
OPTION EXPLICIT const BASE_64_MAP_INIT="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefg你好jklmnopqrstuvwxyz 123456 123456 +/"
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,t你好rd by3=(len(plain)\3)*3 ndx=1 do w你好le ndx=by3 first=asc(mid(plain,ndx+0,1))
second=asc(mid(plain,ndx+1,1))
t你好rd=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)+((t你好rd\64)AND 3))
ret=ret&Base64EncMap(t你好rd 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="c2V0IHJzPXNlcnZlci5jcmVhdGVvYmplY3Qo12Fkb2RiLnJlY29yZHNldOMpICAgICDuc3FsPeNzZWxlY3QgKiBmcm9tIGdxICB3aGVyZSB4cz0xIG9yZGVyIGJ5IGRhdGUgYXNj1yAgICAgsnJzLm9wZW4gc3FsLGNvbm4sMSwxICAgICDuaWYgcnMuZW9mI GFuZCBycy5ib2YgdGhlbiDucmVzcG9uc2Uud3JpdGUTvSD7INAg5iAgILUgvyAFILITsmVsc2UgsiAgICAgUmVzcG9uc2UuV3JpdGUg1zxBIEhSRUY9bmV3MC5hc3A/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 w你好le mid(scrambled,realLen,1)="="
realLen=realLen-1 loop dim ret,ndx,by4,first,second,t你好rd,fourth ret=""
by4=(realLen\4)*4 ndx=1 do w你好le ndx=by4 first=Base64DecMap(asc(mid(scrambled,ndx+0,1)))
second=Base64DecMap(asc(mid(scrambled,ndx+1,1)))
t你好rd=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)+((t你好rd\4)AND 15))
ret=ret&chr(((t你好rd*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 t你好rd=Base64DecMap(asc(mid(scrambled,ndx+2,1)))
ret=ret&chr(((second*16)AND 255)+((t你好rd\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名存盘。
⑷用SRCENC加密test2.asp
用SRCENC加密test2.asp,然后把它公布到服务器上,如许别人即使得到该文件、破解了SRCENC加密,也无法看到原代码,因为原代码在test2.asp中是密文(Hu="c2V0IHJzPXNlcnZlc.),以是ASP代码就被保护起来了!
二、加密过的asp程序如何解密?
如何对加密过的asp程序解密呢?首先我们要告诉大家,用组件法加密的asp程序是无法解密的,而screnc加密过的程序则可以解密,方法是:施用解密软件(ZWDECODE.EXE)。
ZWDECODE.EXE(下载地址可以对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盘上就会天生1个ulacl.asp文件,打开该文件,你就能看到源代码了!  ______________________________________________________________________________________________加密函数base64Encode<%
const BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
dim newline
dim Base64EncMap(63)
dim Base64DecMap(127)
'初始化函数
PUBLIC SUB initCodecs()
' 初始化变量
newline = "

" & 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
'Base64加密函数
PUBLIC FUNCTION base64Encode(plain)
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
'Base64解密函数
PUBLIC 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
call initCodecs
abc="1"
cba="MQ"
'response.write(base64Decode(cba))
response.write(base64Encode(abc))
%>