|
|
ASP程序加密解密方法全面解析
( _- j. A2 u2 b6 ^9 e8 k6 W+ @7 _2007-08-18 16:41
+ e7 f1 I8 X6 j: }- | 目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法…… 9 V! j) {5 i7 J7 B
6 V. Y) R. a0 T7 Q9 K! s 如今,用ASP技术构建的网站随处可见。由于ASP脚本是在服务器上解释执行的(无法编译),因此你辛苦开发出来的ASP代码,很容易被人拷去任意修改,如何保护ASP源代码呢?这是每个ASP站长都会遇到的难题,网上求解这类问题的帖子非常多,下面我们就来谈谈ASP程序的加密方法。
+ R% K- v! v( m* l
" @" Z: g, A* m+ f 一、如何加密ASP程序?
" @/ m/ _0 Y/ q, c% K" j0 F' |( Z
目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法。3 O8 B2 k/ ?, h2 M
0 h, P l u) ~0 u2 m1 s. q 1、使用微软的MS Script Encode进行加密0 p5 F: k- ^3 n6 { V
3 }7 C C' J( U" Y& i$ L
微软提供了脚本编码器MS Script Encode(下载地址http://www.itgene.cn/itgene/download/download.aspID=232),可以对ASP程序进行加密。这是一个简单的命令行工具,其执行文件是SRCENC.EXE,需要在DOS下运行。它只加密页面中嵌入的脚本代码,把网页中之间的ASP代码转换成不可读的乱码,其他部分则保持原样不变。加密后的程序,必须使用Internet Explorer 5.0以上版本才能正常浏览。' f& Z5 a, ?1 P4 M$ \1 z
1 }, Z7 E, S( s" F1 E 用SRCENC加密之后,文件中被加密过的部分将变成只读类型,假如你修改了加密部分(哪怕只改动一个字),就会导致整个文件不能使用。对于 VBScript,加密后在源文件的第一行会显示:<SCRIPT LANGUAGE="VBScript.Encode">;而JScript(或 JavaScript)则会显示:<SCRIPT LANGUAGE="JScript.Encode">1 I- y6 G# f, M& z3 y9 b% G& G
4 d3 S) G: H/ L$ g+ n2 N (1)加密方法
0 `; U+ Q: n* ~* |* k; b0 ^9 u7 ], n P! T
单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可对某个asp文件加密:
5 z, h e- F0 S7 ?# e" F8 ^2 r3 X D& _' p
SRCENC [switches] <要加密asp文件名> <加密后的文件名>
- P) S3 o% U7 h( I5 `/ h* {1 Z* O+ q: W) x
其中[switches]项目可以选以下5个参数# A6 E" a$ v2 k- ~# a ?
( x% i: J0 d4 \5 d$ b [switches] 含义 举例, w- v L8 Z! ^$ t
" r; Y+ z+ L! ^% m$ y: v
/s 可选。命令中带了该参数,加密过程中屏幕上就不会有输出。 screnc /s lacl.sct ulacl.sct
& x- C1 n! ]% d! P' N
: I0 R% U" Z, N9 a& }! J 对当前目录中的脚本小程序lacl.sct加密,加密过程中屏幕不显示任何信息) z8 |! X+ U" w- }; c
) d) z: X6 V: g) P: C, t, ` /f 可选。指定输出文件是否覆盖同名输入文件。忽略,将不执行覆盖。 screnc /f lacl.asp) k- N2 A. A+ N2 [6 t
4 B# R! j( B: Y, S 对文件 lacl.asp加密,并用编码后的同名文件覆盖原文件; t1 ^& j0 v- E) {9 ]) y
9 Y" K+ A2 W' u- m% I2 u+ i/ F+ a) g" p /xl 可选。是否在.asp文件的顶部添加@Language指令。忽略,将添加。( W2 d/ W+ T& \. n
5 t/ A- u' q: ?8 B /l defLanguage 可选。指定Script Encoder加密中选择的缺省脚本语言。文件中不包含这种脚本语言特性的脚本将被Script Encoder 忽略。# F" m- `, r5 U2 J+ B. Z5 j
2 {- g; J. e: |+ O0 {2 @# w5 V 对于HTML文件,JScript为内置缺省脚本语言;对于ASP文件,VBScript为缺省脚本语言;对于扩展名为.vbs或.js的文件,Script Encoder也有自适应能力。 screnc /l vbscript lacl.htm ulacl.htm
3 h" _+ Y; w3 {7 D
, W4 e8 W* F3 o& ] 对文件 lacl.htm加密,并生成输出文件 ulacl.htm,确保没有指定语言属性的脚本块使用 VBScript
" I: r9 u- x3 } |; Y* L7 A
* e A) }% R/ j /e defExtension 可选。指定待加密文件的文件扩展名。缺省状态下,Script Encoder能识别asa,asp,cdx,htm,html,js,sct和vbs文件。 screnc /e asp 11\*.* f:\labxw-jm
7 O( D3 C; }7 b8 l. S0 M
# i% }+ d. c* n# K% A2 Z+ d 对11目录中的所有.ASP 文件进行加密,并把编码后的输出文件放在f:\labxw-jm目录中
2 }/ b0 \, m" ?
* g4 B0 e' M' O2 K& N- F- w% k (2)操作举例
" h9 y# x& k/ v. Q- d" y, f& V; V" L
例如要加密当前目录中的lacl.asp文件,生成加密文件ulacl.asp,则在DOS下输入命令:4 S) M! U9 B0 g4 Z) F6 O1 i* d
$ \$ ?8 X; E2 t screnc lacl.asp ulacl.asp k5 R3 V7 F# L' S$ X
8 s8 z( R! j$ n6 G 对当前目录中的所有 .ASP 文件进行加密,并把编码后的输出文件放在f:\labxw中,则使用命令:
: b, \; A- a1 s; R/ s/ w r% S, N/ c! z0 h2 x4 q" _1 m5 d( K) S
screnc *.asp f:\labxw' W! r' ?( Z% t, L4 y/ S" C% _
: Q) z7 T9 a1 O ]( q5 s 2、使用组件加密asp% Q" M- P' V V" D
4 h) m, ?$ I5 A1 U4 v! e8 c 以上被screnc加密过的程序,是可以解密的(解密方法下文有介绍),如果你想彻底保护自己的asp代码,可以通过开发activex dll组件的方法进行保护。( `, ~& G3 H; F- Y
( E: F' m2 Z" B: f1 ~1 ` Dll文件是被编译过的机器代码,如果没有源项目文件,是不可能被反编译的,所以组件加密这种方法最安全,也不可能被破解。下面我们来举例说明操作过程,例如你要保护以下asp代码:3 l. ^& M& e3 A
! N/ C3 s4 F; w$ ~0 a5 E0 L
set rs=server.createobject("adodb.recordset")
& G0 v% x" E& Z4 t( ^1 ~7 o; f" f sql="select * from gq where xs=1 order by date asc" ( R' v. p# c# m2 h+ O; e
rs.open sql,conn,1,1
9 P8 Z: L/ K7 s8 c8 u8 p( i if rs.eof and rs.bof then + f7 g3 f, j4 d( i- G3 z
response.write"<A HREF=new0.asp?lbid=gqx ><%= gqx %></A>"
: j9 O# @! w9 s( a% p$ ^/ t, p else * Q+ i7 X! U* `2 z
Response.Write ""
* N* X5 C4 b5 |! O$ a0 |1 h end if
8 F6 W% A& E4 y# ~ set rs=nothing $ z4 @1 ]7 I! i* N2 F, ?5 U
conn.close : P4 x0 X$ N: ?- c( G8 K
set conn=nothing ' l n" c* b- e9 Q* Z
' O+ s; l! L9 z9 C9 |0 S3 Q 可以把它们改写成VB组件,然后在ASP文件中调用组件即可。操作步骤如下:. X' p7 z+ ^! t6 L3 d2 F( h
& q+ K- s" i9 ~* C
(1)新建一个vb6的activex dll项目
2 a5 _0 a5 u7 E+ Z6 A& `' k$ S5 W( w& o' H& i3 G, {% ~- A
在属性窗口中,命名你的库模块和项目文件(例如项目名lacl,模块名disp),以后在asp文件中,调用的对象名将为lacl_disp2 z/ s0 M/ z8 b z( T/ ~; b
$ G8 }/ X2 _# B- w6 v* A6 D1 W 选择vb6中的项目菜单中的references ,选中microsoft activex data objects 2.0 library7 g W4 X; I1 d. ^% Y' h
2 L4 i7 b! _$ ~, j4 B- z
(2)编写VB组件9 E7 t7 c7 U1 s' f3 O$ x
/ F5 z% |: O$ T, L7 D
接下来把<欲保护的asp代码>改写成VB组件,代码如下:
# B% V$ ? d N4 `! H- r* k+ a/ y, u, u. X d. s' A* ?4 `* H" e
public function html_combo(disp_table as string) as string
# N; x, T7 z* Z7 y7 c; j8 ?) h dim outstring as string / h" W1 B1 p) Z2 [
dim conn as adodb.connection + X4 O+ V& i! R) V% j
dim rst as adodb.recordset
5 `9 ?0 H J S- ~* P9 g2 y; F- c dim sqlstring as string
* o2 n& c9 t, w6 S6 ?0 y+ P4 n/ p set conn = createobject("adodb.connection")
) H( t- u, A" r2 D, V* f set rst = createobject("adodb.recordset")
$ R- y; p8 h# j sqlstring = "select * from " & disp_table & " where xs=1 order by date asc"
6 H. C5 y/ U; |8 q: s '以上是在VB中打开数据库操作,数据库中的表名、字段名,你可以根据自己的需要修改 / ^% A3 }9 D/ P/ C Y" J
conn.open "dsn=sumnet" # f: W, ~( ]1 P( E
rst.open sqlstring, conn, 3, 3 6 h% y: k7 q/ T/ L
if rst.eof and rst.bof then : I. \1 ^/ L3 |( c/ E+ b6 ~
outstring = "还没有这类单位信息"
* r9 `3 x+ g9 B4 R% t: b6 } else * r/ ]% L- f; M" O- Z$ B
rst.movefirst
2 Z5 B1 B% ?9 A2 f9 ` a6 F2 z outstring = "<A HREF=new0.asp?lbid="&request("lbid") & "></A>" 2 T# d. N6 m" m
end if
+ l) m) s" p6 ] C html_combo = outstring # J( V/ A+ f: Y
rst.close % I! ~& R% w: G) Y& G/ i
conn.close * N1 G2 }0 K7 F7 Q
end function ! c" u/ {5 L7 I1 Q9 X. Q
& m1 A! C7 a q& x8 P 写好以上VB代码后,保存项目并开始编译。
S2 B2 `) x+ O2 ?2 f q3 v3 J, y
3 j8 o% Z7 u" `/ L& I( j2 W (3)生成安装文件4 V7 c- X- [8 O# Y
( V! y7 ^) [" m) m
打开visual studio 6中附带的package deployment wizard程序,选择刚才建立的activex项目文件lacl;选择package,选择要打包的脚本或使用默认脚本,选择标准安装,为生成的安装文件选择一个存放目录,选择single cab. 其他均默认;然后单击下一步,安装文件就自动生成了!) G. c0 s: E8 d& g
; G3 y: g0 _4 S K- v
(4)在IIS服务器上安装组件# `- b8 S5 v- h9 L5 V1 G+ U7 ?/ h8 {
; { t* x! _2 b$ D 在IIS服务器上运行这个安装文件,把组件安装到服务器上。. D! A' l7 J0 a$ s
/ Y7 r. M+ h3 [
(5)在网页中调用组件
5 R+ S4 ~: F- E( C! n
% ?3 n5 H2 m' |* ~9 B& u9 m) P/ u. W 以后在ASP文件中,通过调用该组件完成原来的功能。在网页中调用你制作的组件,方法如下:% q, `( k" Y+ r$ ?. |2 i! }
- z* ~, N* ~2 m6 j' u <%@ language="vbscript" %>
: U$ l$ w0 W7 H8 ]; u/ l <%
. i* \( w% O/ m$ f+ O0 r set diaoyong = server.createobject("lacl_disp.disp") , r& N2 x* ?! W, s2 a/ s9 z5 Q2 ^0 A
%>
" t; y* h$ Y; q [ <html> ) Q0 N& T3 E! c& H
<body> : z+ L3 t8 l' d5 |1 ^; U
<%= diaoyong.html_combo("gq")%>
/ v! \7 h/ Z, M4 z; y* B" p1 } <br> 5 J, t- f3 Z9 n" e8 s! j
</body>
9 i0 b0 y: V6 r' l; {# t _ </html> & |6 ~1 m' ]1 P
) w3 {8 l% W; k+ x* B
+ a) n, i" ]; m! ~0 [ 你看,现在Asp文件中的内容只是组件的调用(与以前完全不同),别人即使得到该文件,也无法编辑修改源代码,因为代码都被封装在VB组件中了,对于组件中的代码,外人是无法看到、也不能反编译的!8 u( R- y9 s: M/ Y
& V& i4 X2 S6 p- [
3、自己编写加密程序* v, l2 m/ W9 m7 Z
0 H+ W! E; ?6 g1 t* E 组件加密方法虽然不可破解,但是要求你熟悉VB编程,需要把ASP代码改写成VB组件,工作量很大,所以建议大家自己编程来保护asp代码,其基本思路是:写一个加密函数base64Encode和解密函数base64Decode,先用加密函数处理<要保护的asp代码>,得到对应的密文hu;然后再用execute(base64Decode(hu))替换<欲保护的asp代码>。
+ v" y8 V! L% ~5 l2 i! F
( t' _: S9 Y: Y* ?- o2 o$ C) z 例如我们要保护上面那段asp代码,可以这样操作:9 X- M6 k/ r( T6 u/ A0 l
3 b! H D; H- v8 L v9 g8 v
(1)用WORD处理<要保护的ASP代码>
6 C* y# \( s+ m y4 G3 ~8 a3 B" ?: F& Q1 h0 {
将<要保护的ASP代码>拷到WORD中;在WORD中,把代码里的段落标记(回车换行)全部替换成“水”这个汉字,方法是:点击“编辑”/替换,光标移到“查找内容”栏,点“高级”/特殊字符,选择“段落标记”;光标移到“替换为”栏,输入“水”,最后点“全部替换”。同法,把代码中的单引号也全部替换成“加”这个汉字。
, i4 E0 a6 i0 o: V) @4 x5 |4 e* p* |( i( R: q" \& L5 k
(2)编写、运行加密程序
d0 c0 G! P @* w8 i+ l( I: h0 d* F0 V# y: p
在FrontPage中编写加密程序,该程序中有初始化函数initCodecs、加密函数base64Encode(代码如下),把WORD处理后的代码,copy粘贴在inp = ""这句中,最后以test1.asp名存盘;在IE中输入http://127.0.0.1/test1.asp本地运行该文件;屏幕上会显示一大段乱码(例如c2V0IHJzPXNlcnZlci5jcmVhd...),这就是《要保护的asp代码》对应的密文!; V ?$ h& L% G4 R. @
; x7 N' Q; B( S/ b ]- y' H
OPTION EXPLICIT 8 m/ f: L6 I; {. L k
const BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" $ v- \8 E: m) h* E' y2 Y
dim newline
" n5 Y3 U7 T G, }" a9 D dim Base64EncMap(63) % G# X" u6 }! T: I, n) _5 E
dim Base64DecMap(127)
. n: }; f& c k+ g. ?8 l% |8 ^* v dim inp,hu,encode + D# F- j# ]: w" a' ]+ r! F
call initCodecs '初始化
, C0 V Q8 t" ]2 Z inp = "<WORD处理后的asp代码>" '将要保护的asp代码用WORD处理,然后填在此处
' \0 c5 x' v. v% d, M7 r hu= base64Encode(inp) '调用函数base64Encode进行加密,得到密文hu ) x0 {# \) C* d/ F1 D. s0 L: j
Response.Write(hu) '显示密文
$ @* }& k6 Q& j5 s PUBLIC SUB initCodecs() '初始化函数initCodecs
. r$ ]4 {3 E2 V: O newline = "<P>" & chr(13) & chr(10)0 V+ A3 @, R) K. D8 |( v
dim max, idx . }# L3 O5 S' E
max = len(BASE_64_MAP_INIT) 5 \4 R5 D" R5 W3 L$ j0 j+ H
for idx = 0 to max - 1
$ Q6 z _+ s1 W. s% ]1 h' t5 a+ @ Base64EncMap(idx) = mid(BASE_64_MAP_INIT, idx + 1, 1)
; S! n4 v D' C' l! \( I next ' r% R/ N! _, O& d& [0 U* ?6 a
for idx = 0 to max - 1 9 I# y) Z: s: I" x/ o9 g1 ^6 n
Base64DecMap(ASC(Base64EncMap(idx))) = idx
$ H$ w7 ]; f; y next
( P# a7 Z4 g( X& X1 C$ ~ END SUB
! C- F; f. \3 ?- u) U& x( | PUBLIC FUNCTION base64Encode(plain) '加密函数base64Encode 4 D* q( C2 t, C2 o9 T2 ]
if len(plain) = 0 then $ M7 }( b- v# E( p, g3 p8 a. C$ a
base64Encode = "" * i1 F# C# a! D
exit function
: E" `- I7 K" k& e end if
& G6 h0 ^9 h8 \. Y y1 u/ ` dim ret, ndx, by3, first, second, third : X% J, I) w% ~: A" f
by3 = (len(plain) \ 3) * 3 : P% a: D9 ~) Y8 C s) x5 X1 M! U5 p
ndx = 1 7 s8 X+ C/ }( L2 a9 }
do while ndx <= by3
3 l( _% F: i. t( ~, h2 H& X5 R2 r first = asc(mid(plain, ndx+0, 1)) 0 _% h, j* f. \; ^6 r
second = asc(mid(plain, ndx+1, 1)) 8 g+ v& w4 ?- t7 C
third = asc(mid(plain, ndx+2, 1))
5 L& a2 r. S& G, f `* | ret = ret & Base64EncMap( (first \ 4) AND 63 ) " H$ R+ ^% w/ i8 e
ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
$ t2 }& J/ D- B1 m# t' b ret = ret & Base64EncMap( ((second * 4) AND 60) + ((third \ 64) AND 3 ) )
8 w2 l8 B f0 [ ret = ret & Base64EncMap( third AND 63) 8 @, T; K# _9 o+ G5 T: ]* Q- K# S
ndx = ndx + 3 ) F5 I. L* g& A
loop
) n7 F7 @+ X0 m if by3 < len(plain) then ' f' e# G. j2 j& ?1 r1 V# Z- f
first = asc(mid(plain, ndx+0, 1)) . x0 ~; e( R8 F8 O2 V* M
ret = ret & Base64EncMap( (first \ 4) AND 63 ) 4 R0 A* j! Q/ k3 L
if (len(plain) MOD 3 ) = 2 then / T. j5 R& e, X' ]4 }2 ~. N
second = asc(mid(plain, ndx+1, 1)) 7 P# x) m' g. b1 @' X: u
ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
% S, m2 |, ?! x ret = ret & Base64EncMap( ((second * 4) AND 60) ) + b3 i" W7 ?" d
else
4 f2 `' T6 J, u9 V& ^6 X ret = ret & Base64EncMap( (first * 16) AND 48)
5 q, M! V' `! G- W/ l% _7 O ret = ret '& "=" 0 z; [; {" ]3 T- w
end if
% a0 J: K$ E9 ^- Z ret = ret '& "=" 5 l2 H+ L i; M# x$ E
end if
* H! v, p( g; M. _ base64Encode = ret 4 o% X n5 {( e/ X
END FUNCTION + {$ ?& {# v9 g$ d! P- T+ X t* l) D
1 E# F5 g) c% \: t (3)重新改写要保护的asp文件
3 U* ?; O: G, A: z% K. i" k2 a
3 s0 ^- g# y; k$ W" p8 ^- a3 } 改写原来的asp文件,在文件中增加UnEncode 和base64Decode函数,全部代码如下:5 P* e( _1 V3 W3 b& l' U
; k* q0 |( u7 l' {( f% O
Dim Hu,Hu2
; W6 |7 ~- n/ G# d+ ~6 z s '拷贝“欲保护asp代码”的密文 将之存放到Hu变量中
+ ?# w8 |$ R* N Hu=”c2V0IHJzPXNlcnZlci5jcmVhdGVvYmplY3Qo12Fkb2RiLnJlY29yZHNldOMpICAgICDuc3FsPeNzZWxlY3QgKiBmcm9tIGdxICB3aGVyZSB4cz0xIG9yZGVyIGJ5IGRhdGUgYXNj1yAgICAgsnJzLm9wZW4gc3FsLGNvbm4sMSwxICAgICDuaWYgcnMuZW9mIGFuZCBycy5ib2YgdGhlbiDucmVzcG9uc2Uud3JpdGUTvSD7INAg5iAgILUgvyAFILITsmVsc2UgsiAgICAgUmVzcG9uc2UuV3JpdGUg1zxBIEhSRUY9bmV3MC5hc3A/bGJpZD0TJnJlcXVlc3Qo12xiaWQTKSAmIOM+PC9BPuPuZW5kIGlmICAgIL5zZXQgcnM9bm90aGluZyAgICAgICAgsmNvbm4uY2xvc2UgICAgICDuc2V0IGNvbm49bm90aGluZyAgIL4”
( [0 J( g* `' O. |% J Hu2= base64Decode(hu) '还原要保护的ASP代码
, C0 }8 E* |/ s5 o$ d c- |( Q execute(UnEncode(Hu2)) '还原单引号、回车换行,并执行原代码
' ^# a. A/ Y5 {) v! t ’解密函数base64Decode
: u. K- n" F, |9 m FUNCTION base64Decode(scrambled) , g7 ^2 F) E/ F
if len(scrambled) = 0 then 6 X' F& `1 \2 v1 K( y- j
base64Decode = ""
6 n1 N4 E, D/ ]5 v% e exit function
" V' c4 n9 M% J end if
0 C3 a' s3 f& z; _ dim realLen * a) S9 y& U2 D& P% T2 n
realLen = len(scrambled)
1 w) m# A, y3 ]# B6 Y7 f) W; A do while mid(scrambled, realLen, 1) = "=" * `# X# b% \* h% [; j5 N
realLen = realLen - 1
- l+ O1 o1 a, H loop ' Q* W6 b6 t+ p
dim ret, ndx, by4, first, second, third, fourth $ ?5 E$ I5 v8 N7 ^# t6 h
ret = "" ! T* C- g4 |; F0 m2 y ?
by4 = (realLen \ 4) * 4 $ Z+ `7 L6 l2 e, g1 k
ndx = 1 " c% @& B4 d4 r/ c
do while ndx <= by4
2 a$ |) x$ ~7 f& K% t2 A" p$ f+ k+ a6 h first = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
6 ^3 ?1 R5 b& d! l- f, ?7 T' l second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
& g8 U$ I, c r* P! z third = Base64DecMap(asc(mid(scrambled, ndx+2, 1)))
0 D) H! G8 i# M. L+ o) z fourth = Base64DecMap(asc(mid(scrambled, ndx+3, 1)))
$ @9 g8 M2 }. H0 A* W* i ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3)) 4 K6 g3 s0 e X: _' {& t
ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15))
, \) @$ q4 R* z1 Z/ j% V ret = ret & chr( ((third * 64) AND 255) + (fourth AND 63))
3 Z& Y* e! N! C, F% {" s. a ndx = ndx + 4 2 b& c' v9 m$ s! h
loop 7 l) a- ^8 i. X, b( v! U
if ndx < realLen then
, L7 r+ F8 s5 \; Q+ M first = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
7 O& j% g) e( ^; @8 I+ {. M) E' n( | second = Base64DecMap(asc(mid(scrambled, ndx+1, 1))) , t* ~/ v+ B+ T1 I3 ?9 R$ e
ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3))
! c t! i) T/ H7 |; b2 s3 _8 N- Z if realLen MOD 4 = 3 then + g0 Z/ l3 K7 r% r5 p+ w
third = Base64DecMap(asc(mid(scrambled,ndx+2,1)))
; C# V& {! v1 p( n; a# h ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15)) 9 r- z' \: k+ p8 @8 R" t
end if
9 L3 M* B* d6 h& H% G( o7 y end if 2 x, L. \. t; j! k* y: {
base64Decode = ret 8 |' x2 s$ k2 }
END FUNCTION
- [7 A5 z% V, W1 h6 w- ]9 Q) g '还原单引号、回车换行函数UnEncode ; [1 H" c( U& J" P& M2 E: g; M
function UnEncode(cc) . P# a% ]7 T9 A4 H( [
for i = 1 to len(cc) 0 l, W) ?4 `. T+ u( D4 `* w9 ]$ h6 S0 ~9 e
if mid(cc,i,1)<> "水" then 6 l8 X v( I8 W' M2 e
if mid(cc,i,1)="加" then
8 x. l D6 F4 u* k9 t- H temp = """" & temp $ {2 n8 p$ [; k9 v" W( I. E: U4 e
else
0 i0 I5 z8 r# M( C0 j. S8 L$ j temp = Mid(cc, i, 1) + temp
1 M/ l J$ Q6 o+ |" h: J2 y- L7 q end if
+ I# y! a, x, L ~0 ^& |7 | else 1 Z/ q# B: p6 A& g7 Q/ l
temp=newline&temp
' V: k% }6 o% O& l2 o end if
0 C4 G) Y( Q* q( O next % d, k6 |( @+ \( \
UnEncode=temp ) t: ~8 E6 O8 S3 I: F
end function $ q8 O. s9 E. e. ]' d5 ?+ }
8 }7 H: R+ d' e5 d! d5 Z6 W9 n
- r+ c6 O$ z) S7 S- x9 G8 Y4 D9 v 将以上代码以test2.asp名存盘。8 ~$ i/ b' w. O) S6 C
0 O( C9 I% Y7 M9 |/ d5 Q" w
(4)用SRCENC加密test2.asp- b5 `/ n' s' P7 b
: ?) L1 T) y4 O7 e9 i 用SRCENC加密test2.asp,然后把它发布到服务器上,这样别人即使得到该文件、破解了SRCENC加密,也无法看到原代码,因为原代码在test2.asp中是密文(Hu=”c2V0IHJzPXNlcnZlc...),所以ASP代码就被保护起来了!
* F' c/ i7 l: h: \' j2 c, s6 O% E; l7 p# ^* g K0 R
二、加密过的asp程序如何解密?
# |7 w% e/ x0 m2 s$ N4 f6 w; I' {9 ~& s! N0 D" p4 |
如何对加密过的asp程序解密呢?首先我们要告诉大家,用组件法加密的asp程序是无法解密的,而screnc加密过的程序则可以解密,方法是:使用解密软件(ZWDECODE.EXE)。/ @' O( y+ e8 N* C* S' n" G
& O/ ]6 {8 _5 ]% s- s
ZWDECODE.EXE(下载地址http://www.mydown.com/softdown/45/45183.html)可以对MS Script Encode加密的ASP文件进行解密,还原出源代码。0 f5 H6 z7 |; D# i- U$ K
2 j6 C) ~9 A" w/ v0 {3 M
(1)解密方法
! {; G4 j4 c$ ^* q. m1 S+ T+ V# R' l! J v6 }) P; S
单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可恢复原代码:
8 v8 @% u5 V" b; H
+ V) i- r3 ^1 p5 v t5 t1 ^7 M ? ZWDECODE <已加密asp文件名>
5 v# A- Z; s, }4 M0 h" ]7 B/ h# b. ^5 a. j+ W
其中<已加密asp文件名>必需输入,该文件名可带目录路径;也必需输入,这是要生成的输出文件名,也可以带路径信息。7 H) G' m* k T
! ?" b* z: a" t& s- j: F
(2)举例
+ O9 ]' h" J2 j! G
- \; M* x1 N% Q" S 例如F:\22\lacl.asp曾被screnc加密处理过,现在要恢复其中的源代码,你可以在MS-DOS中输入以下命令:; J7 C* j7 ~! w9 M
$ j3 T$ r W5 Q# ?
ZWDECODE F:\22\lacl.asp d:\ulacl.asp
5 E3 U* U6 l+ Y# W1 C
0 W1 @9 J7 U; c/ c3 @ 执行完毕,在D盘上就会生成一个ulacl.asp文件,打开该文件,你就能看到源代码了! ! L1 o0 K- ~0 T7 P
|
|
|