asp加密文件解密破解方法

ASP加密文件解密破解方法网上有很多好的程序,但为了商业用途,有一些ASP程序的文件是加密了的,如果他加密的方式不是很麻烦的话,那么是可以解密的。目前网上使用较多而且方便的加密就是脚本编码器(SRCENC.EXE)加密,这种加密方法破解比较容易,在文章的尾部有破解方法。本人尝试使用这种方法成功破解。

目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密组件加密自编程序加密,下面我们就来展开介绍这三种加密方法……

如今,用ASP技术构建的网站随处可见。由于ASP脚本是在服务器上解释执行的(无法编译),因此你辛苦开发出来的ASP代码,很容易被人拷去任意修改,如何保护ASP源代码呢?

这是每个ASP站长都会遇到的难题,网上求解这类问题的帖子非常多,下面我们就来谈谈ASP程序的加密方法。

一、如何加密ASP程序?

目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法。

1、使用微软的MS Script Encode进行加密

微软提供了脚本编码器MS Script Encode(sce10chs.exe下载地址点击下载sce10chs.exe),可以对ASP程序进行加密。这是一个简单的命令行工具,其执行文件是SRCENC.EXE,需要在DOS下运行。它只加密页面中嵌入的脚本代码,把网页中之间的ASP代码转换成不可读的乱码,其他部分则保持原样不变。加密后的程序,必须使用Internet Explorer 5.0以上版本才能正常浏览。

用SRCENC加密之后,文件中被加密过的部分将变成只读类型,假如你修改了加密部分(哪怕只改动一个字),就会导致整个文件不能使用。对于 VBScript,加密后在源文件的第一行会显示:<SCRIPT LANGUAGE="VBScript.Encode">;而JScript(或 JavaScript)则会显示:<SCRIPT LANGUAGE="JScript.Encode">

(1)加密方法

官方加密程序:从微软免费下载到sce10chs.exe 直接运行即可完成安装过程。安装完毕后,将生成screnc.exe文件,这是一个运行在DOS PROMAPT的命令工具。

单击“开始”/程序/附件/命令提示符,在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=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=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=”c2V0IHJzPXNlcnZlci5jcmVhdGVvYmplY3Qo12Fkb2RiLnJlY29yZHNldOMpICAg"

Hu=Hu+”ICDuc3FsPeNzZWxlY3QgKiBmcm9tIGdxICB3aGVyZSB4cz0xIG9yZGVyIGJ5IGRhdGUgYXNj1y"

Hu=Hu+”AgICAgsnJzLm9wZW4gc3FsLGNvbm4sMSwxICAgICDuaWYgcnMuZW9mIGFuZCBycy5ib2Y"

Hu=Hu+”gdGhlbiDucmVzcG9uc2Uud3JpdGUTvSD7INAg5iAgILUgvyAFILITsmVsc2UgsiAgICAgUmVzc"

Hu=Hu+”G9uc2UuV3JpdGUg1zxBIEhSRUY9bmV3MC5hc3A/bGJpZD0TJnJlcXVlc3Qo12xiaWQTKSAmI"

Hu=Hu+”OM+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(下载地址点击下载)可以对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文件,打开该文件,你就能看到源代码了!

 

 

 

评论

发表新评论

此内容将保密,不会被其他人看见。
点击刷新验证码
  • 可用的 UBB 标签:
  • 留言最长字数:1000。