数据库

asp文件的加密解密

2013-06-11

对ASP脚本源代码进行加密
-----------------------
目前,ASP(Acive Server Pages)技术已风靡全球,在Internet上几乎处处都能看到它的身影。它给开发商提供了基于脚本的直观、快速、高效的应用开发手段,极大地提高了开发的效果。应用这种技术,不需要进行复杂的编程,就可以开发出专业的动态Web网站。
  凡事有利必有弊,由于由于ASP脚本是采用明文(plain text)方式来编写出来的,所以开发人员辛辛苦苦开发出来的ASP应用程序,一旦发布到运行环境中去或交付用户使用后,就很难保证这些“源代码”不会被流传出去。我们如何能保护我们开发出的ASP源代码呢?

  在这里我们采用微软提供的一个加密脚本的程序:SCRENC.EXE,这个程序可以在笔者网站(http://www.zhengwei.net)上下载。这是一个运行在DOS PROMAPT的命令工具,它使脚本设计者可以对最终的脚本进行编码,从而使 Web 主机和 Web 客户不能查看或修改它们的源代码。不过有一点需要注意的是加密后的程序要求用户的游览器必须使用Internet Explorer 5.0以上的版本。加完密后的脚本变成类似于如下的内容:

  

  脚本加密程序只对脚本代码进行加密,文件的其他内容不动且以普通文本形式显示。要使用脚本加密程序,以通常方法对文本进行开发和调试,然后使用该实用程序对最终的脚本进行加密。脚本加密程序在源代码中使用标记来标识加密开始的位置。

  对于 Visual Basic Scripting Edition (VBScript),如下示例显示了如何使用编码标记来显示普通文本的版权信息:

  

  在 JScript 中,加密标记如下:

  

  当脚本加密程序被调用时,在开始标记前,脚本块内的内容保持不变,而其他内容被加密。因此,如果开始标记被省略,则脚本编码块内的所有内容均被加密,但如果开始标记在脚本加密块的最后,则不对任何内容进行加密。

  在编码发生后。您应该知道 标记或标记内包含有效的 HTML 和内嵌脚本块。使用该格式的应用程序包括 Microsoft? Internet Information Services (IIS)。识别文件扩展名有 .asp、.asa 和 .cdx。

   HTML。该格式由一个包含有效的 HTML 和内嵌脚本块的文本文件组成。使用该脚本格式编写的应用程序包括 Microsoft FrontPage?, Microsoft? Visual InterDev? 和所有虚拟的 Web 设计器及浏览器。识别文件扩展名有 .htm 和 .html。

   普通文本。该格式由只包含脚本而无两端标记的文本文件组成。使用该脚本格式编写的应用程序包括 Windows? Scripting Host (WSH) 和 Microsoft? Outlook?。识别文件扩展名有 .js 和 .vbs,经加密后,分别变为 .jse 和 .vbe。

   脚本小程序。该格式由一个在标记中包含有效脚本小程序的文本文件组成。识别文件扩展名有 .sct 和 .wsh。

  示例

   如下是使用脚本加密程序的一个例子以及对其结果的简单解释:

   对输入文件 test.html 进行加密,生成输出文件 encode.html,使用:

    screnc test.html encode.html

   对输入文件 test.htm 进行加密,并用编码后的输出文件覆盖输入文件,使用:

    screnc /f test.htm

   对当前目录中的所有 .ASP 文件进行加密,并把编码后的输出文件放在c:\temp中,使用:

    screnc ×.asp c:\temp

   对当前目录中的所有 .ASP 文件进行加密,并把编码后的输出文件放在c:\temp中,使用:

    screnc /e asp ×.× c:\temp

   对输入文件 test.htm 进行加密,并生成输出文件 encode.htm,确保没有指定语言属性的脚本块使用 VBScript,使用:

    screnc /l vbscript test.htm encode.htm

   对当前目录中的所有脚本小程序文件进行加密,并不经信息显示就用编码后的文件覆盖这些文件,使用:
    
    screnc /s /f ×.sct

  要点:经过编码后,如果您改动加密后的文本,哪怕只改动一个字。脚本的完整性就会丢失,从而不能再使用。

============================
对经MS Script Encode加密的ASP进行解密
------------------------------
  微软的脚本编码器( SCRENC.EXE )是微软提供的可以对ASP脚本源码进行编码加密的一个工具。应用开发商通过使用这个工具,达到 Web 主机和 Web 客户不能查看或修改它们的源代码。有关SCRENC.EXE的详细内容请参看笔者的文章《对ASP脚本源代码进行加密》。在某种情况下如果我们忘了做源码备份,就无法再进行加工、修改了。怎么能把加过密的代码再恢复回来呢?
  在这里,我们提供一个解密软件(ZWDECODE.EXE 需要这个软件者请查阅http://www.zhengwei.net),使用这个工具可以对经过MS Script Encode加密的ASP文件进行解密,把源代码还原。

  例如可以把类似于如下的代码:

  <SCRIPT language=JScript.Encode>
   #@~^QwIAAA==@#@&0; mDkW P7nDb0zZKD.n1YAMGhk+Dvb`@#@&P,kW`UC7kLlDGDcl22gl:n~{'P3~dYMc×iNz&R @×^#~@
  </SCRIPT>

  还原成:

  <SCRIPT language=JScript>
   function verifyCorrectBrowser(){
    if(navigator.appName == "Microsoft Internet Explorer")
     if (navigator.appVersion.indexOf ("5.") >= 0)
      return(true);
     else
      return(false);
    }
   function getAppropriatePage(){
    var str1 = "Had this been an actual Web site, a page compatible with ";
    var str2 = "browsers other than ";
    var str3 = "Microsoft Internet Explorer 5.0 ";
    var str4 = "would have been loaded.";
    if (verifyCorrectBrowser())
     document.write(str1 + str3 + str4);
    else
     document.write(str1 + str2 + str3 + str4);
   }
  </SCRIPT>

  ZWDECODE.EXE是一个运行在DOS PROMAPT的命令工具,以下是该程序的语法解释:

  描述

   对经过MS Script Encode加密的ASP文件进行解密,使其恢复成源代码。

  语法

   ZWDECODE inputfile outputfile

   inputfile 必需的。要被解密的文件名称,包括相对于当前目录的任何需要的路径信息。

   outputfile 必需的。要生成的输出文件的名称,包括相对于当前目录的任何需要的路径信息。

  注意:

   本程序只能用于恢复自己丢失源代码的程序,不可用于其它用途。为了安全起见,在解密前要做好备份。


我也来发言!各位网友慢慢看!

用Script Encoder加密你的ASP页面

一直以来,ASP技术受到了越来越多朋友的喜爱,使用ASP从事WEB开发的人也
越来越多。ASP一个非常明显的特征是页面在服务器端经过处理之后发送到浏览器
中的内容为标准的HTML格式,这样有效的保护了页面程序的原代码不被客户端轻易
获取。但是另一个普遍存在的问题是:
由于ASP页面是纯文本的形式存放,在服务器端可以轻易看到全部编程逻辑。这样
给ASP应用商业化带来了一定的困难。解决的方法一般是使用组件技术将编程逻辑
封装入DLL之中,但问题是:
1、如果每段代码都组件化似乎工作量太大了,也没有必要。
2、还有很多网友根本就不会编写组件。
在这样的背景下,微软推出了Script Encoder1.0。一个命令行的脚本加密工具。
Script Encoder的特点是:
它只加密页面中嵌入的脚本代码,其他部分,如HTML的TAG仍然保持原样不变。
处理后的文件中被加密过的部分为只读内容,对加密部分的任何修改都将导致整个
加密后的文件不能使用。Script Encoder加密过的ASP文件还将使Script Debugger
之类的脚本调试工具失效。
Script Encoder是可以对Client Side Script加密,也可以对Server Side
Script加密。

二、使用简介
Script Encoder是个命令行工具,执行文件为SCRENC.EXE。它的操作非常简单:

SCRENC [/s] [/f] [/xl] [/l defLanguage ] [/e defExtension] inputfile outputfile

/s 可选。让Script Encoder“安静”的工作,即执行过程
没有屏幕输出。(

/f 可选。指定输出文件是否覆盖同名输入文件。忽略,将
不执行覆盖。
/xl 可选。是否在.asp文件的顶部添加@Language指令。忽略,
将添加。
/l defLanguage 可选。指定Script Encoder加密中选择的缺省脚本语言。
文件中不包含这种脚本语言特性的脚本将被Script Encoder
忽略。对于HTML和脚本文件来说,JScript为内置缺省脚
本语言。对于ASP文件,VBScript为缺省脚本语言。同时
对于扩展名为.vbs或.js的文件Script Encoder有自适应
能力。
/e defExtension 可选。指定待加密文件的文件扩展名。缺省状态下,Script
Encoder能识别asa,asp,cdx,htm,html,js,sct和vbs文件。
 

三、常见问题和注意事项

1、在JOY ASP中几次看到有网友使用Script Encoder时出现如下错误:

"Script Encoder object <"Scripting.Encoder"> not found "

其原因:是使用Script Encoder需要Script Engine 5.0或以上脚本引擎的支持。
解决的办法有两个,升级浏览器到IE5或安装Script Engine 5.0。

2、在加密Global.asa时,加密完成后访问出现:
Active Server Pages 错误 'ASP 0137'

无效通用脚本

global.asa, 行1

Script 块必须是允许的 Global.asa 过程之一。< %...% > 中的 Script 原语不
允许在 global.asa 文件中。允许的过程只能是 Application_OnStart ,
Application_OnEnd , Session_OnStart , 或 Session_OnEnd。

加密后的global.asa文件为:
<%@ LANGUAGE = VBScript.Encode %><SCRIPT LANGUAGE=VBScript.Encode
RUNAT=Server>#@~^nAIAAA==@#@&?i~Pzww^k1CYbWU{}xjOmDY@#@&@#@&BP</SCRIPT>

<SCRIPT LANGUAGE=VBScript.Encode RUNAT=Server>#@~^OgEAAA==@#@&?i~Pzww^k
1CYbWU{}x3U9@#@&@#@&P,P? O~sbV r8Ln^DPxPUnD7+. ;D+CO r==^#~@</SCRIPT>

<SCRIPT LANGUAGE=VBScript.Encode RUNAT=Server>#@~^DQMAAA==@#@&?i~PU+/kk
KU{}xjYmDO@#@&@#@&E~NnJ×Px~rCl1V+MJ@#@&3Hf,?`A@#@&ftEAAA==^#~@</SCRIPT>

<SCRIPT LANGUAGE=VBScript.Encode RUNAT=Server>#@~^WwIAAA==@#@&?i~PU+/kk
KU{}x3x9@#@&(6P? d/bWxvEj{!/ DmmG[ JbP@!@×PrCC^0+DE~:tnx@#@&</SCRIPT>

出现这个错误的原因是:在加密完的global.asa文件顶部被写入了
<%@ LANGUAGE = VBScript.Encode %>
解决的办法是手动删去这一行或者使用/xl参数加密即可。

3、Script Encoder对Remote Scripting无效。

四、总结
根据我个人的体会,Script Encoder还是比较好用的。使用简单,加密后的脚本运
行也比较稳定。不过这个东西仅仅是阻止了你随意的查看脚本原代码,估计相应的解密
工具不久就会出来的。所以建议可能的话,大家还是花点时间学习一下组件技术,我觉
得可以将这两个结合起来运用的。正如微软的文档所说:Setting an engine to deal
with encoded script is only one side of the equation. How do you encode your
script? There are two mechanisms to do this: a command-line script encoder
and a COM-based object model...


附:
Script Encoder 下载地址:
http://msdn.microsoft.com/scripting/vbscript/download/x86/sce10en.exe

Windows Script Engine 5.0
Windows 95, Windows 98 & Windows NT 4.0 - CHS 中文版下载地址:
http://www.microsoft.com/msdownload/vbscript/scripting.asp?msid=32186&plat=x86
&lang=Chinese/Simplified



Top

回复人: comezxn(天乐) ( ) 信誉:96 2001-06-08 13:58:00Z 得分:0


?
其实加密了也没有用,稍微有点经验的程序员都会反编译你的程序,甚至还有个免费程序叫什么scredo什么的,好用的不得了,全部反编译,看来第一种思路根本就不行,没有多大用处,一般的人看未加密的源码也看不懂,加了密的源码对象看源码的人也没有任何保障,所以你想来想去还是用组件,可是组件太麻烦,到头来加密还是实现不了,算了吧,就这样忘了吧,在苦也苦,再累也累,到头来花落花去,竹篮打水一场空!


Top

回复人: comezxn(天乐) ( ) 信誉:96 2001-06-08 14:04:00Z 得分:0


?
用组件加密asp

以前大家谈了很多有关打开数据库连接安全的问题,现在我再提出一种思路
使用activex dll来保护你的代码。(既可以不用为使用共享的加密软件而发愁,
更重要的是可以自己来顶制加密方法了,享受一下“一切尽在掌握之中”的感觉。
同时也为了让大家都自己动手来做出自己的组件来。)

activex dlls是被编译过的机器代码,如果没有源项目文件的话是不能够被编译的。
这个技术使得开发者有可能开发出公共的自动化程序,并且把它们作为shareware版本的程序发布
这个大家在chinaasp中销售的一些组件中就可以看到这个技术的运用。
如果你想保护你的asp中的一些代码的安全,例如你不想让别人看见你是使用什么连接到
数据库的,或者不想让别人看到你的某个比较重要的函数是怎么完成的,或者某个重要的
流程(cakk可以参阅),你就可以通过不断的开发你自己的组件,这可是个dll文件,就是别人得到了
这个dll文件,一时半会也根本不能够得到你要保护的重要信息。而且你自己开发的这些组件
给你的程序带来了源源不断的新功能。

下面就举一个很常用的,大家都很关心的有关如何保密打开数据库的过程的例子。
例子很简单,就是在一个下拉框中显示数据库中某个字段的内容。
整个过程如下:
1。新建一个vb6的activex dll项目
2。在属性窗口中,命名你的库模块和项目文件。例子中为keiths_lookup项目名和lookup模块名.
这写名字是你在asp中将引用到的dll函数名(在asp中的对象名将为keiths_lookup.lookup)。
3.将项目和库模块使用同样的名字存盘(当然了,后缀是不能够一样的哦)。
4。从vb6中的项目菜单中选择references .然后选中microsoft activex data objects 2.0 library, microsoft
activex data objects recordset 2.0 library.
文件的代码如下:
public function html_combo(comboname as string, lookup_field 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 [lookup_description],[lookup_key] from _
[lookup_table] where [lookup_field] = '" & lookup_field & "'"

'在这可输入你连接数据库的用户名和密码,现在就算客户端看见了asp源代码
'他也不可能知道你使用的是什么密码了,呵呵
conn.open "dsn=sumnet;uid=;pwd=.;"
rst.open sqlstring, conn, 3, 3

if not rst.eof then
rst.movefirst
outstring = "<Select name='" & comboname & "'>"
do while not rst.eof
outstring = outstring & "<option value='" & rst.fields("lookup_key") & "'>" & _
rst.fields("lookup_description") & "</option> "
rst.movenext
loop
end if

outstring = outstring & "</Select>"
html_combo = outstring

rst.close
conn.close
end function
代码结束,呵呵,基本上没什么技术难点把,现在保存你的项目并且开始编译工作。
1。打开visual studio 6中带的package deployment wizard程序。
2。选择你刚才建立的activex项目文件。
3。选择package
4。选择你要打包的脚本或使用默认脚本
5。选择标准安装
6。选择一个放置你安装文件的目录
7。选择single cab.
8。其他均默认,然后单击下一步
9。现在安装程序完成后,把它拿到你的iis服务器上安装把。

下面给出如何调用你自己做的这个组件的代码:
<%@ language="vbscript" %>
<%
set look = server.createobject("keiths_lookup.lookup")
%>
<html>
<body>
<%=look.html_combo("state","states")%>
<br>
<%=look.html_combo("position","positions")%>
<br>
<%=look.html_combo("age_group","age_groups")%>
</body>
</html>
你看,asp如此的简单,谁看见了源文件你都不用担心了,可以看到,
使用activex dll技术可以很好的保护你的重要的代码,你需要安全的部分,
但我可不希望以后大家都牢牢地看住自己的代码不愿意公开了,毕竟
国内的软件行业还远远落后,需要大家齐心协力才能够一起进步呀。