|
|
ASP程序加密解密方法全面解析9 x: E0 K6 ~: w' ~3 ^. R* c/ O
2007-08-18 16:41( B' @2 d# K, A3 G1 _
目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法……
# J* W9 E6 E/ b9 p, N) n/ G( i+ p) r$ ], Z- O' m
如今,用ASP技术构建的网站随处可见。由于ASP脚本是在服务器上解释执行的(无法编译),因此你辛苦开发出来的ASP代码,很容易被人拷去任意修改,如何保护ASP源代码呢?这是每个ASP站长都会遇到的难题,网上求解这类问题的帖子非常多,下面我们就来谈谈ASP程序的加密方法。
3 `6 V! e7 `( w/ g
% X( M+ T% a! K+ T7 s% s 一、如何加密ASP程序?5 a! ?5 i; I: v! B
& C7 A* m1 I( ~, u; B7 K! D
目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法。4 b5 g+ B* q, t
7 m3 f! y3 J" C' [/ C
1、使用微软的MS Script Encode进行加密4 y3 w. @- |" X
% L& [& Y; Z5 a 微软提供了脚本编码器MS Script Encode(下载地址http://www.itgene.cn/itgene/download/download.aspID=232),可以对ASP程序进行加密。这是一个简单的命令行工具,其执行文件是SRCENC.EXE,需要在DOS下运行。它只加密页面中嵌入的脚本代码,把网页中之间的ASP代码转换成不可读的乱码,其他部分则保持原样不变。加密后的程序,必须使用Internet Explorer 5.0以上版本才能正常浏览。
3 {7 \* \1 b0 D
( c. T; S7 {* N' s6 J* A 用SRCENC加密之后,文件中被加密过的部分将变成只读类型,假如你修改了加密部分(哪怕只改动一个字),就会导致整个文件不能使用。对于 VBScript,加密后在源文件的第一行会显示:<SCRIPT LANGUAGE="VBScript.Encode">;而JScript(或 JavaScript)则会显示:<SCRIPT LANGUAGE="JScript.Encode">- {/ J* p/ i7 Z/ ^ j
/ C a' g/ `/ M* W
(1)加密方法
3 W/ d5 a: o3 A# m( K5 L
1 w, x2 U9 Y' q! M" N9 u 单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可对某个asp文件加密:1 ^0 [$ x9 G8 D/ ]5 f. C
0 y# c9 x2 x0 X/ I SRCENC [switches] <要加密asp文件名> <加密后的文件名>
6 n1 }. R/ E) F$ `2 {4 ^3 j/ m9 f1 v+ O, [2 v+ _
其中[switches]项目可以选以下5个参数
( O7 S+ W, B$ L7 {, d, g7 j* M% M
1 a9 T) P Q& D$ {$ m& J [switches] 含义 举例" S1 I3 [+ c J+ ^8 Y- J
) _5 q. L# S! @. L /s 可选。命令中带了该参数,加密过程中屏幕上就不会有输出。 screnc /s lacl.sct ulacl.sct- x; x1 R& O9 T0 _
8 L& G! Q8 P0 N0 Y* x8 q/ ]9 _: a 对当前目录中的脚本小程序lacl.sct加密,加密过程中屏幕不显示任何信息% b: e8 c& v- T% l; w
' {2 N2 p+ W2 G2 T1 e$ j
/f 可选。指定输出文件是否覆盖同名输入文件。忽略,将不执行覆盖。 screnc /f lacl.asp' s" Y# X$ C5 T0 {
1 q& O- Z) K8 u. y( M4 {& G$ l 对文件 lacl.asp加密,并用编码后的同名文件覆盖原文件$ Z9 W3 l( W b
4 A/ G% R" ~1 R" \- F& m6 a C6 m
/xl 可选。是否在.asp文件的顶部添加@Language指令。忽略,将添加。7 R% _! F$ b7 |3 h, C
* `7 d7 ?- F Y /l defLanguage 可选。指定Script Encoder加密中选择的缺省脚本语言。文件中不包含这种脚本语言特性的脚本将被Script Encoder 忽略。' N7 S, T- o. F, V8 l
; W7 W, h1 P. b: K, r% \/ Y/ Q 对于HTML文件,JScript为内置缺省脚本语言;对于ASP文件,VBScript为缺省脚本语言;对于扩展名为.vbs或.js的文件,Script Encoder也有自适应能力。 screnc /l vbscript lacl.htm ulacl.htm
7 U7 T( J) x+ X1 h5 E9 O) h
: j0 a* y5 I. U! d6 I/ M 对文件 lacl.htm加密,并生成输出文件 ulacl.htm,确保没有指定语言属性的脚本块使用 VBScript
. D4 A+ x( f/ y( D3 r0 ^ U
. F. {2 j5 |$ x1 y /e defExtension 可选。指定待加密文件的文件扩展名。缺省状态下,Script Encoder能识别asa,asp,cdx,htm,html,js,sct和vbs文件。 screnc /e asp 11\*.* f:\labxw-jm* o2 Y; q! Z, a% m) |
6 }" ?- d' V2 t% N. w. T8 m 对11目录中的所有.ASP 文件进行加密,并把编码后的输出文件放在f:\labxw-jm目录中, @ x' h- |$ W1 h( s) c: r) q9 t
$ E% K! {' c; d (2)操作举例
6 L: h5 S3 Z3 V3 L0 k: x& w, n- S) a9 C' g* b
例如要加密当前目录中的lacl.asp文件,生成加密文件ulacl.asp,则在DOS下输入命令:
) \; P, T: P x% A+ T# p+ t, ]7 T4 `7 ]7 c) _7 m9 Z2 D2 H1 V* u, ^
screnc lacl.asp ulacl.asp
: O2 F/ J& n; D- q6 y6 Q& t9 n+ U! {2 v, A( k
对当前目录中的所有 .ASP 文件进行加密,并把编码后的输出文件放在f:\labxw中,则使用命令:
( q" \* o/ c& W/ m2 _/ \
! I6 W. k9 c6 C" U screnc *.asp f:\labxw1 w8 p2 D. ~/ T2 k: E% Z5 e
( I$ _0 M9 t& p( Y/ t# d
2、使用组件加密asp3 o! I9 X R% X8 `
4 v) D0 k" G t2 p5 P& i: K& L
以上被screnc加密过的程序,是可以解密的(解密方法下文有介绍),如果你想彻底保护自己的asp代码,可以通过开发activex dll组件的方法进行保护。' E( a, P5 V/ U& n- a2 g
8 G7 g1 j, Y! A6 C$ F Dll文件是被编译过的机器代码,如果没有源项目文件,是不可能被反编译的,所以组件加密这种方法最安全,也不可能被破解。下面我们来举例说明操作过程,例如你要保护以下asp代码:+ M5 M w0 G- x- H+ x3 i: E
' E) E4 F Z; f1 L* t& C
set rs=server.createobject("adodb.recordset") " M, i4 d2 N: q6 j T, J
sql="select * from gq where xs=1 order by date asc" 9 ~+ g4 R# Z; \% f5 o9 X( O* ^. T
rs.open sql,conn,1,1
* P) w/ X+ I( ^3 S if rs.eof and rs.bof then
" h" D* {' P- q3 {5 x0 U; L response.write"<A HREF=new0.asp?lbid=gqx ><%= gqx %></A>" & X& x9 k" L l3 d- y7 X
else
: H& q% L3 q- O( L4 a Response.Write ""
3 ?" C: ]- f" [2 c end if
$ ^; \& ]$ @2 q* i. l, ] set rs=nothing
/ O# b5 t- I; b/ a conn.close $ I0 m6 n) q% b
set conn=nothing
( a5 F" l2 a- T" e' @
* _, P6 C% J, M 可以把它们改写成VB组件,然后在ASP文件中调用组件即可。操作步骤如下:+ d0 [! r" _: t) @% I( ~& h
2 G6 A C9 g' r6 y2 k (1)新建一个vb6的activex dll项目& r; `9 L9 f+ ~' R: _
& ~ {+ v+ D) W' i 在属性窗口中,命名你的库模块和项目文件(例如项目名lacl,模块名disp),以后在asp文件中,调用的对象名将为lacl_disp& Y8 r7 A6 H8 v' |7 G
. I, @. q; k( |1 B* ? 选择vb6中的项目菜单中的references ,选中microsoft activex data objects 2.0 library
1 L) P+ c( Y3 S7 R) Q
, w: J* K% y* [4 P9 U9 T (2)编写VB组件
: x: U; w0 y; ~6 O3 @/ K, T8 Z/ U3 W( T" x* g+ C4 u/ c
接下来把<欲保护的asp代码>改写成VB组件,代码如下:# b+ N( I0 d5 B
6 w1 W7 z4 l1 p3 m: P) U& S
public function html_combo(disp_table as string) as string $ ?) V: N* }! i
dim outstring as string # Q- A8 |9 W& A$ U. l6 q1 {2 o
dim conn as adodb.connection
+ C! E+ ]2 P8 G2 e$ e, [ dim rst as adodb.recordset
3 b9 T, g: P; Q2 F0 D' a dim sqlstring as string
4 h9 y! F0 N, j6 s. n set conn = createobject("adodb.connection")
% j% t1 i H3 z5 I6 R9 q+ d set rst = createobject("adodb.recordset") - a# A4 G4 C$ O* G5 n" y( B5 l
sqlstring = "select * from " & disp_table & " where xs=1 order by date asc" / |! O- x. c2 d
'以上是在VB中打开数据库操作,数据库中的表名、字段名,你可以根据自己的需要修改
* b1 q2 l5 N: [) o. C, j! a conn.open "dsn=sumnet" ) \9 e* Z4 k) U5 T8 ?
rst.open sqlstring, conn, 3, 3 6 T/ r9 t3 B1 k- M" Q
if rst.eof and rst.bof then ( p( r/ N! i* ^
outstring = "还没有这类单位信息"
6 f: C$ b+ y2 G) A+ T2 J& C% @# d else
5 t' z+ S' ?: b rst.movefirst
& W. k( H! g4 _- y outstring = "<A HREF=new0.asp?lbid="&request("lbid") & "></A>" ' a- S1 c' j/ c- H
end if
}/ P3 R1 y! k" p+ L html_combo = outstring / X L6 [% \ q$ O, |6 K
rst.close j) t. q* G) o! b+ @' b
conn.close
) j( ~, j# {4 V$ ] o' J end function
5 c& m! i- t' M* h4 v) t' D7 @, O) O& u x1 p' _7 |7 @
写好以上VB代码后,保存项目并开始编译。
/ y- r& h. s- k. e
, |- x: H) z1 j; G+ L (3)生成安装文件
& h5 S& Y% A: d) m, ^( l+ q# k# s
打开visual studio 6中附带的package deployment wizard程序,选择刚才建立的activex项目文件lacl;选择package,选择要打包的脚本或使用默认脚本,选择标准安装,为生成的安装文件选择一个存放目录,选择single cab. 其他均默认;然后单击下一步,安装文件就自动生成了!
6 O- e7 A+ r/ F- _. o
6 r y; O* f4 s9 m7 l- t% \* a2 { (4)在IIS服务器上安装组件' `: r! n' @# _, n# J; _
- Z5 o2 G9 e9 e: ]1 ? 在IIS服务器上运行这个安装文件,把组件安装到服务器上。2 D/ I L# q& K9 N7 L$ E
$ j6 J: x9 e( N (5)在网页中调用组件) c; O: x- Y: t/ z- l' X
* q/ B6 M1 }' O& p$ A9 p 以后在ASP文件中,通过调用该组件完成原来的功能。在网页中调用你制作的组件,方法如下:0 n/ A; l7 W$ \8 U1 F( n% \( I K
* U0 k5 Z% M+ Q# x# X7 I
<%@ language="vbscript" %> , j0 w6 I2 Y; K% U$ w& T% v
<% " X8 \' Z8 \6 W9 P
set diaoyong = server.createobject("lacl_disp.disp")
2 r3 e, s3 Y4 g3 M: f2 C4 y" m4 l3 j %>
0 y% n& |/ c* L" T7 Y <html>
1 @1 I1 E4 x: u; L2 E7 s9 J; K7 d <body>
# X) w% W6 K) M: Z8 v <%= diaoyong.html_combo("gq")%>
- z/ i* M9 m$ W <br>
2 N/ T4 X+ C! n </body>
: _- @ q4 \* F& J ]8 Q# J4 Y </html> : H& o7 B7 u& P4 r
# u. C* \* q1 f; ?$ W# \ A
5 |9 x6 K8 A( C$ \) S7 F
你看,现在Asp文件中的内容只是组件的调用(与以前完全不同),别人即使得到该文件,也无法编辑修改源代码,因为代码都被封装在VB组件中了,对于组件中的代码,外人是无法看到、也不能反编译的!
% p/ C* Z7 Z" V
# r/ e# P8 X* g/ N" v8 Y 3、自己编写加密程序/ _$ A8 i, y% n7 d
3 ]: z9 K( L0 Y0 k" h 组件加密方法虽然不可破解,但是要求你熟悉VB编程,需要把ASP代码改写成VB组件,工作量很大,所以建议大家自己编程来保护asp代码,其基本思路是:写一个加密函数base64Encode和解密函数base64Decode,先用加密函数处理<要保护的asp代码>,得到对应的密文hu;然后再用execute(base64Decode(hu))替换<欲保护的asp代码>。
/ C2 H5 F- s, ?2 i2 K( L# o4 J" T$ H
例如我们要保护上面那段asp代码,可以这样操作:( e3 ~( S8 I0 z1 l# K- j
9 I' u7 L& o$ l3 a9 g
(1)用WORD处理<要保护的ASP代码>* ^6 }# T3 G" r4 R( L8 [, B1 z3 B
8 u2 E) F1 g( e 将<要保护的ASP代码>拷到WORD中;在WORD中,把代码里的段落标记(回车换行)全部替换成“水”这个汉字,方法是:点击“编辑”/替换,光标移到“查找内容”栏,点“高级”/特殊字符,选择“段落标记”;光标移到“替换为”栏,输入“水”,最后点“全部替换”。同法,把代码中的单引号也全部替换成“加”这个汉字。, l0 K3 D8 j9 ^! \" Q6 Q* N
- @. U+ P. O& L5 }" F# X (2)编写、运行加密程序4 s( G( M7 `' @/ g3 Y0 ~+ S# \8 V
4 D( i* g) _7 j7 w( \3 I 在FrontPage中编写加密程序,该程序中有初始化函数initCodecs、加密函数base64Encode(代码如下),把WORD处理后的代码,copy粘贴在inp = ""这句中,最后以test1.asp名存盘;在IE中输入http://127.0.0.1/test1.asp本地运行该文件;屏幕上会显示一大段乱码(例如c2V0IHJzPXNlcnZlci5jcmVhd...),这就是《要保护的asp代码》对应的密文!7 j' r. G; [* ]% t
9 d2 [, E9 t i
OPTION EXPLICIT
. x: z4 z" P' E. G const BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
- v, C: z) y5 M7 U O! J) ^ dim newline 9 }1 r9 ]" N s1 _2 `+ }
dim Base64EncMap(63) * F9 }4 R, D W/ U2 ]
dim Base64DecMap(127)
( w" Q3 Z; m5 ^! t/ V# S dim inp,hu,encode / ~( ~. o: ^$ I/ H& c! n
call initCodecs '初始化 4 V0 W8 _8 B$ n2 o* z$ k6 B
inp = "<WORD处理后的asp代码>" '将要保护的asp代码用WORD处理,然后填在此处
, _' x9 Y1 t( m% V hu= base64Encode(inp) '调用函数base64Encode进行加密,得到密文hu
6 _. \* ~! M) I X% Z2 w' ] Response.Write(hu) '显示密文 $ f, _! z0 |" H
PUBLIC SUB initCodecs() '初始化函数initCodecs
9 X% ?$ @0 x% t# J newline = "<P>" & chr(13) & chr(10)1 ]) z% k+ o8 \! R/ h
dim max, idx
. }" c6 H" _5 a+ | max = len(BASE_64_MAP_INIT)
; {2 z# n0 u% I! m0 d% X, L for idx = 0 to max - 1 3 O& M: P# E- I( b& x/ d% a
Base64EncMap(idx) = mid(BASE_64_MAP_INIT, idx + 1, 1)
g0 I* K# d6 L L& C9 n next 4 R9 R& Z: p! K* \
for idx = 0 to max - 1 6 Q0 h) n( S2 K0 i9 o& G
Base64DecMap(ASC(Base64EncMap(idx))) = idx z3 f, k0 e+ T( s. }9 N
next 0 h/ s1 C$ n( X
END SUB 3 z3 y, x' r0 M0 F: k1 H- U6 q3 ~
PUBLIC FUNCTION base64Encode(plain) '加密函数base64Encode 1 J+ T- U$ u9 l& o: i) @/ y' P
if len(plain) = 0 then
5 E* B _6 y" [6 l% o# i6 q# X) {! Z base64Encode = "" . X- X* r: n& B h* U
exit function
- S" H7 S4 Z+ z/ ]# S2 b' L& A end if
* q/ H& {- T: ]8 h( I- Z7 n dim ret, ndx, by3, first, second, third 6 |/ \" y D, ?' s
by3 = (len(plain) \ 3) * 3
! y; H7 o6 S& I, M9 e ndx = 1 * |3 e' k7 b. `5 ^' Y, d9 r
do while ndx <= by3 5 q: [+ A/ E3 k5 F3 q
first = asc(mid(plain, ndx+0, 1))
( i7 |) y) b E3 }9 G/ e0 x3 U% h1 s second = asc(mid(plain, ndx+1, 1)) & x* @! w1 O& E! l
third = asc(mid(plain, ndx+2, 1)) , P6 H7 P; r# D& l p6 ?& I
ret = ret & Base64EncMap( (first \ 4) AND 63 ) , C. H3 b% V o0 Z% Y0 P+ X
ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) ) 7 H7 T9 u7 U, c/ X$ Q& D! f+ f2 f( X
ret = ret & Base64EncMap( ((second * 4) AND 60) + ((third \ 64) AND 3 ) )
; P) x( \5 g& `9 O& ^+ y7 }) I ret = ret & Base64EncMap( third AND 63) / P# Q; B" Z0 |2 U$ i m3 q! J
ndx = ndx + 3 * A h% L' H: y! D/ O
loop
4 J7 M$ z/ n6 @: N% p9 E9 c if by3 < len(plain) then
. e; ~8 L" Z/ O+ l7 E first = asc(mid(plain, ndx+0, 1)) ! S. h" t# K, L; ?! I; r ^, F
ret = ret & Base64EncMap( (first \ 4) AND 63 ) 1 K. m+ }- j- Z4 Q. ~6 D2 }
if (len(plain) MOD 3 ) = 2 then 0 U; s. w0 W# Q Z+ _
second = asc(mid(plain, ndx+1, 1))
# i1 w! z i% R) T2 ]$ w7 R" e ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) ) . ~% D' J u6 i( g: F9 z+ g6 t
ret = ret & Base64EncMap( ((second * 4) AND 60) )
& B: p W% V3 y- V6 ?6 S8 S else
7 g: t" o7 X1 T) W# Y ret = ret & Base64EncMap( (first * 16) AND 48)
" l2 E, ~+ ^0 F d ret = ret '& "=" % W, O% x" B6 p$ ~8 B
end if
# {1 u# k; h# f d% T, k6 p# I5 J; u ret = ret '& "=" 8 E9 J* z, Z+ G7 L! u
end if . f- J! [) _! f& y! F- L
base64Encode = ret 4 }1 a. V" d( l( g! @6 o
END FUNCTION 8 \! I# z0 u; r0 w
" Q8 v. B/ N4 Z1 j' I
(3)重新改写要保护的asp文件
- @ U; H4 ~3 L/ f- \( Z% N" t* w x
改写原来的asp文件,在文件中增加UnEncode 和base64Decode函数,全部代码如下:7 m8 l' b0 J5 W' m b: v
' C0 L' K6 O% F5 P9 v
Dim Hu,Hu2 8 J. N9 }8 d" g5 q4 J
'拷贝“欲保护asp代码”的密文 将之存放到Hu变量中 s7 g& J; w5 a, P& g
Hu=”c2V0IHJzPXNlcnZlci5jcmVhdGVvYmplY3Qo12Fkb2RiLnJlY29yZHNldOMpICAgICDuc3FsPeNzZWxlY3QgKiBmcm9tIGdxICB3aGVyZSB4cz0xIG9yZGVyIGJ5IGRhdGUgYXNj1yAgICAgsnJzLm9wZW4gc3FsLGNvbm4sMSwxICAgICDuaWYgcnMuZW9mIGFuZCBycy5ib2YgdGhlbiDucmVzcG9uc2Uud3JpdGUTvSD7INAg5iAgILUgvyAFILITsmVsc2UgsiAgICAgUmVzcG9uc2UuV3JpdGUg1zxBIEhSRUY9bmV3MC5hc3A/bGJpZD0TJnJlcXVlc3Qo12xiaWQTKSAmIOM+PC9BPuPuZW5kIGlmICAgIL5zZXQgcnM9bm90aGluZyAgICAgICAgsmNvbm4uY2xvc2UgICAgICDuc2V0IGNvbm49bm90aGluZyAgIL4”
1 q0 g. G7 R/ N Hu2= base64Decode(hu) '还原要保护的ASP代码 # l, U$ _* D/ w. m; ^
execute(UnEncode(Hu2)) '还原单引号、回车换行,并执行原代码 : R- D/ X& P/ H; f% x6 l
’解密函数base64Decode # T, @8 X) G; r7 v- }7 ^
FUNCTION base64Decode(scrambled)
, X- V7 d& g4 s" B7 A if len(scrambled) = 0 then . N5 q, [" P# N, T: ]
base64Decode = "" ' z x' Z. y6 E8 ^! ^8 `
exit function / l% t1 j- i* W6 ~6 E* s0 I' J
end if ) K/ O: C0 F- o9 P9 N- S+ E: d
dim realLen
, H% \: [( e8 G& ^; y) g realLen = len(scrambled)
, h8 B0 \- B- d, M5 u9 q. d do while mid(scrambled, realLen, 1) = "=" : T3 X- E- v6 ~) c# J B
realLen = realLen - 1
- t7 m& Y" C) }. l loop
# B. P t- e8 m2 k' f, @7 _ dim ret, ndx, by4, first, second, third, fourth
n1 v9 c8 k- w* s9 a ret = "" , y" P; h% P3 r0 G9 S! f& R* ^& Q }% H
by4 = (realLen \ 4) * 4 ! H; r3 f k" Z8 I, z+ v! M6 f
ndx = 1
3 e6 a1 [3 F O5 z) k/ T0 ` do while ndx <= by4
' U3 K2 d6 C! x$ _/ N first = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
$ l- `2 i% `' H+ s, ~$ i second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
0 l* @: l4 }- |# g; q/ O third = Base64DecMap(asc(mid(scrambled, ndx+2, 1))) 3 V) P# U. ]8 \ y6 D' `2 h8 D
fourth = Base64DecMap(asc(mid(scrambled, ndx+3, 1))) - e" W* k! O1 \5 ?" p9 D$ {) L% E
ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3)) 7 O3 O8 \4 C% D8 l; d/ E& o& L
ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15))
' z# g. u- f( M! V( Q' f, M6 F8 f8 n ret = ret & chr( ((third * 64) AND 255) + (fourth AND 63)) # ?. q, w- Q8 h
ndx = ndx + 4
) ?7 l5 ?6 \4 [, ]7 ?: I- m! H loop " D* {# @9 B& y: _6 A. L2 e
if ndx < realLen then , [1 B1 K2 }) x, E' n
first = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
- m7 \: l2 k8 _+ B" n. \ p) l second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
$ W; ]8 |6 ]- G ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3))
# a* o7 Y+ X0 G* y. l7 t if realLen MOD 4 = 3 then 0 A3 Y, {! I/ R3 K
third = Base64DecMap(asc(mid(scrambled,ndx+2,1))) 6 ~8 a$ g8 J3 L# c }8 d- q; R
ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15))
, Z0 [ d$ r, H end if 6 _8 d. M) C0 Y* s& w9 B' i
end if
# t5 {$ G7 O9 _9 ]/ \+ m base64Decode = ret
, b" c8 C1 |" ^ END FUNCTION
$ Z- f. w* e2 ~+ t% _. f '还原单引号、回车换行函数UnEncode 7 k1 d9 v6 L/ l+ b1 Y
function UnEncode(cc)
/ Z2 h% [' y; @0 W for i = 1 to len(cc)
( j, s/ r% U D! x( I if mid(cc,i,1)<> "水" then
4 j& v9 o- E' V2 i4 l- r if mid(cc,i,1)="加" then
7 S5 h$ r: C' j( B2 w temp = """" & temp 9 s1 d7 t: I8 _6 H
else
; h6 \9 I4 w& z' p, n temp = Mid(cc, i, 1) + temp # f- ~7 j, j3 E5 [
end if ! l2 Y+ s4 j+ A
else # V, _; p7 p7 T P
temp=newline&temp : ~& ?9 ?0 Z7 M
end if
, b" U" J: S4 n( n8 b% } next
9 r3 n h, ~8 k" ~) J( Q UnEncode=temp
8 v R( _3 m( _% J end function - d# b" s8 ?7 ?4 A% m0 }+ f
+ I9 A& t y9 {$ q
, M% J6 i7 ?% U 将以上代码以test2.asp名存盘。 m9 W/ {/ n2 O6 @3 v1 {+ `
* q7 b. J) p2 _5 C& ?/ `9 x
(4)用SRCENC加密test2.asp
( B" J& y% }9 A/ E
8 w' {3 W |( O 用SRCENC加密test2.asp,然后把它发布到服务器上,这样别人即使得到该文件、破解了SRCENC加密,也无法看到原代码,因为原代码在test2.asp中是密文(Hu=”c2V0IHJzPXNlcnZlc...),所以ASP代码就被保护起来了!% @" [2 }- Q" r' t" A
3 p+ g' L j- `+ a5 E
二、加密过的asp程序如何解密?% h0 R! R# }6 T' d. U# h
2 A9 o; ]: D7 C8 y 如何对加密过的asp程序解密呢?首先我们要告诉大家,用组件法加密的asp程序是无法解密的,而screnc加密过的程序则可以解密,方法是:使用解密软件(ZWDECODE.EXE)。# d' _1 P/ c: i3 J, _
, e7 u8 h1 a) G
ZWDECODE.EXE(下载地址http://www.mydown.com/softdown/45/45183.html)可以对MS Script Encode加密的ASP文件进行解密,还原出源代码。( J/ y% |5 q: A k# Z- \; U: D5 A
2 l$ [, r- O5 g8 O! K (1)解密方法' {! ]* `5 ~( N8 b4 E2 e( b+ R
% `4 V3 r" y+ C! v$ b4 Y' ` 单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可恢复原代码:
) b' z z9 d& G4 d+ @2 k4 I/ ]7 A. ~
ZWDECODE <已加密asp文件名>& L+ h9 I5 Z s( X! X* Q
$ T( s. J; P8 J0 u
其中<已加密asp文件名>必需输入,该文件名可带目录路径;也必需输入,这是要生成的输出文件名,也可以带路径信息。
/ a6 L; P3 h" A& K& b( t
. i1 _0 R0 r4 J7 M8 f, u (2)举例
- c/ q" W9 [: a. V, d2 Y) C6 d% m" d* t
* f' z! E4 n6 c8 \" \ 例如F:\22\lacl.asp曾被screnc加密处理过,现在要恢复其中的源代码,你可以在MS-DOS中输入以下命令:
( d' h1 _$ I9 E4 ?+ C! q0 }! Q1 I
5 D8 T* Q% ]7 N& I, f6 |+ d, ~: w ZWDECODE F:\22\lacl.asp d:\ulacl.asp$ e X! I) G+ A
& O" L* r8 P+ O! F
执行完毕,在D盘上就会生成一个ulacl.asp文件,打开该文件,你就能看到源代码了!
}/ @9 T7 T4 k9 M" L; u) T3 v |
|
|