|
|
ASP程序加密解密方法全面解析
9 \) d1 a8 j3 \, c+ j& R C' _3 `2007-08-18 16:419 X* [. X8 t) r8 V: E& H: j3 k& p
目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法…… $ E" Q- W! X% ]
u$ d+ v* q. q- t9 R+ X3 X 如今,用ASP技术构建的网站随处可见。由于ASP脚本是在服务器上解释执行的(无法编译),因此你辛苦开发出来的ASP代码,很容易被人拷去任意修改,如何保护ASP源代码呢?这是每个ASP站长都会遇到的难题,网上求解这类问题的帖子非常多,下面我们就来谈谈ASP程序的加密方法。
; d) E3 r# @, ~0 S. J( B
/ ~+ d( H' m! Q$ m) j! m 一、如何加密ASP程序?
& R' b5 y' N8 @6 y" l/ x3 M: o& s
目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法。. z4 ~ s$ t( P y; J, ^& D
+ X1 Q, E8 C1 |( I. C, W3 Z, |! M 1、使用微软的MS Script Encode进行加密
8 t; C9 Y8 H9 ~ t+ F0 z( Q4 L
微软提供了脚本编码器MS Script Encode(下载地址http://www.itgene.cn/itgene/download/download.aspID=232),可以对ASP程序进行加密。这是一个简单的命令行工具,其执行文件是SRCENC.EXE,需要在DOS下运行。它只加密页面中嵌入的脚本代码,把网页中之间的ASP代码转换成不可读的乱码,其他部分则保持原样不变。加密后的程序,必须使用Internet Explorer 5.0以上版本才能正常浏览。1 D, R1 W) f* B: k: y0 H) [0 E* a
8 H# O3 V# W2 e3 c" J( d5 J6 Q 用SRCENC加密之后,文件中被加密过的部分将变成只读类型,假如你修改了加密部分(哪怕只改动一个字),就会导致整个文件不能使用。对于 VBScript,加密后在源文件的第一行会显示:<SCRIPT LANGUAGE="VBScript.Encode">;而JScript(或 JavaScript)则会显示:<SCRIPT LANGUAGE="JScript.Encode">
1 X4 u: v; T$ ~9 e( w; ~: F) C3 `
(1)加密方法
% |& L5 E. U5 e. N" E ~; v
1 V' ]: `2 ?2 d+ R& ?8 W; Q ~ 单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可对某个asp文件加密:
/ z2 e0 Q; P6 ^& k! l% [: x: V) R) d# \( O( A! A1 |
SRCENC [switches] <要加密asp文件名> <加密后的文件名>
4 @$ l: U; T- G& z. U+ U) M. q7 ?
8 h" W9 ?+ }3 _: T 其中[switches]项目可以选以下5个参数* ]2 L4 R) {) J+ y- ~
; ~& {6 f. T; i! R$ y* ?% ~& H [switches] 含义 举例; s& h2 `" x' X# a
* K! E1 z, |9 W, [
/s 可选。命令中带了该参数,加密过程中屏幕上就不会有输出。 screnc /s lacl.sct ulacl.sct
4 S' K% o: \; y; b; f
9 K+ ?0 H5 v$ P. r, [: p; c 对当前目录中的脚本小程序lacl.sct加密,加密过程中屏幕不显示任何信息
# J5 }& J/ _) Q m3 p4 }( }: Q p# e# M+ V, c' [2 H4 }/ I! g! s
/f 可选。指定输出文件是否覆盖同名输入文件。忽略,将不执行覆盖。 screnc /f lacl.asp
% C4 a! n M% n" m5 w+ G. N, c) C) u5 X' \1 A" z- X" G
对文件 lacl.asp加密,并用编码后的同名文件覆盖原文件" C1 x7 j, s, |, [& C1 T
# v+ r0 n9 n6 x" F- e
/xl 可选。是否在.asp文件的顶部添加@Language指令。忽略,将添加。& E' k, N& L! j: d8 S$ W, m
3 w6 \) G2 H0 p$ P% M /l defLanguage 可选。指定Script Encoder加密中选择的缺省脚本语言。文件中不包含这种脚本语言特性的脚本将被Script Encoder 忽略。
- a H5 s9 U4 i# X
4 O0 D+ H/ A* W! R 对于HTML文件,JScript为内置缺省脚本语言;对于ASP文件,VBScript为缺省脚本语言;对于扩展名为.vbs或.js的文件,Script Encoder也有自适应能力。 screnc /l vbscript lacl.htm ulacl.htm
- C6 [3 e# [: f6 A
4 n/ {1 N& x) b1 P- p 对文件 lacl.htm加密,并生成输出文件 ulacl.htm,确保没有指定语言属性的脚本块使用 VBScript4 e6 @ z7 o3 N) a4 h0 [; K
( I) w7 D2 e# f8 { /e defExtension 可选。指定待加密文件的文件扩展名。缺省状态下,Script Encoder能识别asa,asp,cdx,htm,html,js,sct和vbs文件。 screnc /e asp 11\*.* f:\labxw-jm
* Z- A9 A+ `' r) V7 Q
7 W/ j) p; o Z# s6 R2 ^ F! K# s 对11目录中的所有.ASP 文件进行加密,并把编码后的输出文件放在f:\labxw-jm目录中3 k+ e1 V. K3 S
- k4 s) S8 O+ d9 o e
(2)操作举例
3 j/ h- h; y+ s" x7 W0 N" C# X. C+ U+ h2 K6 T% e
例如要加密当前目录中的lacl.asp文件,生成加密文件ulacl.asp,则在DOS下输入命令: R6 b. E; h" `
/ V( o: @/ O* U& O screnc lacl.asp ulacl.asp6 T6 J+ I) d( v8 M6 [2 F% ~( Y4 t
/ }( A$ y, w9 G c1 j 对当前目录中的所有 .ASP 文件进行加密,并把编码后的输出文件放在f:\labxw中,则使用命令:
' d! c8 K6 |* V0 g$ J! Q2 I- q+ y" _9 C7 C- ?+ U% X$ i
screnc *.asp f:\labxw
, N) p) w5 `( k) H( @% v
; c' B$ X2 ?+ t5 V# J 2、使用组件加密asp
! a+ \+ W9 W9 W# p% G ]' @7 M! B* C7 b( D" L" L
以上被screnc加密过的程序,是可以解密的(解密方法下文有介绍),如果你想彻底保护自己的asp代码,可以通过开发activex dll组件的方法进行保护。! T" q6 \" y* P- r E! I6 z
; U. C8 k, \) W6 y
Dll文件是被编译过的机器代码,如果没有源项目文件,是不可能被反编译的,所以组件加密这种方法最安全,也不可能被破解。下面我们来举例说明操作过程,例如你要保护以下asp代码:/ I, G5 ^# N- U, ~% B5 k( G( K
2 I! v$ u( e5 Q
set rs=server.createobject("adodb.recordset")
3 k; A. W; {# v; V sql="select * from gq where xs=1 order by date asc"
% N/ L; T. S. x# M' z rs.open sql,conn,1,1 5 ?. E# {7 ~/ B& X$ m- ~
if rs.eof and rs.bof then
5 @4 X7 i; [) A0 f- L response.write"<A HREF=new0.asp?lbid=gqx ><%= gqx %></A>" / I$ p0 o' R: f) [
else 5 Y- G% j* q0 Y; P5 \
Response.Write ""
/ K' P/ ~# ~4 @3 y5 a end if
' v1 Z6 w$ S# x0 I: L$ ] set rs=nothing ( F1 Q8 |( @ B/ i3 }+ D2 o
conn.close ) y5 U8 l2 b& e+ i" i1 c7 }3 J; o5 s
set conn=nothing
$ W. h: g& O! u# L" t: D
3 G/ Y5 c4 h- p' _/ x 可以把它们改写成VB组件,然后在ASP文件中调用组件即可。操作步骤如下:
% p: z0 i5 W s) U, u( d) j3 E( ?' B9 p; `& ^
(1)新建一个vb6的activex dll项目
' _5 o1 M" o" G8 ]" W( m6 }. \: d; j+ C7 k/ {% u
在属性窗口中,命名你的库模块和项目文件(例如项目名lacl,模块名disp),以后在asp文件中,调用的对象名将为lacl_disp
7 C ]: ?) F: O
6 ~8 l. |& L5 k1 p 选择vb6中的项目菜单中的references ,选中microsoft activex data objects 2.0 library
, h. k: v- l* b4 A" S$ @; o
; ^% U% [5 G4 H! T6 e9 h5 y% S; @4 C (2)编写VB组件
3 N" ]+ [" o7 R) C2 W' t. E7 j! B% M6 ]$ U6 d, L3 }9 a
接下来把<欲保护的asp代码>改写成VB组件,代码如下:; K9 c; J6 \- l9 v/ G
9 ?5 U$ T1 X) l# f4 ]
public function html_combo(disp_table as string) as string
" S" O0 Q" q, A. e! C; |' R) a dim outstring as string * I# p' m0 ^3 }0 ~
dim conn as adodb.connection
5 X6 _7 P! G3 _# r# ] dim rst as adodb.recordset 2 C! g4 _# I( g# [* U7 x
dim sqlstring as string
. Q+ o; c; r2 G" I5 d- n( C8 V" k set conn = createobject("adodb.connection") # Z9 ~, k. o2 x$ K
set rst = createobject("adodb.recordset") 0 ^1 o: r! B- ~
sqlstring = "select * from " & disp_table & " where xs=1 order by date asc"
1 v9 R; M9 T- P$ `0 y* ~, X8 D '以上是在VB中打开数据库操作,数据库中的表名、字段名,你可以根据自己的需要修改 ! Y( w# J3 d$ ^* ~5 U( j' \1 m: N
conn.open "dsn=sumnet" ' e! w$ i' {$ Z: m; }
rst.open sqlstring, conn, 3, 3 6 h. A+ m, |6 C9 _' M
if rst.eof and rst.bof then
, P! n, ?: s0 x; Q# i: B: O outstring = "还没有这类单位信息" , A/ I' m# P0 Y2 ]& u
else 2 a: t: m6 f# E% a5 f
rst.movefirst 9 b& A# h* T/ `2 A
outstring = "<A HREF=new0.asp?lbid="&request("lbid") & "></A>"
) Z/ b" _% l; V% h c) { end if
+ _8 H: t6 \; |2 {: y9 s html_combo = outstring $ R9 D2 U* w0 c3 D
rst.close
- B6 e9 Y* D6 C! O conn.close 8 Z( d" T1 z' U$ B7 E$ b( T* Z% m/ i
end function ; j ~4 J/ |4 P @3 g: [
% K/ S$ W+ V- Z- c" b 写好以上VB代码后,保存项目并开始编译。
2 Q" p6 C& Y' H) u% m% {1 s" z. I8 X5 h1 U9 F- G& S& u- ^
(3)生成安装文件
# ?" f7 d1 _, D# e+ T
, v! q9 {) [. F" [ 打开visual studio 6中附带的package deployment wizard程序,选择刚才建立的activex项目文件lacl;选择package,选择要打包的脚本或使用默认脚本,选择标准安装,为生成的安装文件选择一个存放目录,选择single cab. 其他均默认;然后单击下一步,安装文件就自动生成了!
# T" S& `2 d5 ?% D5 j# h; B
( S, l( e' R3 y* b* }5 r/ y (4)在IIS服务器上安装组件! P' i4 V! Y7 z- d1 V
1 m6 D. U' ?% Y) y3 @2 g 在IIS服务器上运行这个安装文件,把组件安装到服务器上。- v% o5 o! ^' D0 ^- Y) I, r) U
/ f1 W8 @2 {$ Y# S
(5)在网页中调用组件( E& u9 d- O+ c) C
" D5 Y _: h' ?
以后在ASP文件中,通过调用该组件完成原来的功能。在网页中调用你制作的组件,方法如下:6 a& S3 `) M# |) t: C7 _/ [
@9 o$ _9 g* X/ m7 f
<%@ language="vbscript" %>
$ P5 J4 h8 ^5 d# B# [" r) O <% ) A+ k: c( r: P
set diaoyong = server.createobject("lacl_disp.disp")
: ~ Q: N: r6 a1 S9 @/ V; H %>
6 s1 c0 V; F# y6 F; j0 ~" J. ` <html>
1 y9 }* j- D7 v; X3 d6 y1 M* F <body>
" J5 G" Z$ Z* E2 T( C4 E7 j% z* @ <%= diaoyong.html_combo("gq")%>
% e5 x& t/ y/ x- Y) \6 v" x <br>
* l9 k9 H4 a8 x2 g4 u </body> 7 l0 C( b$ a } s
</html> 1 Z$ j8 S: C ]) l/ V* C4 |
Q; Y# t+ A. V& U
! Q4 x+ j9 N; s 你看,现在Asp文件中的内容只是组件的调用(与以前完全不同),别人即使得到该文件,也无法编辑修改源代码,因为代码都被封装在VB组件中了,对于组件中的代码,外人是无法看到、也不能反编译的!
! z8 l0 ^$ U- u. M8 j3 R) N/ x& D; H/ @+ o% ?: y. R
3、自己编写加密程序# }$ {8 z7 X" \2 ^5 E) ~- ?* U# y: m
$ w0 Q1 E0 M0 m! H4 k8 [ 组件加密方法虽然不可破解,但是要求你熟悉VB编程,需要把ASP代码改写成VB组件,工作量很大,所以建议大家自己编程来保护asp代码,其基本思路是:写一个加密函数base64Encode和解密函数base64Decode,先用加密函数处理<要保护的asp代码>,得到对应的密文hu;然后再用execute(base64Decode(hu))替换<欲保护的asp代码>。: Q7 E( A$ h. V: ]
0 l7 E" T% z2 N V 例如我们要保护上面那段asp代码,可以这样操作:
& j9 v) J* p( {# W, |& a
2 h" a/ A" ~$ D- J8 x (1)用WORD处理<要保护的ASP代码>
; O" J: [8 e& e% {4 X) L d2 K1 t l+ p
将<要保护的ASP代码>拷到WORD中;在WORD中,把代码里的段落标记(回车换行)全部替换成“水”这个汉字,方法是:点击“编辑”/替换,光标移到“查找内容”栏,点“高级”/特殊字符,选择“段落标记”;光标移到“替换为”栏,输入“水”,最后点“全部替换”。同法,把代码中的单引号也全部替换成“加”这个汉字。# S- B/ ~! }0 G, _
: z7 h) ]- c: R
(2)编写、运行加密程序
7 Q3 T0 Z( s$ w7 m
B5 B- G# j: b% H 在FrontPage中编写加密程序,该程序中有初始化函数initCodecs、加密函数base64Encode(代码如下),把WORD处理后的代码,copy粘贴在inp = ""这句中,最后以test1.asp名存盘;在IE中输入http://127.0.0.1/test1.asp本地运行该文件;屏幕上会显示一大段乱码(例如c2V0IHJzPXNlcnZlci5jcmVhd...),这就是《要保护的asp代码》对应的密文!$ M/ h+ B: o" C1 ?5 H- l. v
4 c% B' ~0 @2 h J# | OPTION EXPLICIT
+ u0 x" j, r3 }& O3 ` const BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" 2 G3 h) l) k9 j& g
dim newline
* q% e/ T* G4 B9 n/ v+ a6 v4 @ dim Base64EncMap(63) . r& q4 |. F- p/ ~
dim Base64DecMap(127) ; n7 s. o4 _7 n, h0 G. i) {
dim inp,hu,encode
% Y# f! J4 ]% ~6 s) q' P, Z! q call initCodecs '初始化 4 ^, @4 n/ Z( D) j* r3 i1 a
inp = "<WORD处理后的asp代码>" '将要保护的asp代码用WORD处理,然后填在此处
6 R5 P% J5 R8 i: I6 U hu= base64Encode(inp) '调用函数base64Encode进行加密,得到密文hu 0 r: \% M, }# j: i5 N3 R P
Response.Write(hu) '显示密文
; p) C+ T8 j7 u: N5 z' E PUBLIC SUB initCodecs() '初始化函数initCodecs
J5 U$ }% x) i; ^ ` newline = "<P>" & chr(13) & chr(10)4 F0 s' b m0 A3 n
dim max, idx 2 j5 d% d; |$ y' {) s- x
max = len(BASE_64_MAP_INIT) 3 t# N5 e9 |) n2 e: m9 V
for idx = 0 to max - 1 , {, p& N1 E, X- z; q# |
Base64EncMap(idx) = mid(BASE_64_MAP_INIT, idx + 1, 1) ; `) I5 i1 O4 ~4 T
next
+ ~7 L* n# V: z) Q' e0 ` for idx = 0 to max - 1 g6 E) U) Q3 [, e1 O. V: K
Base64DecMap(ASC(Base64EncMap(idx))) = idx 2 P8 C; N. S' C, a! H
next ( Z/ N" Y- k* D* K
END SUB 2 D G! D7 c4 x' @, ~0 }8 _
PUBLIC FUNCTION base64Encode(plain) '加密函数base64Encode
) S6 A& Z# g! V. T, W9 J3 f' w if len(plain) = 0 then
4 ^7 q. t. Q* H# m. O+ Q$ x base64Encode = ""
. w" U3 P6 C1 R* i exit function
8 B+ _" s, c. ^( l$ ~/ G end if
/ h( `4 p% N' T u- J dim ret, ndx, by3, first, second, third
" `/ h" W. e7 @* }$ S$ X" U9 z by3 = (len(plain) \ 3) * 3
/ O7 w& I, C! K! L ndx = 1
6 @ x: K$ j5 o' m) r# o" p! p do while ndx <= by3
z' |5 d- a6 y. `# W first = asc(mid(plain, ndx+0, 1))
1 r# n7 y# O' g& p second = asc(mid(plain, ndx+1, 1))
F7 S. }7 ]$ e; i' h ~ third = asc(mid(plain, ndx+2, 1)) : W+ }& h& w9 e
ret = ret & Base64EncMap( (first \ 4) AND 63 )
. D+ _+ P/ M$ F1 {+ m( h$ h ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) ) & c+ c2 ~- `& I' o" z
ret = ret & Base64EncMap( ((second * 4) AND 60) + ((third \ 64) AND 3 ) )
5 b6 ?5 ]7 X. j$ s) G! K; n/ z# i ret = ret & Base64EncMap( third AND 63)
0 E' W1 e) M! a/ `% A' i ndx = ndx + 3 4 M! k2 `0 u% n4 }" t0 K# f
loop + j5 G8 H* k5 s1 L
if by3 < len(plain) then * z! c2 O1 Y/ E# {& Q8 i5 T4 @$ f
first = asc(mid(plain, ndx+0, 1)) 4 d' w C& ^, [7 T6 a6 R9 e5 X+ g
ret = ret & Base64EncMap( (first \ 4) AND 63 )
( e, a3 Q, t' P& v* E. O if (len(plain) MOD 3 ) = 2 then % f; O% f7 n" D. _! v
second = asc(mid(plain, ndx+1, 1))
: w5 g( T# O2 t! B( F( `3 i ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) ) : H; a; C7 ^' O
ret = ret & Base64EncMap( ((second * 4) AND 60) )
' X6 @" b. Q# C, E' ?3 e' Q else
2 P, y# L! o/ ~2 E4 r0 A: G$ a. c ret = ret & Base64EncMap( (first * 16) AND 48)
1 U8 r9 [9 f5 s3 r ret = ret '& "=" * S8 l2 W# z+ d+ `% b
end if
& }+ E3 u) |! {* X* l7 r- B ret = ret '& "="
4 w" P0 B) H' {4 |: e end if ]- @/ N; D, o+ E
base64Encode = ret
7 p9 n# @- D4 O# E END FUNCTION
" |4 q5 [. C: m& H3 W4 D8 |& W) x, S+ K% I7 f2 u
(3)重新改写要保护的asp文件; m. I/ d7 g5 V, n
* m! e( l% }, x0 V, b4 ~
改写原来的asp文件,在文件中增加UnEncode 和base64Decode函数,全部代码如下:
/ E5 A5 k4 P1 Q- V1 n5 K6 P
% r1 t8 q% d, D0 L2 V* k! U, ?( N Dim Hu,Hu2 - s2 `2 d& E# H" p
'拷贝“欲保护asp代码”的密文 将之存放到Hu变量中 # o a# v* j* s% R9 c& Z- Y- e
Hu=”c2V0IHJzPXNlcnZlci5jcmVhdGVvYmplY3Qo12Fkb2RiLnJlY29yZHNldOMpICAgICDuc3FsPeNzZWxlY3QgKiBmcm9tIGdxICB3aGVyZSB4cz0xIG9yZGVyIGJ5IGRhdGUgYXNj1yAgICAgsnJzLm9wZW4gc3FsLGNvbm4sMSwxICAgICDuaWYgcnMuZW9mIGFuZCBycy5ib2YgdGhlbiDucmVzcG9uc2Uud3JpdGUTvSD7INAg5iAgILUgvyAFILITsmVsc2UgsiAgICAgUmVzcG9uc2UuV3JpdGUg1zxBIEhSRUY9bmV3MC5hc3A/bGJpZD0TJnJlcXVlc3Qo12xiaWQTKSAmIOM+PC9BPuPuZW5kIGlmICAgIL5zZXQgcnM9bm90aGluZyAgICAgICAgsmNvbm4uY2xvc2UgICAgICDuc2V0IGNvbm49bm90aGluZyAgIL4” 4 n& O* f1 C- w# r# ^& c% {! B
Hu2= base64Decode(hu) '还原要保护的ASP代码
- }+ Z6 i' j" A A execute(UnEncode(Hu2)) '还原单引号、回车换行,并执行原代码 5 n8 E1 ^* C$ A) o: i
’解密函数base64Decode
B" R) o/ e8 T) F8 z8 L FUNCTION base64Decode(scrambled)
3 U& n% s7 i% } if len(scrambled) = 0 then ( a5 b; i; \! C/ [* e' ^ R0 N' R) e
base64Decode = "" 5 D$ B: G1 b" u0 T
exit function
/ p8 O# I& Y; t# v* s3 w' J l end if
& c& m M }5 j1 P dim realLen ! e( A, e# v u5 v5 }
realLen = len(scrambled)
. a/ C3 \* ^& p* D; i; ]3 e) k( u do while mid(scrambled, realLen, 1) = "="
% ?1 T* T& _ i( ^. q7 j realLen = realLen - 1
9 o6 K+ y2 \8 `2 s& r" M" x! n loop
& ^3 t4 u8 d4 ]+ m. x/ x2 o. Y% k dim ret, ndx, by4, first, second, third, fourth
. ?4 ?) A. C( J8 J ret = "" * R& \! T$ \- y0 w4 \( ~
by4 = (realLen \ 4) * 4
: F2 P2 _8 ]2 {" g ndx = 1 ( J' N6 o, c; r& A
do while ndx <= by4
+ D- Z O0 T" S5 { first = Base64DecMap(asc(mid(scrambled, ndx+0, 1))) 7 k' G; ~! F' `9 A( a
second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
& x7 _8 S1 `* ?! U5 s third = Base64DecMap(asc(mid(scrambled, ndx+2, 1)))
" i( J# u; l) w% f fourth = Base64DecMap(asc(mid(scrambled, ndx+3, 1))) ( ~: w. h1 V; e% ]
ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3)) 2 I3 Y9 l# V% `3 d1 V- T, V$ L
ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15))
0 n9 ]/ z& g# a0 U$ Q I ret = ret & chr( ((third * 64) AND 255) + (fourth AND 63)) * e5 M: }8 C1 K* A
ndx = ndx + 4
) C% {) U$ j5 |1 x$ l( ~# v loop * q, j+ `6 B6 R. n+ {* Q4 A# B
if ndx < realLen then $ i: ^( A- \' b6 h+ S
first = Base64DecMap(asc(mid(scrambled, ndx+0, 1))) 7 O# l' ]% K, C! B' n
second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
+ G1 t# ~( `& c+ p9 \' ^/ [% l$ p ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3))
/ W- b0 i8 n, z- O0 k( E+ H if realLen MOD 4 = 3 then 9 U" i) z# k! j' }( q2 V- ?
third = Base64DecMap(asc(mid(scrambled,ndx+2,1))) 3 @* n |9 ~) X8 j% q* @
ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15))
$ ^% q( m3 y+ O) p end if
5 r: b8 e5 }5 n3 `$ U/ G end if + l0 J* H4 e! J P# H
base64Decode = ret
( Y% J" U$ S8 h8 z7 F END FUNCTION 6 v a( f- K, G+ ]$ E1 E; D
'还原单引号、回车换行函数UnEncode 7 ?4 N" {' Z) H
function UnEncode(cc) % b6 Z; v) z# D
for i = 1 to len(cc) 3 p2 z$ B" a: O! t# Y. |# t) y# r
if mid(cc,i,1)<> "水" then : ?7 ^( W+ C V
if mid(cc,i,1)="加" then
4 j! _$ I6 g! G- ` temp = """" & temp
! u/ r( e7 z+ [. R9 D/ {& f else * [: @) L9 a# L1 I9 u) p
temp = Mid(cc, i, 1) + temp 7 s4 n( O& a$ @3 B- u1 X+ i
end if $ i! t; T$ [! T% a
else ; Q r8 l, ^9 L) n& h0 m/ ^1 W7 ~
temp=newline&temp
+ K3 ^5 b+ O5 K& } end if
6 w6 o/ V% w( [: f next + B. n. A" I) r+ c2 p
UnEncode=temp
3 l c A/ T3 r; _" F( E/ D end function
3 C7 G2 B0 V, b- W$ b7 v1 C
6 O7 e5 ]. D1 V: R* E
8 ~: H9 t$ J) r 将以上代码以test2.asp名存盘。
, f% s _- e: U& T/ h8 g
4 R/ ^1 ]5 r- F9 m( ]1 L9 K7 ` (4)用SRCENC加密test2.asp. ^$ V% R/ R- X5 G
5 F( N6 Z# C1 @& g# E 用SRCENC加密test2.asp,然后把它发布到服务器上,这样别人即使得到该文件、破解了SRCENC加密,也无法看到原代码,因为原代码在test2.asp中是密文(Hu=”c2V0IHJzPXNlcnZlc...),所以ASP代码就被保护起来了!
. G( U7 Q! f2 Z
% g4 v" Q6 y& I 二、加密过的asp程序如何解密?0 m9 ^% k; D7 [& n0 ~+ b
P! v" U6 e3 R$ V) x
如何对加密过的asp程序解密呢?首先我们要告诉大家,用组件法加密的asp程序是无法解密的,而screnc加密过的程序则可以解密,方法是:使用解密软件(ZWDECODE.EXE)。
5 h- {6 \( W5 Z# @. T; H3 A
0 R( G: s! B( t) a% e ZWDECODE.EXE(下载地址http://www.mydown.com/softdown/45/45183.html)可以对MS Script Encode加密的ASP文件进行解密,还原出源代码。
4 ]$ f6 {6 L7 a* D z
, D- d2 i' |' }9 o" R6 h (1)解密方法
9 @: o8 @, P4 g) ^" _ y1 B8 F' @8 I3 P6 [$ @& t
单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可恢复原代码:) L: \1 G1 b& m r" r
7 j/ j* q( G8 d" _0 J
ZWDECODE <已加密asp文件名>4 n6 i! Y/ M1 l9 h+ v
. D& R7 }& k0 J2 g& D5 V; L: v4 Z
其中<已加密asp文件名>必需输入,该文件名可带目录路径;也必需输入,这是要生成的输出文件名,也可以带路径信息。+ t+ X. k$ K# p
. } Q$ h0 W+ B# v3 z (2)举例6 c! _8 P9 c, i. ]
( c$ A. x5 \& W. u 例如F:\22\lacl.asp曾被screnc加密处理过,现在要恢复其中的源代码,你可以在MS-DOS中输入以下命令:
& v+ A4 j8 K& J9 y! B& \3 y
8 L! l$ |+ P& M" ]) X ZWDECODE F:\22\lacl.asp d:\ulacl.asp
6 \3 s6 L! d; e! v! L: |- D. T) m' k. g/ L& X' i& ]' {) c
执行完毕,在D盘上就会生成一个ulacl.asp文件,打开该文件,你就能看到源代码了! * k+ g( ? z" r6 p
|
|
|