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