请输入您要查询的百科知识:

 

词条 AspToDll风火轮
释义

AspToDll风火轮是一款编译型的ASP代码加密工具,拥有编译型加密不可被还原的特性,加密原理是将ASP代码转换成VB6工程,借助VB6编译后无法被反编译的重大特性,将ASP加密的可靠性推到前所未有的高度,是目前国内唯一的不可解密的ASP代码加密工具。自2004年发布第一版本以来(前身AspTransBuilder),到目前为止成功加密过国内外大小数万个ASP网站,深受ASP开发者的喜爱。

长期以来,AspToDll风火轮以封装DLL的加密方案为广大ASP开发者提供强有力的代码保护。众所周知,只有封装DLL的加密方式才是安全的加密方式,但是封装DLL的加密方式需要使用者具备一定的ASP基础,我们假定我们的客户自己掌握ASP技术,便于调试。不过,ASP代码本身的技术门槛很低,所以有大量的业余开发者以及一般电脑爱好者也开发ASP程序,也需要加密ASP,他们无法驾驭封装DLL形式的加密方案,只好退而求次,选择低端的非编译型ASP加密方案。

有鉴于此,我们在最新版AspToDll风火轮里面集成了两种常用的非编译型Asp代码加密方案,我们建议,业余爱好者以及一般电脑爱好者使用“临时文件执行”方式的加密方案,这种加密方案可以无错加密任意复杂的ASP程序,无需任何人工的修改量。而且,可以自定义加密解密算法,其对应的ASP代码解密组件完全公开源代码,业余开发人员可以从中学习非编译型ASP加密方法,打造出个性化的自定义的ASP代码加密解密工具。

使用AspToDll风火轮打造一款个性化的ASP代码加密工具

打开ASP文件,经常看到类似这样的代码,创建一个组件,然后传入一大堆没有意义的字符,如下:

<%

Dim obj

Set obj = Server.CreateObject("AspDeCode.DeCode")

obj.AddCode "PCUNCm9wdGlvbiBleHBsaWNpdA0KQ29uc3QgSkVUXzNYID0gNA0KaWYgIiImUmVxdWVzdC5Gb3JtKCJzZXNzaW9uaWQiKSYiIjw+"

obj.AddCode "IiImc2Vzc2lvbi5zZXNzaW9uaWQmIiIgdGhlbiBBbGVydCgi0KfR6cLrtO3O8yIpDQoNCkRpbSBkYnBhdGgsYm9vbElzOTcNCmRi"

obj.AddCode "PiINCglFbmQgSWYNCkVuZCBGdW5jdGlvbg0KDQpTdWIgQWxlcnQoTWVzc2FnZSkNCiU+DQo8c2NyaXB0IGxhbmd1YWdlPSdKYXZh"

obj.AddCode "U2NyaXB0JyB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPmFsZXJ0KCc8JT1NZXNzYWdlJT4nKTtoaXN0b3J5LmJhY2soKTs8L3Njcmlw"

obj.AddCode "dD48c2NyaXB0IGxhbmd1YWdlPSdKYXZhU2NyaXB0JyB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPndpbmRvdy5jbG9zZSgpOzwvc2Ny"

obj.AddCode "aXB0Pg0KPCUNCglyZXNwb25zZS5lbmQNCkVuZCBTdWINCiU+DQo="

obj.RunCode

Set obj = Nothing

%>

然ASP文件却可以正常执行,其实,这种ASP代码是被一种加密算法加密了,那么,为何被加密了却可以正确执行?这种加密都有一个共同的特征,需要临时解密,要在服务器注册一个对应的ASP代码解密组件,我们看到,代码的起始位置有一句创建组件的代码,该组件将密文解密成原始的ASP脚本,再将脚本传入产生的临时文件或者脚本引擎组件(Msscript.ocx)解释执行。其中,产生临时文件的方式可以达到完全兼容,无需任何人工修改量的效果。不论其ASP代码有多么复杂,都可以实现无错加密。那么,其具体的工作原理又是怎样的呢?

相信大多数ASP开发者都很想知道是怎样运行的,而另一种以封装DLL形式的加密方式没有秘密可言,使用AspToDll风火轮将其生成VB6代码,然后编译通过就可。但这种ASP代码解密组件的代码却是黑匣子,其中有什么玄妙之处?虽然,对于专业技术人员来说,这其实并不是什么秘密,不过,对于广大的ASP业余开发者或者一般电脑爱好者来说,却不是那么容易看出其端倪的,让AspToDll风火轮为大家解开其神秘的面纱。

打开AspToDll风火轮1.35版本,选择好你要加密的源文件目录,输出目录,再点击“编码加密”按钮,很快,目录下的所有ASP源文件已经被编码并生成到输出目录的ASPCODE子目录中,检查当中的每一个文件,发现都被加密成了如上的怪字符,我们只需要将输出目录的DLL子目录里面的AspDeCode.dll组件注册一下(运行RegDll.bat),再去访问AspCode目录里面的ASP文件,运行效果简直与加密之前如出一辙,不论你的代码如何复杂,都不影响运行效果。

那么,AspDeCode.dll里面又是具体如何工作的呢?相信广大业余开发者是最想知道的事情了,因此,AspToDll风火轮向大家直接提供了AspDeCode.dll的源代码,就在AspToDll风火轮安装之后的AspDeCode子目录,为打开源代码,我们需要安装VB6,打开之后,我们发现加密和解密以及运行的代码都非常简单,只有一个DeCode类,里面的加密解密算法就是几段标准的BASE64代码,在这里,我们只需要重点介绍当中的RunCode过程,我们分析一下这段代码:

Public Sub RunCode()

On Error Resume Next

Dim fso As New Scripting.FileSystemObject

Dim f As Scripting.TextStream

Dim strTemp As String

strTemp = "~" & Rnd & ".tmp"

Set f = fso.CreateTextFile(Server.MapPath(strTemp), True)

f.Write DecodeBase64String(strCode)

f.Close

Server.Transfer strTemp

DeleteFile Server.MapPath(strTemp)

End Sub

AspDeCode.dll就是通过执行这一段RunCode过程运行ASP的,首先是创建一个fso组件对象,然后生成一个随机数字命名的临时文件,将密文用BASE64解密,写入到临时文件中。最后,使用Server.Transfer方法转向到临时文件执行,然后删除临时文件,就这样完成任务了,这种现买现卖的临时文件障眼法是不是很神奇呢?

好了,既然ASP代码解密组件的代码向大家公开了,意味着可以随意修改AspDeCode.dll,个性化自己的ASP代码解密组件了,你可以增加一些授权的代码,还可以修改加密算法,在AspToDll风火轮里面的编码型加密标签,点击“自定义算法”选项,在左边的文本框中写入标准VBScript的加密算法,至于解密算法,你既可以在软件中写入解密算法,也可以直接修改AspDeCode.dll源代码实现。通过修改自定义的加密解密算法,

你已经可以打造出一款完全无错加密且又与众不同的ASP代码加密工具了。

AspToDll风火轮如何实现封装DLL方案的高度兼容性

ASP封装DLL的加密方案有别于一般的编码型ASP加密方案,优点是没有任何办法可以解开,缺点是对ASP代码的兼容性比较差。但是,为什么AspToDll风火轮能够在较少人工修改量的情况下成功封装很复杂的ASP代码,其中一个重要的功能就是“加入容错性对象”,这一功能其实在1.0版本已经提供,直到1.2版本稳定下来。只有专业版本和企业版本提供这一功能,试用版和标准版是没有的。下面介绍一下这个功能起到的作用。

在常用的ASP代码系统中,包含文件往往有着千丝万缕的关系,我们看一下以下3个页面:

page1源代码:

<!--#include file="page3.asp"-->

<%

x=1

sub a

response.write "a"

end sub

call c

%>

page2源代码:

<!--#include file="page3.asp"-->

<%

x=2

sub b

response.write "b"

end sub

call c

%>

page3源代码:

<%

dim x

sub c

if x=1 then

call a

elseif x=2 then

call b

end if

end sub

%>

在这里,page1和page2分别包含page3,也在页面内执行page3的某个过程,page3里面根据参数判断执行page1或者page2的某个过程,如果采用编码型的ASP加密方案,可以很轻松地处理掉,没有任何错误。但是使用AspToDll风火轮标准版封装这几个简单的页面的时候发现,3个页面都不能通过,提示的错误信息是“子程序或函数未定义”,其中page1,page2包含page3,所以3个页面对应的class里面都出现了page3里面的所有代码,其中也包含了sub c,我们看到3个class里面生成的sub c 代码都是一样的,如下:

Sub c()

On Error GoTo Err

If x = 1 Then

Call a

ElseIf x = 2 Then

Call b

End If

Exit Sub

Err:

If Err.Number = -13572468 Then Err.Raise -13572468

AspToDll_WriteLog "\\page1.asp, c: " & Err.Description

End Sub

当编译dll的时候,提示page1页面class中的“子程序或函数未定义”是因为,page1对应的class没有sub b的定义,却在代码中执行sub b,导致语法错误,提示page2页面class中的“子程序或函数未定义”是因为,page2对应的class中没有sub a的定义,却在代码中执行sub a,也导致语法错误,至于page3的错误就更加明显了,对应的class中都没有sub a和sub b的定义,当然也出现“子程序或函数未定义”的错误了。

实际上,这算不算是语法错误呢,在asp页面中,这不能叫做语法错误,因为asp页面运行正常,在业务逻辑中看到,page1不可能会触发执行sub b的条件,page2也不可能触发执行sub a的条件,只要没有触发到这个可能报错的条件,就不会产生语法错误,因为asp是解释执行的,没有编译过程,也无需检查语法了。

但是在vb里面却不行了,编译之前首先要检查语法错误,执行了没有定义的过程就算语法错误,所有页面中,只要有一个地方出现语法错误,dll就一定生成不了。这就是为什么很多asp初学者对封装dll的加密方式望而生畏的原因。在很多asp代码中都有类似的情况,像这种“子程序或函数未定义”的问题,一般的asp封装dll工具都没有处理好,这就不难解释,为什么只有AspToDll风火轮能够很轻松很短时间内成功封装很复杂的asp代码系统,那么AspToDll风火轮又是如何处理的呢?点选了“加入容错性对象”之后,我们看看生成的3个sub c代码是怎样的:

page1的sub c:

Sub c()

On Error GoTo Err

If x = 1 Then

Call a

ElseIf x = 2 Then

Call AspToDll_Object.b

End If

Exit Sub

Err:

If Err.Number = -13572468 Then Err.Raise -13572468

AspToDll_WriteLog "\\page1.asp, c: " & Err.Description

End Sub

page2的sub c:

Sub c()

On Error GoTo Err

If x = 1 Then

Call AspToDll_Object.a

ElseIf x = 2 Then

Call b

End If

Exit Sub

Err:

If Err.Number = -13572468 Then Err.Raise -13572468

AspToDll_WriteLog "\\page2.asp, c: " & Err.Description

End Sub

page3的sub c:

Sub c()

On Error GoTo Err

If x = 1 Then

Call AspToDll_Object.a

ElseIf x = 2 Then

Call AspToDll_Object.b

End If

Exit Sub

Err:

If Err.Number = -13572468 Then Err.Raise -13572468

AspToDll_WriteLog "\\page3.asp, c: " & Err.Description

End Sub

我们看到,在可能出现“子程序或函数未定义”这种错误的地方,前面都出现了“AspToDll_Object.”这样的标识,而AspToDll_Object这个对象是一个无意义的对象,在每个class初始化的时候已经定义了,目的就是为了解决这样的“子程序或函数未定义”的问题,AspToDll风火轮在将asp代码转换成vb代码的时候已经自动识别当前页面对应的class执行的哪些过程或者调用的哪个变量没有定义的,就自动加上AspToDll_Object对象,只要加入了容错性对象,就可以确保在不改变业务逻辑的前提下顺利编译通过,而不会再出现“子程序或函数未定义”的问题。

一直以来,不少试用版用户向我抱怨,为什么你这么轻松就可以封装这么多开源代码的系统,而试用版就连一个稍微复杂一点的首页都编译不了,主要的原因就是这个“加入容错性对象”的功能。因为AspToDll风火轮的加密原理是转换成VB工程,所以我们无法在确保我们自己权益的前提下让试用版体验到这一功能,请大家能够理解。

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/2/6 12:03:44