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