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