|
|
ASP程序加密解密方法全面解析
& F/ q8 T+ K% [0 v6 x- G2007-08-18 16:41
: k2 F- s$ ]6 ^% V4 A 目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法…… 5 W" g. V' W/ F2 K+ ]1 K
; {+ M* g9 u' P" Q2 B
如今,用ASP技术构建的网站随处可见。由于ASP脚本是在服务器上解释执行的(无法编译),因此你辛苦开发出来的ASP代码,很容易被人拷去任意修改,如何保护ASP源代码呢?这是每个ASP站长都会遇到的难题,网上求解这类问题的帖子非常多,下面我们就来谈谈ASP程序的加密方法。2 |9 P* m- {/ u5 J5 I, t" }" H
* Y" ?1 m1 o p, b: V# Z9 A 一、如何加密ASP程序?- N' c Q+ h0 T0 {
! o$ I1 G" L! I 目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法。% o- K" @, t2 P, p8 i. \% H5 M8 M
% e, ?( q: g; }6 k 1、使用微软的MS Script Encode进行加密% t! @5 S o6 f% Q- \) W9 P
w* e/ E$ l, K3 p) U 微软提供了脚本编码器MS Script Encode(下载地址http://www.itgene.cn/itgene/download/download.aspID=232),可以对ASP程序进行加密。这是一个简单的命令行工具,其执行文件是SRCENC.EXE,需要在DOS下运行。它只加密页面中嵌入的脚本代码,把网页中之间的ASP代码转换成不可读的乱码,其他部分则保持原样不变。加密后的程序,必须使用Internet Explorer 5.0以上版本才能正常浏览。
/ }5 e: D" Z, V0 E8 }0 h' C- } I1 K }% f( D n
用SRCENC加密之后,文件中被加密过的部分将变成只读类型,假如你修改了加密部分(哪怕只改动一个字),就会导致整个文件不能使用。对于 VBScript,加密后在源文件的第一行会显示:<SCRIPT LANGUAGE="VBScript.Encode">;而JScript(或 JavaScript)则会显示:<SCRIPT LANGUAGE="JScript.Encode"># ^& p9 H5 f& j( R8 {
" `, v. o# T1 G- z$ }# s0 f
(1)加密方法6 p2 R/ J1 ~3 e5 o" f
2 v+ ~( i- r# Q- K8 d! M% ^8 j# q
单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可对某个asp文件加密:& E' g! O I. }/ o% a( F" M
' i4 t3 h# n8 {$ Y SRCENC [switches] <要加密asp文件名> <加密后的文件名># n: M# c* V( V" x8 b
4 F; b0 }" R; _9 k 其中[switches]项目可以选以下5个参数8 f8 g/ u/ d/ \( V
9 h* _( p/ }3 z! b: M [switches] 含义 举例4 }% f8 H' @7 \% q3 U
) @0 d+ J* A8 j, \6 v
/s 可选。命令中带了该参数,加密过程中屏幕上就不会有输出。 screnc /s lacl.sct ulacl.sct
/ K+ [9 e% I* h: B5 _+ B
2 {+ u6 y5 j% Y. ~( V3 p+ Z 对当前目录中的脚本小程序lacl.sct加密,加密过程中屏幕不显示任何信息
! q' C& W1 t( y* u& l: s( L' _, k& k: Z. C
/f 可选。指定输出文件是否覆盖同名输入文件。忽略,将不执行覆盖。 screnc /f lacl.asp
' Y2 L1 ^- _4 v0 R( h; b9 X/ \" O
1 Q( @' K- ^- ]# Z7 o2 l 对文件 lacl.asp加密,并用编码后的同名文件覆盖原文件
8 U" W9 `9 A0 i7 v) Y+ Q2 v6 P- T0 O( \; C0 g) S
/xl 可选。是否在.asp文件的顶部添加@Language指令。忽略,将添加。
% q6 s. M7 k; ^ i4 B1 a4 p' C
) M. t( t1 @' W* X/ l: X$ @( `! \/ g /l defLanguage 可选。指定Script Encoder加密中选择的缺省脚本语言。文件中不包含这种脚本语言特性的脚本将被Script Encoder 忽略。
" I& K9 J5 W9 U( q7 j7 ^- z
3 O' i+ } s0 F. f8 W7 u: | 对于HTML文件,JScript为内置缺省脚本语言;对于ASP文件,VBScript为缺省脚本语言;对于扩展名为.vbs或.js的文件,Script Encoder也有自适应能力。 screnc /l vbscript lacl.htm ulacl.htm
4 U- N+ w* Q( n0 n7 r5 s+ Q) o+ y7 q% K2 [; q
对文件 lacl.htm加密,并生成输出文件 ulacl.htm,确保没有指定语言属性的脚本块使用 VBScript$ E$ J/ f$ Q5 O4 r2 K
' y1 |, O& Z3 Y3 s& Y0 L
/e defExtension 可选。指定待加密文件的文件扩展名。缺省状态下,Script Encoder能识别asa,asp,cdx,htm,html,js,sct和vbs文件。 screnc /e asp 11\*.* f:\labxw-jm' _* s* D6 Z$ k4 B# z7 F
. T* w4 `5 J$ v 对11目录中的所有.ASP 文件进行加密,并把编码后的输出文件放在f:\labxw-jm目录中0 \8 ?, n; F* | q' T/ I
: p' O% M* S4 w/ A" s# F (2)操作举例
8 `6 g; N" A4 v/ h4 G- w3 @& X% p0 N
例如要加密当前目录中的lacl.asp文件,生成加密文件ulacl.asp,则在DOS下输入命令:
. }7 k4 {( R( w% K$ B! F" B0 `
: o9 D- Q9 \ _8 [7 t screnc lacl.asp ulacl.asp' v; G6 _- h+ ~: E( [4 @
. v4 {, F# l! r" { 对当前目录中的所有 .ASP 文件进行加密,并把编码后的输出文件放在f:\labxw中,则使用命令:- ^8 D3 C5 m4 U) D6 M. n
" {! b* ^+ r, d$ M# {; |2 ?7 g4 K/ y3 q screnc *.asp f:\labxw
2 L1 j/ M/ U0 U! \7 v, D" A& N, r
2、使用组件加密asp
6 [; t; ^* V* w
% n% Q$ s, @2 I0 q' }% o 以上被screnc加密过的程序,是可以解密的(解密方法下文有介绍),如果你想彻底保护自己的asp代码,可以通过开发activex dll组件的方法进行保护。
. O8 i ?, w) z4 n7 j: E! N6 P _+ c; ^0 ^( D. m. T: L5 q, e
Dll文件是被编译过的机器代码,如果没有源项目文件,是不可能被反编译的,所以组件加密这种方法最安全,也不可能被破解。下面我们来举例说明操作过程,例如你要保护以下asp代码:, R* ^) t# n5 c7 M9 b2 A9 D0 Q
% F7 @6 x, E: F0 d* R
set rs=server.createobject("adodb.recordset") 1 p3 g Y/ Q, y
sql="select * from gq where xs=1 order by date asc"
4 f+ ? {* G( T6 m$ ? rs.open sql,conn,1,1 . H' P, g A. g8 H! W$ j: [0 k
if rs.eof and rs.bof then
3 v% L1 K m$ G3 P9 o response.write"<A HREF=new0.asp?lbid=gqx ><%= gqx %></A>" R6 r6 F- k2 Z& S8 r
else ! k) T) D5 }; q
Response.Write ""
- P1 u2 q L5 M5 B4 O end if
. E# f/ z. F2 \9 q set rs=nothing / L- O5 s/ Y+ X( w
conn.close 2 e& @4 [3 B% t# J. q6 I
set conn=nothing
) R/ v( y' K& Y9 z! m% F6 |8 r% h
$ R$ o5 o- Z% [4 Y# z9 b 可以把它们改写成VB组件,然后在ASP文件中调用组件即可。操作步骤如下:7 m; R2 L+ ]2 i0 a
$ a" f1 U# |3 R5 K$ i2 E
(1)新建一个vb6的activex dll项目
/ f: g2 N7 E; M4 k! j. i
5 Z: f5 |0 ~ r y+ \) a( T7 }, I 在属性窗口中,命名你的库模块和项目文件(例如项目名lacl,模块名disp),以后在asp文件中,调用的对象名将为lacl_disp
4 G! s( P: B/ J
. U( U. q5 Z% V* ^: F* K 选择vb6中的项目菜单中的references ,选中microsoft activex data objects 2.0 library; D2 ~1 F8 _: t8 ^3 r- b
0 r7 l: z; g; H) p8 b" N (2)编写VB组件9 p6 z, L' e; z! s8 \1 k& t
3 @4 [+ o3 }% k% Z: n* U% U 接下来把<欲保护的asp代码>改写成VB组件,代码如下:3 d' v& x( t' Z6 j8 [- d/ j
* \' V% {0 G# p! H; \- a J
public function html_combo(disp_table as string) as string # Z$ m) h& ]1 o2 G5 d
dim outstring as string & A4 r$ G1 _: a: l5 R
dim conn as adodb.connection 9 m1 i5 q' P$ E; X
dim rst as adodb.recordset , t- K9 ` S$ j
dim sqlstring as string : g6 `: Y; T3 q. M, f
set conn = createobject("adodb.connection")
3 I. ?# H/ y/ }3 ]/ I5 j7 j6 Q+ L set rst = createobject("adodb.recordset")
( T3 H: }7 Y' V0 l1 Y2 H$ \' ]" | sqlstring = "select * from " & disp_table & " where xs=1 order by date asc"
. T4 {" \% e" {( y1 ~ '以上是在VB中打开数据库操作,数据库中的表名、字段名,你可以根据自己的需要修改 2 q# X m$ e# N8 Q- E( b( K
conn.open "dsn=sumnet" * i8 |6 M9 C2 M- X$ D0 F( l
rst.open sqlstring, conn, 3, 3
8 @+ l: c5 s$ k if rst.eof and rst.bof then ' {6 _& j/ v/ b3 K! K- Z6 u$ K! ]
outstring = "还没有这类单位信息" 5 ?' U2 X+ M/ l
else # d! V; ^" r3 M$ x" S- i: q
rst.movefirst
5 U6 e/ m5 U& }/ s8 F5 l$ y outstring = "<A HREF=new0.asp?lbid="&request("lbid") & "></A>"
; f3 X+ _5 ]9 y8 u- [. z end if
$ ] ^7 g/ {6 C$ k html_combo = outstring
( h4 `- Y/ s" _* ^. A# `/ s rst.close
q* C3 O% m6 A conn.close # w) \- v9 t/ E( Y) v
end function ' m0 G: n8 s7 X R; q
# U6 Y5 [6 M* G7 R+ s 写好以上VB代码后,保存项目并开始编译。( i1 ]8 J; j7 v! f- |
9 [. G$ y2 `! A: g (3)生成安装文件
# c; z' U \+ O3 k' Q; K3 ^3 N* a- |& a- i. T8 a+ B
打开visual studio 6中附带的package deployment wizard程序,选择刚才建立的activex项目文件lacl;选择package,选择要打包的脚本或使用默认脚本,选择标准安装,为生成的安装文件选择一个存放目录,选择single cab. 其他均默认;然后单击下一步,安装文件就自动生成了!! N7 r% c. ^/ N5 u
- B; _* P% P9 z0 y, N0 P
(4)在IIS服务器上安装组件
; w {& e8 T& z# [
" p7 Y2 C4 ]" l* S& m 在IIS服务器上运行这个安装文件,把组件安装到服务器上。
9 X) v9 y: P' k4 q$ S2 w+ e. \ |0 V% y1 j& t' {" c
(5)在网页中调用组件0 o8 l2 Y. v* v m. ^! s
' I* E i: G" I 以后在ASP文件中,通过调用该组件完成原来的功能。在网页中调用你制作的组件,方法如下: ` S, U9 d! X
9 P' n- l) k: i( v
<%@ language="vbscript" %>
: D+ a( G. L4 H! ] <%
8 f% J$ M) m/ I3 u3 p+ V. ^4 w$ X set diaoyong = server.createobject("lacl_disp.disp") - J/ t( W V) S" z/ K
%>
$ ^% W; E0 O% n; z <html>
# f2 e3 ~* Z9 }" b <body> 0 ^$ G+ J0 U; Z+ ^7 _' p2 T
<%= diaoyong.html_combo("gq")%> 6 f0 T# g! m K/ |* X
<br>
. s+ x% y+ @ ^4 `' m; I5 I </body> ! W7 @9 C. i2 s @3 n
</html> ; l8 B8 M% {$ [$ E
6 y; r# c0 Q3 X, k# T; @ z% i' y$ [. a8 i$ }& j
你看,现在Asp文件中的内容只是组件的调用(与以前完全不同),别人即使得到该文件,也无法编辑修改源代码,因为代码都被封装在VB组件中了,对于组件中的代码,外人是无法看到、也不能反编译的!
% `0 M! g! l. B K7 x; E
* ?! R0 t+ C: p2 Q 3、自己编写加密程序
: Z/ v! V. t' @) j" P5 o' `' f! V' k
. A# K& C* u+ O1 F$ \8 X 组件加密方法虽然不可破解,但是要求你熟悉VB编程,需要把ASP代码改写成VB组件,工作量很大,所以建议大家自己编程来保护asp代码,其基本思路是:写一个加密函数base64Encode和解密函数base64Decode,先用加密函数处理<要保护的asp代码>,得到对应的密文hu;然后再用execute(base64Decode(hu))替换<欲保护的asp代码>。
S: O1 }* i" C: N8 U6 w- ]7 N B# |
$ N% g: Z2 M: B" `+ e 例如我们要保护上面那段asp代码,可以这样操作:
) q4 x/ B. i" q9 R3 I7 \
# D L# F; y( g' C, }7 ~ (1)用WORD处理<要保护的ASP代码>
& P% x( Q2 G3 {3 B2 ]0 ~7 r2 ]7 g' r
将<要保护的ASP代码>拷到WORD中;在WORD中,把代码里的段落标记(回车换行)全部替换成“水”这个汉字,方法是:点击“编辑”/替换,光标移到“查找内容”栏,点“高级”/特殊字符,选择“段落标记”;光标移到“替换为”栏,输入“水”,最后点“全部替换”。同法,把代码中的单引号也全部替换成“加”这个汉字。
) \! N& [4 b! x% A
* d) O7 q6 o+ q' M- H7 G( Y (2)编写、运行加密程序# K, n1 R# ?/ x1 k. `6 y" V k
y# Y# r+ a+ L( x6 V% S, L$ K/ B
在FrontPage中编写加密程序,该程序中有初始化函数initCodecs、加密函数base64Encode(代码如下),把WORD处理后的代码,copy粘贴在inp = ""这句中,最后以test1.asp名存盘;在IE中输入http://127.0.0.1/test1.asp本地运行该文件;屏幕上会显示一大段乱码(例如c2V0IHJzPXNlcnZlci5jcmVhd...),这就是《要保护的asp代码》对应的密文! w7 s I% N4 S! Z; J
& t8 j0 n% A9 y: M9 n
OPTION EXPLICIT ) F6 l5 x( Y( @- X# j2 [
const BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" ' ~5 q# i' M- Z+ a
dim newline
# ?0 ^9 m" U+ M( H) V4 x$ e dim Base64EncMap(63)
- O1 |/ w8 r: j8 z dim Base64DecMap(127)
}4 ~6 A5 p a; L3 n dim inp,hu,encode 4 ?: H1 o% b- o, x4 m6 [/ R
call initCodecs '初始化
, p$ L+ ~( n0 A inp = "<WORD处理后的asp代码>" '将要保护的asp代码用WORD处理,然后填在此处 , I4 `* r3 n5 i1 R' [
hu= base64Encode(inp) '调用函数base64Encode进行加密,得到密文hu
/ X- S1 a7 X {8 W1 q) m3 q Response.Write(hu) '显示密文 1 J$ w b" W. W" ?% R
PUBLIC SUB initCodecs() '初始化函数initCodecs
0 `$ c6 `4 ^' Q8 y, U0 X newline = "<P>" & chr(13) & chr(10)$ \) @' v( W/ k$ u
dim max, idx 3 b" B, W( r3 ?! P
max = len(BASE_64_MAP_INIT)
* B K5 ?- R7 }% m for idx = 0 to max - 1
\9 R) `. |( {, s% c- t Base64EncMap(idx) = mid(BASE_64_MAP_INIT, idx + 1, 1) * z9 Z* h) A V. _3 |
next
+ t+ e4 \- Q1 |3 C# `1 d* y for idx = 0 to max - 1 & {; N+ d! V6 V3 Z
Base64DecMap(ASC(Base64EncMap(idx))) = idx
) R: H4 i* | @% |+ J1 T8 R7 e) H next ; G& R |: U' s# E. j, f
END SUB
# ^# O% i) u5 |7 ~ PUBLIC FUNCTION base64Encode(plain) '加密函数base64Encode , L2 E2 l: m' j5 A
if len(plain) = 0 then 5 ~. }% M: o7 ^- @0 H! ?. [' g
base64Encode = "" ) `" N% L7 r4 Q$ n% o- z/ |. `
exit function
3 X [; c6 C( }4 d end if ( U3 K: }0 O/ L) o4 D
dim ret, ndx, by3, first, second, third
/ L1 b3 _+ e* u! f8 F by3 = (len(plain) \ 3) * 3 3 P( z3 _/ j' ?* N3 v7 O) Q5 z5 O
ndx = 1
" s3 g+ i, ]1 H- W8 ^0 y: H do while ndx <= by3 # J9 S) f6 z' ?
first = asc(mid(plain, ndx+0, 1))
0 c; ^1 g7 X7 |7 }. v# i second = asc(mid(plain, ndx+1, 1)) 5 |6 d: z; g2 O5 r m! Y9 o
third = asc(mid(plain, ndx+2, 1))
' d0 o5 `- t0 r2 Q, d ret = ret & Base64EncMap( (first \ 4) AND 63 ) 3 ~ A4 h9 f* a5 T3 S
ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
( D6 d# C; i) x( t ret = ret & Base64EncMap( ((second * 4) AND 60) + ((third \ 64) AND 3 ) )
) I/ J2 O8 l r3 G" D& W ret = ret & Base64EncMap( third AND 63)
5 t a2 n# x8 y0 z7 S. [ ndx = ndx + 3
$ A1 L- p8 ^0 @, P# Y loop ! j' c, ?1 X' f/ V3 D
if by3 < len(plain) then
; N+ l' G$ A+ s0 s' i first = asc(mid(plain, ndx+0, 1))
4 s' I! i% W# ]9 O, i ret = ret & Base64EncMap( (first \ 4) AND 63 ) ) K$ |6 R+ ?' @6 N3 ] R/ B
if (len(plain) MOD 3 ) = 2 then $ g0 R7 Y9 l1 k
second = asc(mid(plain, ndx+1, 1)) 0 N# k( ~/ R- z# I4 c
ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
$ | i2 J, s) t/ g' {) C2 K ret = ret & Base64EncMap( ((second * 4) AND 60) ) 6 d3 x4 y+ u1 I, C) u& m2 w# b! M9 n
else ) K7 h8 V0 {+ B: r n- }& ^# D$ p: P( Q
ret = ret & Base64EncMap( (first * 16) AND 48) 1 [: U+ Z* p( r
ret = ret '& "=" 3 q4 ?& `3 {9 C, m# @
end if : k' M& F. z( H& f" h/ o
ret = ret '& "=" / C1 a. ~+ X5 {8 K4 d
end if
* z! z- l1 | k7 ~+ v' @. z2 A& T! O base64Encode = ret
/ R: u9 j6 N& J2 E! Y END FUNCTION ( P. R; z6 m, G8 F9 A
/ X" B; \/ n& @& S (3)重新改写要保护的asp文件, Q k. b* E' v
% k9 Z( O" [" Y7 H- T( O2 X3 p 改写原来的asp文件,在文件中增加UnEncode 和base64Decode函数,全部代码如下:
4 ]& e6 a$ n0 p! D% J3 F) r3 c, ^4 J
Dim Hu,Hu2 : z' m2 t0 r! ^3 T3 S& L
'拷贝“欲保护asp代码”的密文 将之存放到Hu变量中
9 r1 C% O7 n; j$ A) V7 A! I Hu=”c2V0IHJzPXNlcnZlci5jcmVhdGVvYmplY3Qo12Fkb2RiLnJlY29yZHNldOMpICAgICDuc3FsPeNzZWxlY3QgKiBmcm9tIGdxICB3aGVyZSB4cz0xIG9yZGVyIGJ5IGRhdGUgYXNj1yAgICAgsnJzLm9wZW4gc3FsLGNvbm4sMSwxICAgICDuaWYgcnMuZW9mIGFuZCBycy5ib2YgdGhlbiDucmVzcG9uc2Uud3JpdGUTvSD7INAg5iAgILUgvyAFILITsmVsc2UgsiAgICAgUmVzcG9uc2UuV3JpdGUg1zxBIEhSRUY9bmV3MC5hc3A/bGJpZD0TJnJlcXVlc3Qo12xiaWQTKSAmIOM+PC9BPuPuZW5kIGlmICAgIL5zZXQgcnM9bm90aGluZyAgICAgICAgsmNvbm4uY2xvc2UgICAgICDuc2V0IGNvbm49bm90aGluZyAgIL4”
* Z! V3 ~) P, X/ t, b Hu2= base64Decode(hu) '还原要保护的ASP代码 ! ?+ t& `4 N2 F6 h% e1 u
execute(UnEncode(Hu2)) '还原单引号、回车换行,并执行原代码 6 d8 p7 f" o4 A }7 Q
’解密函数base64Decode ) B* R3 d' u; o
FUNCTION base64Decode(scrambled) * h e0 `! }* U
if len(scrambled) = 0 then
5 |6 Q' \9 @& [5 m base64Decode = "" & d) ~$ ?& I; X" ^
exit function + T' i9 Z! H+ f7 P- a8 k1 v5 M
end if & i4 x; r* j* E0 I
dim realLen ) I$ l" ?, F( ?7 R; D
realLen = len(scrambled)
5 j& j' Y7 V# X2 g, S( M( u do while mid(scrambled, realLen, 1) = "="
; _% ~/ z1 J* q8 b; \1 h8 v realLen = realLen - 1
3 }1 w& q& }3 e loop
, \+ _1 D6 r# E! T dim ret, ndx, by4, first, second, third, fourth 9 Q- |+ N+ p3 V5 p2 B
ret = "" k7 R) C4 e' q" p7 k2 u( I; N
by4 = (realLen \ 4) * 4
8 a/ I* U! l; O, C( _) ]6 A ndx = 1 8 z, q1 @& [" t5 M" r) t" e# i" I( y
do while ndx <= by4 1 U1 |# Y9 `8 m( r
first = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
5 Q! W! b8 k( K" o4 |! g second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
# Z: p# V5 N, e3 \+ T6 B third = Base64DecMap(asc(mid(scrambled, ndx+2, 1)))
6 z$ n( X7 I2 y* d8 U fourth = Base64DecMap(asc(mid(scrambled, ndx+3, 1)))
! u( k/ |. C0 w5 }5 G6 ~9 r ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3)) ( s( c+ {! i( i( ~6 i
ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15)) 6 H9 i: i/ b0 ]$ ]
ret = ret & chr( ((third * 64) AND 255) + (fourth AND 63)) # p! [6 l6 y' G6 ^9 A0 W
ndx = ndx + 4
8 o8 Q6 y2 t+ ]' _1 F7 d loop 7 u! Q+ N1 ?3 U
if ndx < realLen then
4 q! m+ N6 O0 I% Y' v6 V first = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
- U4 G0 F/ v3 V1 q" L8 r' M$ G9 \" l second = Base64DecMap(asc(mid(scrambled, ndx+1, 1))) 5 @* B4 p) o5 _2 T
ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3))
\ I- t" i8 u if realLen MOD 4 = 3 then ! B3 o2 b% R+ u8 x8 G
third = Base64DecMap(asc(mid(scrambled,ndx+2,1))) $ s# P, N" s2 q- W, g/ Y
ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15))
2 o. V0 Y, @1 C! R6 Y+ Z1 B end if
* t) F3 ~6 }1 i3 A- }" t+ R end if / {6 j# b \' A7 W
base64Decode = ret
/ x) @2 @2 ]; \ END FUNCTION 3 e. C& X' ~9 E4 {
'还原单引号、回车换行函数UnEncode
. T' b, K2 ~( h; f' O$ \8 f5 ], _ function UnEncode(cc) G3 L+ u P, O2 x
for i = 1 to len(cc) 1 b0 H4 Z5 F$ W4 D- c" ?
if mid(cc,i,1)<> "水" then
7 m1 c. r3 H" S3 l! ^ if mid(cc,i,1)="加" then 8 l. f- M8 S& R* `! y
temp = """" & temp . Y3 L- H' M! M. g: |+ x' q
else
. ^. ^2 @* X! y7 @- ?- E temp = Mid(cc, i, 1) + temp 2 x1 e# k& L! E2 N
end if . x* b/ s0 E, g+ n' g4 b
else
, _* q, ~. t! H' _: ~3 M: | temp=newline&temp
! N. j( g( w- d6 O9 I+ P1 g end if # A, D% ~! ]' f j3 O9 S* ~
next
5 [! x* N s1 c: F* F* z UnEncode=temp
s, K# u% L! q# s( ~ end function
8 {9 J7 Z# G# c
7 V a0 a2 g/ w, U6 ^9 G: x+ E1 S- Y( ^+ ~* Y* F
将以上代码以test2.asp名存盘。- Y3 U. b+ D. e! }* j" D
# I0 d$ N! Z. P, d: ] (4)用SRCENC加密test2.asp
2 A6 J/ I$ T: h j' `4 e( @" B/ n& _1 X# @" w4 E
用SRCENC加密test2.asp,然后把它发布到服务器上,这样别人即使得到该文件、破解了SRCENC加密,也无法看到原代码,因为原代码在test2.asp中是密文(Hu=”c2V0IHJzPXNlcnZlc...),所以ASP代码就被保护起来了!
# k( m; |2 A" C$ S
6 J$ ^9 c6 F3 j- w' R 二、加密过的asp程序如何解密?
+ p! x* n8 x1 U! h7 A c1 O9 Z: p' G2 `
如何对加密过的asp程序解密呢?首先我们要告诉大家,用组件法加密的asp程序是无法解密的,而screnc加密过的程序则可以解密,方法是:使用解密软件(ZWDECODE.EXE)。' }8 e7 r5 C+ s$ Q; L
' I) r H. ~* E% t ZWDECODE.EXE(下载地址http://www.mydown.com/softdown/45/45183.html)可以对MS Script Encode加密的ASP文件进行解密,还原出源代码。6 }; e4 D( H" ?3 E1 q9 B6 a
( Z& Y) X% ~1 P1 ]+ ]+ |" x (1)解密方法
5 ^. K! W4 X8 k6 w$ X( W- W4 k3 E* }$ S' w
单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可恢复原代码:
$ Y5 [8 q1 j1 m; G$ I: ]8 ^% `
2 {9 W5 ~* A* \6 F; d ZWDECODE <已加密asp文件名>
, G9 G& g1 u0 ~4 b, i$ h: F. A8 z! x0 c5 w* w/ Z
其中<已加密asp文件名>必需输入,该文件名可带目录路径;也必需输入,这是要生成的输出文件名,也可以带路径信息。
) t: y1 \- g- e& Z8 X0 H" t, I3 W- N3 P
: x+ F& J4 a+ g (2)举例
0 z! a* p; W* Q3 j3 C$ Z
2 X% u1 U1 T- x: v5 j/ O# P 例如F:\22\lacl.asp曾被screnc加密处理过,现在要恢复其中的源代码,你可以在MS-DOS中输入以下命令:
) e0 ~ o" \ x" _, m
) U4 o' m/ f1 {7 x! ~! z$ z7 q ZWDECODE F:\22\lacl.asp d:\ulacl.asp; D( N+ D( U! y
+ b. P- N( a' h9 j5 Y0 T6 O, e
执行完毕,在D盘上就会生成一个ulacl.asp文件,打开该文件,你就能看到源代码了!
2 V3 H" P1 K& ^+ C! G* l5 ]7 \2 l |
|
|