|
ASP程序加密解密方法全面解析
# ^8 K$ |1 \: V2 }6 ~9 K) u4 E2 _2007-08-18 16:41
3 J* y& `. ^* G# G6 P2 u 目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法…… $ J1 b; X! O1 ^4 O0 v
6 r# q1 {* e; l; D+ p' D9 @# Q
如今,用ASP技术构建的网站随处可见。由于ASP脚本是在服务器上解释执行的(无法编译),因此你辛苦开发出来的ASP代码,很容易被人拷去任意修改,如何保护ASP源代码呢?这是每个ASP站长都会遇到的难题,网上求解这类问题的帖子非常多,下面我们就来谈谈ASP程序的加密方法。& _7 D% C8 N4 O0 F
" X6 E4 V& l2 R& A( ?% T
一、如何加密ASP程序?
& L* H S$ Y1 r; @! g1 j
& v. f k6 p6 K5 i 目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法。
, ?$ K0 ^8 x# {% x8 R+ s' E8 @2 A3 }
1、使用微软的MS Script Encode进行加密1 ]8 g. q: l C. ?
2 E5 D1 i9 ]* ^, [, e4 ^ _& q
微软提供了脚本编码器MS Script Encode(下载地址http://www.itgene.cn/itgene/download/download.aspID=232),可以对ASP程序进行加密。这是一个简单的命令行工具,其执行文件是SRCENC.EXE,需要在DOS下运行。它只加密页面中嵌入的脚本代码,把网页中之间的ASP代码转换成不可读的乱码,其他部分则保持原样不变。加密后的程序,必须使用Internet Explorer 5.0以上版本才能正常浏览。( ^4 Z$ C, M: X0 R) M, \
; s. l9 D* T8 J+ l
用SRCENC加密之后,文件中被加密过的部分将变成只读类型,假如你修改了加密部分(哪怕只改动一个字),就会导致整个文件不能使用。对于 VBScript,加密后在源文件的第一行会显示:<SCRIPT LANGUAGE="VBScript.Encode">;而JScript(或 JavaScript)则会显示:<SCRIPT LANGUAGE="JScript.Encode">
% c" r+ j( k7 G4 z& Y: D9 ~. f1 C9 D" ?; `) w8 Q4 ^
(1)加密方法 u" ]7 T6 ^- E6 R$ Q# r
+ m n) s3 p, C0 c& R# l. y 单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可对某个asp文件加密:+ N* u* d- X* o! [6 S
. a" d( N7 M9 k' \
SRCENC [switches] <要加密asp文件名> <加密后的文件名>! i( k4 P1 B+ \4 }# c3 n; e8 x# j
, k( W7 @3 y; P% T& C: P+ T1 \7 B
其中[switches]项目可以选以下5个参数
# M7 G8 S; M) o7 L1 D) x3 g8 b
% H0 Y; R3 z8 X8 _% L$ E3 J [switches] 含义 举例
5 h( l% |0 P* z, x
+ d6 C# c, V: B /s 可选。命令中带了该参数,加密过程中屏幕上就不会有输出。 screnc /s lacl.sct ulacl.sct; ?, }/ E2 A+ ~& A
1 M0 m+ X2 g" i" t' _2 d6 L$ s' y 对当前目录中的脚本小程序lacl.sct加密,加密过程中屏幕不显示任何信息
3 E: w! ^6 C: @8 n
1 C3 w; I+ V. O) J6 x) D /f 可选。指定输出文件是否覆盖同名输入文件。忽略,将不执行覆盖。 screnc /f lacl.asp* }0 C/ }9 J& S
) b, C) e% z2 F( Y Q" m0 J' G 对文件 lacl.asp加密,并用编码后的同名文件覆盖原文件& L: F, Z$ K, A" ]4 h8 K
+ z- Z4 f4 d2 A: A' [6 ^ /xl 可选。是否在.asp文件的顶部添加@Language指令。忽略,将添加。
# B) | I" p5 N0 Z, v( n; o& |6 b- A3 _
/l defLanguage 可选。指定Script Encoder加密中选择的缺省脚本语言。文件中不包含这种脚本语言特性的脚本将被Script Encoder 忽略。4 K1 ?/ J" W4 o1 _; K
+ X5 u l% `6 v0 V6 N
对于HTML文件,JScript为内置缺省脚本语言;对于ASP文件,VBScript为缺省脚本语言;对于扩展名为.vbs或.js的文件,Script Encoder也有自适应能力。 screnc /l vbscript lacl.htm ulacl.htm- V9 E. ]( e. Z5 i
1 `$ w7 B5 u" _: i$ ? 对文件 lacl.htm加密,并生成输出文件 ulacl.htm,确保没有指定语言属性的脚本块使用 VBScript$ V4 y/ K6 |. z3 M I& i8 d- @" B
! A2 q! W& S; @0 C D4 A /e defExtension 可选。指定待加密文件的文件扩展名。缺省状态下,Script Encoder能识别asa,asp,cdx,htm,html,js,sct和vbs文件。 screnc /e asp 11\*.* f:\labxw-jm9 X7 Y7 c( |, r
6 C% k3 U$ r7 B' Y$ d3 M4 A s
对11目录中的所有.ASP 文件进行加密,并把编码后的输出文件放在f:\labxw-jm目录中
4 k3 s- f! ~3 Q9 ~2 O. S: _0 R4 m4 }/ \- J' i
(2)操作举例1 {6 s0 \" E, c4 Q
+ R+ ~# v) `% S5 x3 O3 n. T+ z
例如要加密当前目录中的lacl.asp文件,生成加密文件ulacl.asp,则在DOS下输入命令:
1 q. T, t9 A2 @1 Z' w* F! T5 U0 C
/ q* k; w. m# D4 l) f screnc lacl.asp ulacl.asp
/ k; F U/ R: ^& i9 [+ ]) Y8 i5 M6 d5 N" V$ p1 A
对当前目录中的所有 .ASP 文件进行加密,并把编码后的输出文件放在f:\labxw中,则使用命令:6 l, a6 {. _1 H* h q% S& B/ w
( b* @; ], J; Q; |0 r: A3 e# O
screnc *.asp f:\labxw
( o: H1 M1 l* W) S0 b/ f, ^& ^
+ e7 u6 N8 p# o- p 2、使用组件加密asp/ ]! f F u. _: O7 q
; C4 @/ m( O. B/ R5 n
以上被screnc加密过的程序,是可以解密的(解密方法下文有介绍),如果你想彻底保护自己的asp代码,可以通过开发activex dll组件的方法进行保护。
# v+ B& M" X' z+ f) ~' M' p5 C t3 u* z9 K: Y9 f
Dll文件是被编译过的机器代码,如果没有源项目文件,是不可能被反编译的,所以组件加密这种方法最安全,也不可能被破解。下面我们来举例说明操作过程,例如你要保护以下asp代码:
& H0 f7 @, V6 q* }% C
' j/ {( z! `: g3 n+ L set rs=server.createobject("adodb.recordset")
' w1 l5 Y) ]& c; X W" o sql="select * from gq where xs=1 order by date asc"
" K6 @" C" M+ N. O" T+ U! j rs.open sql,conn,1,1
2 N! y2 c8 k5 E. S' y: ^+ i! C9 a% U% l if rs.eof and rs.bof then 6 {2 r3 y: L/ \; ?. }( X
response.write"<A HREF=new0.asp?lbid=gqx ><%= gqx %></A>"
6 R& H( {$ S+ @/ j2 w, T& T+ Y else / x( u! ]5 J) S1 y
Response.Write "" 9 Q( {, F( Q# z- F
end if 7 V: X8 m8 |# z8 Z2 J1 o; _
set rs=nothing + V+ X# R, A0 b) F% u9 i# y" P6 _, _
conn.close 2 y7 y- Q& d) p/ |: E* f7 Z2 w
set conn=nothing # N0 C" n- q \, D2 f3 o1 N
. v: ]; u5 E& L: a+ y( \) @
可以把它们改写成VB组件,然后在ASP文件中调用组件即可。操作步骤如下:- i. C7 O8 \4 w1 i) y$ N3 z
) n: Z5 c8 m5 l# j (1)新建一个vb6的activex dll项目
0 ]' ]: ]. \8 q( _5 V* @$ r/ e% D, p
在属性窗口中,命名你的库模块和项目文件(例如项目名lacl,模块名disp),以后在asp文件中,调用的对象名将为lacl_disp
. |, d+ V9 a: e
, v' I, r; E, d 选择vb6中的项目菜单中的references ,选中microsoft activex data objects 2.0 library4 k. A/ V, L& T3 a* p
' R4 ?6 d' L7 u* R' ~4 V3 b+ V (2)编写VB组件
- ?0 z' y2 {& \6 R% z( } J
- o7 N6 {7 u# I* o; h( [ 接下来把<欲保护的asp代码>改写成VB组件,代码如下:. q5 @4 P* s6 r6 a+ F: p
7 _; I8 E( i: {
public function html_combo(disp_table as string) as string . j$ W4 @5 V6 F6 Z! X6 C! N
dim outstring as string / H" r }8 C2 z( S) z
dim conn as adodb.connection v( m6 F( {& q6 x* J
dim rst as adodb.recordset
) v7 d3 j# {3 g; S { dim sqlstring as string * E1 E9 q) Y+ F" V# Z4 }
set conn = createobject("adodb.connection") - ` }4 W* }; O
set rst = createobject("adodb.recordset") 5 }% r+ s; w6 B+ r- v
sqlstring = "select * from " & disp_table & " where xs=1 order by date asc" 4 G+ ^/ S7 H7 d3 A) T) l
'以上是在VB中打开数据库操作,数据库中的表名、字段名,你可以根据自己的需要修改 7 M3 k' _% s4 j& s+ h
conn.open "dsn=sumnet" - w8 A. e2 z3 j, C k
rst.open sqlstring, conn, 3, 3
1 Y4 C( B) ]7 R* {% Z" h P if rst.eof and rst.bof then $ ?/ o. {" ~7 {( D
outstring = "还没有这类单位信息"
, v0 ~+ e/ w& n; ?9 [( g else 9 g6 F+ Q: _9 w% P6 Q
rst.movefirst
4 j9 c' ]2 A8 L3 Y. ]. O outstring = "<A HREF=new0.asp?lbid="&request("lbid") & "></A>"
( R: M) C& x! ?6 a end if : {, }8 l; {1 l7 O! R) [6 f
html_combo = outstring
+ x: d! V Y# ~6 F# z rst.close
+ ~) a0 V! A6 J) ?4 K* l conn.close ) ^, @- ~6 L. J# t
end function
8 R9 X3 _- g) d3 ^" w
- B# V! [# @9 _1 |9 b1 w4 c9 Z 写好以上VB代码后,保存项目并开始编译。
9 e9 t6 S. u/ x. U d3 o8 C; w6 g
I- C3 N5 y2 A: C$ q; Z (3)生成安装文件
# z: N, u1 I, a) C% M K/ [( h; X8 b! v- ]7 u/ @+ ?
打开visual studio 6中附带的package deployment wizard程序,选择刚才建立的activex项目文件lacl;选择package,选择要打包的脚本或使用默认脚本,选择标准安装,为生成的安装文件选择一个存放目录,选择single cab. 其他均默认;然后单击下一步,安装文件就自动生成了!6 U; l L& m) I+ l' L* w- ~
5 v* L4 L7 R# _8 [9 v; h (4)在IIS服务器上安装组件8 w4 x- c( \) a4 _; l8 X
- X, J0 U( ]$ o* K( m5 _ 在IIS服务器上运行这个安装文件,把组件安装到服务器上。* @3 G7 [' A, y) Q& q
7 b, J6 D7 m% T% R6 X* o) s7 y% _
(5)在网页中调用组件
- y: c2 _) K4 Z3 P2 E' g; N- a. _/ S7 y% X+ ~/ I6 i6 Y+ @5 c! K0 k4 C
以后在ASP文件中,通过调用该组件完成原来的功能。在网页中调用你制作的组件,方法如下:
p" v5 K( O9 P: N
7 K: G4 v$ g1 ~9 K3 |1 }8 Q3 j7 O <%@ language="vbscript" %> 2 A6 x4 G, R; G" J
<%
7 ~7 ]& W2 [' g5 h8 i, A( f: ~ set diaoyong = server.createobject("lacl_disp.disp")
- J! G- U* K+ Z, |: g %> 3 s6 c: L0 E& a ~
<html> ; \ z7 u# v/ A& X4 ?% `
<body> 6 a/ e! U9 p. B, t r; q
<%= diaoyong.html_combo("gq")%>
' I0 e& L- D9 K7 J: U5 }( C. C <br> , y0 S( P$ x- K6 }6 x# e
</body> , Y. C. S# ^# v5 U$ `
</html>
3 H) f7 L# p4 L) _7 y% w- k+ }! x
+ o/ C* E: @3 m% W2 e% H! k) q* |0 J/ d& c' I
你看,现在Asp文件中的内容只是组件的调用(与以前完全不同),别人即使得到该文件,也无法编辑修改源代码,因为代码都被封装在VB组件中了,对于组件中的代码,外人是无法看到、也不能反编译的!
& F* w. z% k' n- X1 o* u! f: M# V9 g: p$ g+ L7 S
3、自己编写加密程序" h0 X6 Q& m& \4 |3 C( _. Z
1 Y- j& R- [! A' P3 [8 B 组件加密方法虽然不可破解,但是要求你熟悉VB编程,需要把ASP代码改写成VB组件,工作量很大,所以建议大家自己编程来保护asp代码,其基本思路是:写一个加密函数base64Encode和解密函数base64Decode,先用加密函数处理<要保护的asp代码>,得到对应的密文hu;然后再用execute(base64Decode(hu))替换<欲保护的asp代码>。
6 p* t) U+ N& i3 S8 N) m% c
1 e* V1 q% e8 j 例如我们要保护上面那段asp代码,可以这样操作:" p, }0 J: r7 v
* c7 I" h1 U3 Q5 v& q (1)用WORD处理<要保护的ASP代码>) d) y& K9 r& R M% l( M& z
k3 d) `( n. Q* H/ ~, M) h
将<要保护的ASP代码>拷到WORD中;在WORD中,把代码里的段落标记(回车换行)全部替换成“水”这个汉字,方法是:点击“编辑”/替换,光标移到“查找内容”栏,点“高级”/特殊字符,选择“段落标记”;光标移到“替换为”栏,输入“水”,最后点“全部替换”。同法,把代码中的单引号也全部替换成“加”这个汉字。
% w# y, ]7 J" B* h" n2 E
7 \* k! M, F9 s$ n2 i- P9 W (2)编写、运行加密程序# O6 j4 o; Q/ V0 ?1 {0 |2 Z
; p) k# T# {4 ~ 在FrontPage中编写加密程序,该程序中有初始化函数initCodecs、加密函数base64Encode(代码如下),把WORD处理后的代码,copy粘贴在inp = ""这句中,最后以test1.asp名存盘;在IE中输入http://127.0.0.1/test1.asp本地运行该文件;屏幕上会显示一大段乱码(例如c2V0IHJzPXNlcnZlci5jcmVhd...),这就是《要保护的asp代码》对应的密文!
, _; ?9 H |" I- y$ ~
' u9 q0 y. c+ {8 _ OPTION EXPLICIT
, R+ g) U% i4 h0 w+ q0 r& r const BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" # F, b; j( @4 Q, d$ p& J3 |
dim newline / G% |: C8 T1 Q* j m0 F
dim Base64EncMap(63)
, W8 H+ z0 U" I. c& _ a dim Base64DecMap(127)
2 Q$ N$ s' X- I+ K6 E dim inp,hu,encode $ k u0 `, e; U K+ ^
call initCodecs '初始化 ! _% Q/ }2 E# J, Y7 T9 M0 \" M
inp = "<WORD处理后的asp代码>" '将要保护的asp代码用WORD处理,然后填在此处
7 y. ^ m1 ^$ {, ^ hu= base64Encode(inp) '调用函数base64Encode进行加密,得到密文hu 4 i. g8 i; G5 o3 g3 y
Response.Write(hu) '显示密文
- L- O0 y+ u8 Y- d# t PUBLIC SUB initCodecs() '初始化函数initCodecs : b& p. `. d3 p& j
newline = "<P>" & chr(13) & chr(10)
# n4 H, |& i" b# h8 C4 I dim max, idx
& o4 {7 B! {# s5 Q) [ max = len(BASE_64_MAP_INIT)
# ~ b& q, l- a( c% J! J for idx = 0 to max - 1 2 V0 K+ t+ B% Q$ z% S- u3 B* s
Base64EncMap(idx) = mid(BASE_64_MAP_INIT, idx + 1, 1) - O/ d" a$ K6 l# U, [2 u0 m
next / I! G. _) E( }7 m5 ?& x) c2 x- ?
for idx = 0 to max - 1
8 A# ?7 q( O# [) T ^; h7 s Base64DecMap(ASC(Base64EncMap(idx))) = idx
- d' m) o- F3 W# e! o# `" z8 L next . ], \$ c3 j* j
END SUB 7 l9 z6 `& d" t3 l2 v/ [# i) {
PUBLIC FUNCTION base64Encode(plain) '加密函数base64Encode ! h/ d1 N' S) e/ e, I/ P2 w7 |
if len(plain) = 0 then % b; o' G/ V I* j: O# Y8 A
base64Encode = ""
5 g! I5 ]4 Y# b6 S exit function
. v7 r/ D( O' ~2 Y- v/ `0 S+ T end if
/ H+ `( ?0 p; I dim ret, ndx, by3, first, second, third T3 X* p: R; I; b3 N
by3 = (len(plain) \ 3) * 3 - T- F. t, p) S5 ]- x* ]/ z; T- \
ndx = 1
7 N$ e' G1 J4 G. y+ k( |1 c do while ndx <= by3 4 w/ E4 X+ m, P' }7 q9 o- i* `
first = asc(mid(plain, ndx+0, 1)) / ^2 y2 m7 U+ R
second = asc(mid(plain, ndx+1, 1)) ' r1 C8 A4 j! v
third = asc(mid(plain, ndx+2, 1)) 2 r3 D$ _2 \8 Z N
ret = ret & Base64EncMap( (first \ 4) AND 63 )
* b4 C5 ^8 q1 p/ p: P. Y" ~/ t ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
; h6 {9 q3 Y8 H. [* g ret = ret & Base64EncMap( ((second * 4) AND 60) + ((third \ 64) AND 3 ) ) 3 e) v! A6 U# c) h
ret = ret & Base64EncMap( third AND 63)
. |. l& e$ |9 Y0 I$ \ z ndx = ndx + 3
3 q& c6 l- G$ }& L loop
5 L1 B1 ~" ]2 ~% _ if by3 < len(plain) then
9 h" Q0 s- M' T- A9 y first = asc(mid(plain, ndx+0, 1))
. e9 T( ]: l! }3 j( n1 J ret = ret & Base64EncMap( (first \ 4) AND 63 )
3 M1 H) |$ q, \ if (len(plain) MOD 3 ) = 2 then
3 T- a8 p6 w7 v8 N& s$ F second = asc(mid(plain, ndx+1, 1))
$ g& j7 C! P- r8 B1 R/ h ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
" e( k% v+ L) E u* b ret = ret & Base64EncMap( ((second * 4) AND 60) ) ; O" R3 A; v! j1 r) o! A$ P; R
else
# U# [3 `3 G' L9 c& M8 ] ret = ret & Base64EncMap( (first * 16) AND 48)
9 `0 {1 V: g+ a4 G ret = ret '& "="
! w) n& G2 L% n6 E; C; V end if - s h1 H8 N1 J0 b2 E8 x, @
ret = ret '& "="
0 }' Z2 t3 c% n5 h |4 S( @! N end if
9 Q- |! i$ u4 ]0 \ base64Encode = ret ( k @% M$ p# `. u% `% h6 l0 m5 ^
END FUNCTION 3 {( l1 Q" g& [6 i
* ?* d+ C+ h7 }; ^2 K! ^7 H
(3)重新改写要保护的asp文件
$ R# Z. e, L& X/ r4 D1 K) ]# U1 q1 r. @* ~
改写原来的asp文件,在文件中增加UnEncode 和base64Decode函数,全部代码如下:$ b0 g d" U4 ^3 u
; _& u3 m7 I, t- {$ S+ I+ f6 y6 u
Dim Hu,Hu2 " k: `7 D5 ^, f8 ?. l
'拷贝“欲保护asp代码”的密文 将之存放到Hu变量中 ( M$ F+ e0 I& |( @ I: G# Q' e
Hu=”c2V0IHJzPXNlcnZlci5jcmVhdGVvYmplY3Qo12Fkb2RiLnJlY29yZHNldOMpICAgICDuc3FsPeNzZWxlY3QgKiBmcm9tIGdxICB3aGVyZSB4cz0xIG9yZGVyIGJ5IGRhdGUgYXNj1yAgICAgsnJzLm9wZW4gc3FsLGNvbm4sMSwxICAgICDuaWYgcnMuZW9mIGFuZCBycy5ib2YgdGhlbiDucmVzcG9uc2Uud3JpdGUTvSD7INAg5iAgILUgvyAFILITsmVsc2UgsiAgICAgUmVzcG9uc2UuV3JpdGUg1zxBIEhSRUY9bmV3MC5hc3A/bGJpZD0TJnJlcXVlc3Qo12xiaWQTKSAmIOM+PC9BPuPuZW5kIGlmICAgIL5zZXQgcnM9bm90aGluZyAgICAgICAgsmNvbm4uY2xvc2UgICAgICDuc2V0IGNvbm49bm90aGluZyAgIL4” 0 C# ^& L6 ]; x1 I
Hu2= base64Decode(hu) '还原要保护的ASP代码 : j, b9 @7 Z& |4 g
execute(UnEncode(Hu2)) '还原单引号、回车换行,并执行原代码 6 y8 n; q- t7 E( p3 Z2 I/ \2 B% P! v
’解密函数base64Decode
4 R# V, P$ l$ d) E v( j' N FUNCTION base64Decode(scrambled)
* \( v& c3 U4 ?% Z, { if len(scrambled) = 0 then
8 }1 A3 w: V5 g' i& C base64Decode = "" 7 h2 s( [7 k+ ]6 W1 g
exit function ; Q; ~- w9 r; h; b. m
end if
$ \7 {6 A" y" V: K, i* K dim realLen
8 c. e- ?& A; G2 V0 j' ~ realLen = len(scrambled) ; j; |: l: W9 L) J: P; E% M
do while mid(scrambled, realLen, 1) = "="
+ b( @0 e& g! S4 o* T N+ _# O realLen = realLen - 1
5 }# v0 Y2 j7 D+ f loop
$ d3 R% B, ]' C4 v dim ret, ndx, by4, first, second, third, fourth
6 w- T1 d: g3 {) M+ q ret = "" : y3 H/ v( F6 C' x
by4 = (realLen \ 4) * 4 1 k6 \) Q1 d5 O0 E) m, M# t
ndx = 1
2 O" G+ M) R; p; E! l9 k do while ndx <= by4 $ A5 p6 d- h3 k
first = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
% H5 s- k7 c5 D) G( e- S4 q second = Base64DecMap(asc(mid(scrambled, ndx+1, 1))) # I) b, p* g4 K) }# q
third = Base64DecMap(asc(mid(scrambled, ndx+2, 1)))
7 [2 O. K* Y+ W fourth = Base64DecMap(asc(mid(scrambled, ndx+3, 1)))
$ P" F& l7 n* V, z* h ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3))
4 ]) e) f8 v/ ~% h ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15))
( W- `5 d# r+ n u ret = ret & chr( ((third * 64) AND 255) + (fourth AND 63))
9 }' o4 A7 @" F; n1 Z ndx = ndx + 4
2 {# P+ |" G: t. O" ?3 G loop
+ Q# F' t5 R' e& \$ ]( f, L if ndx < realLen then
& ]! \) W3 M- `# \ first = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
$ A m* h# W- P9 l second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
: n. i t/ F9 _# N7 R7 O6 `) ? ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3))
% l6 q* b, @* s if realLen MOD 4 = 3 then
$ Y$ R+ q* Y. M" Y" C third = Base64DecMap(asc(mid(scrambled,ndx+2,1)))
1 [1 \- e4 ^3 L1 x" [. }! F6 ~ ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15))
y6 |3 S+ T" u- O' d end if
1 B) T1 M3 ^% y* t: ~1 T. s& | end if 4 j/ M) a+ l0 B7 a: P
base64Decode = ret
) O5 ]% H6 H1 c END FUNCTION + v1 b( e% ?0 l( ^ m$ n3 \2 Q2 _
'还原单引号、回车换行函数UnEncode 8 e* P3 m. T* }* ]) ^% R
function UnEncode(cc) 1 z& ~$ _4 g. f
for i = 1 to len(cc) ! @8 r; ]2 F9 y4 z; ~1 w! ?
if mid(cc,i,1)<> "水" then 5 l( h1 {/ M$ c0 l& q% ~3 [* [
if mid(cc,i,1)="加" then
0 @" u. c/ W1 [: @ temp = """" & temp , v0 S9 k+ Q5 p5 Z P6 ^9 [
else ' c9 j k7 q) n* N, [: ^
temp = Mid(cc, i, 1) + temp
( E5 ~6 f/ `4 o" C! x+ F& e6 R end if
" Q- R* t% ~$ I else J* S) v: h9 `2 S8 ^! @- m
temp=newline&temp
" A! ?8 h" |) ^# G6 U+ l! o* x% B0 M5 _ end if
+ X3 C; N Y- V; J) a next
9 E/ d' \+ J+ K7 N1 p UnEncode=temp ' s% Y! c1 X' y
end function
8 K. C# u) j3 O$ u0 D7 n* G+ O# J
" S' x2 K2 @; t U! ^# F
( G/ P8 v; l' K/ _' k1 ` 将以上代码以test2.asp名存盘。$ n; _( R7 }& @: k
- R. ?) o6 w. m. f7 p, [ ?
(4)用SRCENC加密test2.asp* u# E- f. {2 m7 y* b) Z/ G
3 f; p! u* Y5 W4 w, t2 ^- | 用SRCENC加密test2.asp,然后把它发布到服务器上,这样别人即使得到该文件、破解了SRCENC加密,也无法看到原代码,因为原代码在test2.asp中是密文(Hu=”c2V0IHJzPXNlcnZlc...),所以ASP代码就被保护起来了!4 ~( f7 L9 F. h2 T% ]6 I5 a; |
; j6 \) \( h8 y; J' d6 j% ]0 h
二、加密过的asp程序如何解密?
P# H. n T+ n' d
0 g0 {8 m7 { @; H: r$ [ 如何对加密过的asp程序解密呢?首先我们要告诉大家,用组件法加密的asp程序是无法解密的,而screnc加密过的程序则可以解密,方法是:使用解密软件(ZWDECODE.EXE)。
k# P2 { t" z4 T. y
& y* i. ^, E. }6 @$ f ZWDECODE.EXE(下载地址http://www.mydown.com/softdown/45/45183.html)可以对MS Script Encode加密的ASP文件进行解密,还原出源代码。! q8 d' a% e& Y& {9 V
( D# R# |3 g% ]7 a! L
(1)解密方法7 c3 p8 Q. D9 z, r# {; ?
4 n5 K3 Z8 g, K' T0 ]7 ^ 单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可恢复原代码:
# O$ z9 d7 R5 \
z T0 I; P& Z7 Q9 U ZWDECODE <已加密asp文件名>
+ ^ T1 `, X+ [& G
. M. D- q. p1 v. P$ y 其中<已加密asp文件名>必需输入,该文件名可带目录路径;也必需输入,这是要生成的输出文件名,也可以带路径信息。
% \" V- b. y% w" G- M. O. c4 x9 M! h. x& `& S" Z+ b
(2)举例
# E6 y: I' \# b6 y4 X+ o4 |2 B" F) R
例如F:\22\lacl.asp曾被screnc加密处理过,现在要恢复其中的源代码,你可以在MS-DOS中输入以下命令:
0 q: n, @% M' E0 f. ]7 K; \ A5 @ M4 w4 b
ZWDECODE F:\22\lacl.asp d:\ulacl.asp
+ c2 u+ [( i$ C* {% W
' `+ U+ [5 K- b4 ] 执行完毕,在D盘上就会生成一个ulacl.asp文件,打开该文件,你就能看到源代码了!
9 u' f& o0 i3 |* {9 b" k |
|
|