|
|
ASP程序加密解密方法全面解析7 m( A% U! u; x% K( [
2007-08-18 16:417 A5 N: O; [) Y0 i$ `
目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法……
: ~+ Z8 Q# ~2 z; h F9 B
7 T9 O, r0 K8 q: A2 }/ d 如今,用ASP技术构建的网站随处可见。由于ASP脚本是在服务器上解释执行的(无法编译),因此你辛苦开发出来的ASP代码,很容易被人拷去任意修改,如何保护ASP源代码呢?这是每个ASP站长都会遇到的难题,网上求解这类问题的帖子非常多,下面我们就来谈谈ASP程序的加密方法。
! W: h( B7 h% X/ C9 T
0 s: K T- k) p 一、如何加密ASP程序?
/ K6 ]0 v/ N8 S! k! E7 {, d1 B$ V5 v; K7 x
目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法。4 b* l8 h' I8 B" E# S" F
* @4 D8 ^/ ?- U& f! d+ A 1、使用微软的MS Script Encode进行加密
C3 V# m! I+ c: V' C9 J9 ?! e* {
4 I+ z0 @! r# B% @6 n" T, T 微软提供了脚本编码器MS Script Encode(下载地址http://www.itgene.cn/itgene/download/download.aspID=232),可以对ASP程序进行加密。这是一个简单的命令行工具,其执行文件是SRCENC.EXE,需要在DOS下运行。它只加密页面中嵌入的脚本代码,把网页中之间的ASP代码转换成不可读的乱码,其他部分则保持原样不变。加密后的程序,必须使用Internet Explorer 5.0以上版本才能正常浏览。 w# O6 e+ a* W" N- F& X4 U3 ]
$ @' `8 @0 T+ b* Y
用SRCENC加密之后,文件中被加密过的部分将变成只读类型,假如你修改了加密部分(哪怕只改动一个字),就会导致整个文件不能使用。对于 VBScript,加密后在源文件的第一行会显示:<SCRIPT LANGUAGE="VBScript.Encode">;而JScript(或 JavaScript)则会显示:<SCRIPT LANGUAGE="JScript.Encode">; Q! ^! k0 x& @
I" q3 L& Q9 F, v
(1)加密方法
/ G/ q# x# G, O
' i' M4 x8 M3 a$ [. i 单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可对某个asp文件加密:
4 j: X9 ]# d9 g/ {) W, b+ I- V* I) x/ h/ l' `% _
SRCENC [switches] <要加密asp文件名> <加密后的文件名>
0 }9 } N5 e$ H* F" O% z) S6 U' a; ~# K8 Y8 X1 p1 g- W2 M
其中[switches]项目可以选以下5个参数
9 D7 Q8 Q% @7 v! b7 E+ T! @$ K# }' `0 C# Q$ a1 I- {
[switches] 含义 举例
@5 q; j: ^9 C% o Z2 \- D
% u# @5 U- R/ @* x! v U /s 可选。命令中带了该参数,加密过程中屏幕上就不会有输出。 screnc /s lacl.sct ulacl.sct3 Z5 _. e% D/ [. k C: Z8 a: }
, E) M$ W" a( d X1 p3 M 对当前目录中的脚本小程序lacl.sct加密,加密过程中屏幕不显示任何信息! }- j/ p3 M o# \1 |7 j3 t/ n
0 m* ]5 X0 ~' ~- E) R /f 可选。指定输出文件是否覆盖同名输入文件。忽略,将不执行覆盖。 screnc /f lacl.asp
1 `0 H$ M2 E) r/ [
4 X! L$ |- ^( M 对文件 lacl.asp加密,并用编码后的同名文件覆盖原文件! F) W, B& J8 N- G6 Q
: \& P4 e6 o& P( J4 h% g& s /xl 可选。是否在.asp文件的顶部添加@Language指令。忽略,将添加。1 W9 S- u) f* a
& o- p" _0 I' x2 g /l defLanguage 可选。指定Script Encoder加密中选择的缺省脚本语言。文件中不包含这种脚本语言特性的脚本将被Script Encoder 忽略。% h+ |2 E' z: n" x8 W
6 j, k7 e: d3 x7 {7 v, F- V8 {
对于HTML文件,JScript为内置缺省脚本语言;对于ASP文件,VBScript为缺省脚本语言;对于扩展名为.vbs或.js的文件,Script Encoder也有自适应能力。 screnc /l vbscript lacl.htm ulacl.htm( O$ Q4 {$ F# a2 q
% H; z; w3 S6 j p6 e+ v
对文件 lacl.htm加密,并生成输出文件 ulacl.htm,确保没有指定语言属性的脚本块使用 VBScript
; R3 B* u7 i- B( i0 ?7 u- b3 O
$ q& B- q% y6 D A) [% n /e defExtension 可选。指定待加密文件的文件扩展名。缺省状态下,Script Encoder能识别asa,asp,cdx,htm,html,js,sct和vbs文件。 screnc /e asp 11\*.* f:\labxw-jm- k% I* V0 F a. n& W7 j4 ]
) y4 T4 e7 P4 e! F0 s
对11目录中的所有.ASP 文件进行加密,并把编码后的输出文件放在f:\labxw-jm目录中 B6 o, z) k/ f; f( k9 q1 A/ z. O. d
6 i& v3 q2 n- P- }
(2)操作举例1 Q' Y8 f' Y# Z+ ]
7 y1 ?- }9 k; ~# A 例如要加密当前目录中的lacl.asp文件,生成加密文件ulacl.asp,则在DOS下输入命令:
+ P/ D3 \+ M3 S
2 d, A) l2 X' f2 J' P) V% @ screnc lacl.asp ulacl.asp
7 Y' K0 q1 l' M3 c+ ~, ]8 X$ B3 {8 L: c, K5 L
对当前目录中的所有 .ASP 文件进行加密,并把编码后的输出文件放在f:\labxw中,则使用命令:, F5 I9 y. i/ x' X' E
. |/ G# f3 f$ p0 u5 N4 g4 ?6 q' u
screnc *.asp f:\labxw
% t7 N+ L0 H5 _' |4 ?9 u: M& Z
* J W" W q+ Z0 ? 2、使用组件加密asp
9 D3 X- [9 r" O( h+ `8 y: d5 {# S) `, n3 {) U5 ]- Z
以上被screnc加密过的程序,是可以解密的(解密方法下文有介绍),如果你想彻底保护自己的asp代码,可以通过开发activex dll组件的方法进行保护。
0 z0 o, m4 O" v F4 q' @' w0 w
5 P" I( f( u' l: e$ X8 g Dll文件是被编译过的机器代码,如果没有源项目文件,是不可能被反编译的,所以组件加密这种方法最安全,也不可能被破解。下面我们来举例说明操作过程,例如你要保护以下asp代码:- t2 M/ L4 Q1 L
2 @9 C7 Q6 M( U
set rs=server.createobject("adodb.recordset") 9 a' w6 l2 S; g2 U
sql="select * from gq where xs=1 order by date asc"
7 v, u2 \ G. k3 y" U rs.open sql,conn,1,1
( T A1 Y1 X, ^7 ^8 Y9 r g if rs.eof and rs.bof then
e$ K. A( \ p' }* U; X response.write"<A HREF=new0.asp?lbid=gqx ><%= gqx %></A>"
0 p' x5 K9 N6 ^. Y) ^% c) j5 q else 7 p8 X- ]5 [. f; l, Y
Response.Write "" * _0 [1 ~) o) R& _: |1 `
end if
2 ~/ h. ~9 @& l9 \* b/ ^7 U set rs=nothing 9 m) F& \) @8 ?" k
conn.close 3 ]& K( B) ^4 F4 t$ i) i
set conn=nothing
* q: q% U- }, b; e$ n
5 I0 T: J* D2 q' T6 {8 T 可以把它们改写成VB组件,然后在ASP文件中调用组件即可。操作步骤如下:2 ]- F8 o/ y- A N( A
% g: }6 j4 Z# f+ J8 }- W9 N/ E \7 t (1)新建一个vb6的activex dll项目
* w" Q1 t( @) N, D2 w d* I N9 `% F0 l
在属性窗口中,命名你的库模块和项目文件(例如项目名lacl,模块名disp),以后在asp文件中,调用的对象名将为lacl_disp7 s! P$ Q6 t4 w0 D; L0 ^+ m
9 N4 j& I+ h# |. C! t
选择vb6中的项目菜单中的references ,选中microsoft activex data objects 2.0 library
$ r s( J9 G, e. e
# h) l1 [/ p$ U& T. a6 \ (2)编写VB组件
/ Y0 J, |) D4 ~! s2 d% s! L6 V# s. `$ ?- U
接下来把<欲保护的asp代码>改写成VB组件,代码如下:
6 t6 V& z; X- \! F4 C" J `( C. U* z, V# T6 y
public function html_combo(disp_table as string) as string ) |# t+ W9 m" u/ M W% J, e1 g2 L
dim outstring as string ( X" u) c: b' ]' l
dim conn as adodb.connection
0 l4 n- W6 I. C2 { dim rst as adodb.recordset / Q1 ~0 N2 N; A6 y/ P6 B2 i
dim sqlstring as string
3 p' v: d8 V. o0 F% z7 e# I set conn = createobject("adodb.connection")
' z v: J% a' X9 o" f& ^ set rst = createobject("adodb.recordset") 3 O" y' s) A2 h- _: K3 }5 a& _1 E
sqlstring = "select * from " & disp_table & " where xs=1 order by date asc" % U+ Q8 j* k+ k0 L+ Z4 x! S
'以上是在VB中打开数据库操作,数据库中的表名、字段名,你可以根据自己的需要修改 ! E; U+ O# {- n3 m# g
conn.open "dsn=sumnet" # J" ^8 U& n9 }$ g+ |- k5 j
rst.open sqlstring, conn, 3, 3
; ]+ R3 N3 O! P! a7 N4 L9 e. [2 s: j/ y if rst.eof and rst.bof then : P% ~5 R( t" ]. h, D9 W
outstring = "还没有这类单位信息"
& j/ o8 P- l5 W3 Y( y else
8 Q7 K9 t | S1 z6 g% \ rst.movefirst
0 m* a3 ^7 L& r* B) |/ W$ E outstring = "<A HREF=new0.asp?lbid="&request("lbid") & "></A>"
4 w( t0 v Z& u/ C' e+ \5 j end if
5 T- F8 ~) {! S! f# N9 Q2 n html_combo = outstring 2 [$ A+ a; \( K
rst.close + v4 x8 u$ \# S$ R! {6 ?6 W
conn.close
: C& Q0 K& Y) Y6 J6 m/ R3 H end function / O* t- o0 m; E8 M8 i5 V% n( J
4 s2 }9 y) T* {5 J2 Y$ R 写好以上VB代码后,保存项目并开始编译。
2 Q2 V3 | Y7 M2 ?. |( d; N' U
- | J1 ^1 ^) k1 y# Q/ p (3)生成安装文件8 A- E2 f- Z5 r
; o( x& Q" F6 Z/ C 打开visual studio 6中附带的package deployment wizard程序,选择刚才建立的activex项目文件lacl;选择package,选择要打包的脚本或使用默认脚本,选择标准安装,为生成的安装文件选择一个存放目录,选择single cab. 其他均默认;然后单击下一步,安装文件就自动生成了!
0 w! c1 v# q9 j! p! o
. |8 W% H2 p2 z/ R! g p4 | (4)在IIS服务器上安装组件; Z, P3 v) O) K: U# B) S
1 ]" K) c m: n) b- d
在IIS服务器上运行这个安装文件,把组件安装到服务器上。
2 a, \: V8 L$ k. }% d- H
9 l2 T \7 Z% D' u* M (5)在网页中调用组件
' D" }" N" O. C, f! K2 q8 @7 K' P) L- _5 N" D9 N8 s
以后在ASP文件中,通过调用该组件完成原来的功能。在网页中调用你制作的组件,方法如下:1 Q# z( S/ i R6 R$ c Z# E& E) t
& @0 _7 E$ }+ s <%@ language="vbscript" %> 0 u' a' B/ x) H9 j+ `- _3 _
<%
- |6 J0 j0 Y- i6 W, G5 ]. o0 c$ J set diaoyong = server.createobject("lacl_disp.disp")
6 @! }, Q5 `! @3 g( d: L% w/ y %>
+ p! x* o, h7 k" i" O4 A7 W+ d <html> * }" u, \- o: {7 w6 T1 Y
<body> 5 N+ d# P4 }5 z
<%= diaoyong.html_combo("gq")%>
' F# M/ N& A @1 \' M) O( h9 k <br>
, r4 v0 Z1 F8 g" B3 E, ^0 P </body>
; S3 u0 t" q& O* h </html> 7 Q0 z( ~0 D! f1 w8 Y
( |9 m" a3 A+ G3 W6 d, z' \
5 r/ ]. l5 ?0 Q- r/ I# }. x 你看,现在Asp文件中的内容只是组件的调用(与以前完全不同),别人即使得到该文件,也无法编辑修改源代码,因为代码都被封装在VB组件中了,对于组件中的代码,外人是无法看到、也不能反编译的!& P% ^# f; x8 z5 ^- z& g& V% G
9 f: ?8 A+ Q% d5 O A/ k 3、自己编写加密程序
% \3 _$ S. I! \
. `0 i& h0 e- f, G8 ^# l/ R 组件加密方法虽然不可破解,但是要求你熟悉VB编程,需要把ASP代码改写成VB组件,工作量很大,所以建议大家自己编程来保护asp代码,其基本思路是:写一个加密函数base64Encode和解密函数base64Decode,先用加密函数处理<要保护的asp代码>,得到对应的密文hu;然后再用execute(base64Decode(hu))替换<欲保护的asp代码>。
5 _& Z( L# j" S" f5 A: ]$ D& v: U7 t- ?$ ?" Z
例如我们要保护上面那段asp代码,可以这样操作:* o4 w5 c& Y8 i1 g, C6 g
B* t/ T. K, M: S, S& \
(1)用WORD处理<要保护的ASP代码>
: E2 e7 \& h: W, r$ m. m; i3 j# ~4 i5 W+ _' R. A
将<要保护的ASP代码>拷到WORD中;在WORD中,把代码里的段落标记(回车换行)全部替换成“水”这个汉字,方法是:点击“编辑”/替换,光标移到“查找内容”栏,点“高级”/特殊字符,选择“段落标记”;光标移到“替换为”栏,输入“水”,最后点“全部替换”。同法,把代码中的单引号也全部替换成“加”这个汉字。& j1 B8 I `( `* O8 y0 ~/ I6 n5 c
# v2 Z$ {6 B( X& q; ~
(2)编写、运行加密程序9 c% {4 g J& P' o4 X
! g8 N: ^: ~* N% O1 z7 \ 在FrontPage中编写加密程序,该程序中有初始化函数initCodecs、加密函数base64Encode(代码如下),把WORD处理后的代码,copy粘贴在inp = ""这句中,最后以test1.asp名存盘;在IE中输入http://127.0.0.1/test1.asp本地运行该文件;屏幕上会显示一大段乱码(例如c2V0IHJzPXNlcnZlci5jcmVhd...),这就是《要保护的asp代码》对应的密文!5 ?1 f8 C; V0 ]! @
4 d7 _+ d& F* H OPTION EXPLICIT
) g1 K$ q g, y( [( S& f const BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" $ h( _) b. t: f4 F6 O( {
dim newline
& g8 n W( [* T6 O5 x! J dim Base64EncMap(63) * q/ G3 I/ k( j w3 G
dim Base64DecMap(127)
4 ?" K @ |6 [1 E2 `* r$ B8 m5 |$ O! t8 v dim inp,hu,encode
4 E' t3 ^1 y; z: V, z. ^6 D call initCodecs '初始化 1 r! h- B/ o9 p% A: @, G1 `% Q! \
inp = "<WORD处理后的asp代码>" '将要保护的asp代码用WORD处理,然后填在此处 , X6 U7 l! v) ~3 Q- R* N
hu= base64Encode(inp) '调用函数base64Encode进行加密,得到密文hu Q6 t. e# i; t5 p. }
Response.Write(hu) '显示密文 % {& `1 ^, I% |
PUBLIC SUB initCodecs() '初始化函数initCodecs - ?8 n A- V* t7 b" |
newline = "<P>" & chr(13) & chr(10)
1 ]2 g/ i0 H6 E& y" D0 n dim max, idx
# c. \( P/ g5 f$ }# V7 M6 j: l5 ^ max = len(BASE_64_MAP_INIT) % h. n( P) T/ E0 a: u& L
for idx = 0 to max - 1 6 ~ H1 @: F/ N* t
Base64EncMap(idx) = mid(BASE_64_MAP_INIT, idx + 1, 1)
& \% e6 M2 K: h1 f) w# D5 e next 7 }* c0 U$ E7 _/ R
for idx = 0 to max - 1
/ g/ I4 |4 g* k4 R! e N* { Base64DecMap(ASC(Base64EncMap(idx))) = idx 9 i+ Z' r; c) U! P
next
# V) t2 T& j N. {8 G$ E# e! j7 r END SUB
6 i# O7 i8 }4 H) N: G PUBLIC FUNCTION base64Encode(plain) '加密函数base64Encode
+ Q' n8 Y9 ]/ m; H if len(plain) = 0 then ' H5 P0 x1 y, u: L! a
base64Encode = "" # i ~$ Z& V6 ?6 N. W
exit function
, h6 F& Y7 b" w! l end if 1 R3 S- n. b o, u) Z4 {! M# t
dim ret, ndx, by3, first, second, third , r2 M' V0 c( X! n: y8 n
by3 = (len(plain) \ 3) * 3 1 b" c% Q2 d/ A9 y G* _% H" [
ndx = 1
8 p F+ D) t( z) A do while ndx <= by3 4 y0 J1 e& a- C
first = asc(mid(plain, ndx+0, 1)) 5 {/ g" J' O4 n! H6 s
second = asc(mid(plain, ndx+1, 1))
8 S' A7 w$ i' q% U9 M5 e- Q! X third = asc(mid(plain, ndx+2, 1)) 2 V! e* s d- }0 F3 w/ M
ret = ret & Base64EncMap( (first \ 4) AND 63 ) ' `9 c$ t, Y) |! N6 L; Z" v
ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
. j5 S f8 r9 ? ret = ret & Base64EncMap( ((second * 4) AND 60) + ((third \ 64) AND 3 ) )
- B A* v# B; q, G3 J ret = ret & Base64EncMap( third AND 63)
: G y# d/ O! p' D" X* r ndx = ndx + 3 ; H4 Q4 n5 o% ?
loop
/ O4 `' r- @% Y if by3 < len(plain) then 5 V1 _1 ?( V$ V. x, ~9 z3 A1 l$ Z7 o3 W
first = asc(mid(plain, ndx+0, 1)) 2 `( ~6 p, m% s& x& B
ret = ret & Base64EncMap( (first \ 4) AND 63 ) ( J N* N& t2 u$ U# w
if (len(plain) MOD 3 ) = 2 then 3 P# u6 h4 a8 E; P
second = asc(mid(plain, ndx+1, 1)) ! V* ]% q+ k$ i3 A$ s
ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) ) 7 [! Z* T7 C1 Y( f# r, x& z
ret = ret & Base64EncMap( ((second * 4) AND 60) ) . }0 ?: o3 v/ v4 h- p: ]8 a$ ?
else 9 w3 u* |0 @, j1 Q- I
ret = ret & Base64EncMap( (first * 16) AND 48) " H2 o: e' K Z+ `0 a2 z1 c: o5 [- A
ret = ret '& "=" 1 O$ t+ i' z* [$ p: {$ P
end if
S" _9 x9 r9 k* H ret = ret '& "=" ! }" z/ R$ V8 ^, ^
end if " I7 p; E* [4 s) m2 L2 h
base64Encode = ret 0 Q% [9 C0 ~- R0 M% S* i
END FUNCTION 6 v& s- s& ~, Y$ ~; W" T
0 l+ N! v7 Q% D5 ^ B
(3)重新改写要保护的asp文件
4 \5 K$ b2 N' A2 f' S8 }- Z9 W, n! `8 y
改写原来的asp文件,在文件中增加UnEncode 和base64Decode函数,全部代码如下:
! x/ ^: @% V0 t: a4 v& _1 h3 \5 P
Dim Hu,Hu2
1 D8 R' a9 q: u1 X '拷贝“欲保护asp代码”的密文 将之存放到Hu变量中
# G+ ]. p6 \1 S Hu=”c2V0IHJzPXNlcnZlci5jcmVhdGVvYmplY3Qo12Fkb2RiLnJlY29yZHNldOMpICAgICDuc3FsPeNzZWxlY3QgKiBmcm9tIGdxICB3aGVyZSB4cz0xIG9yZGVyIGJ5IGRhdGUgYXNj1yAgICAgsnJzLm9wZW4gc3FsLGNvbm4sMSwxICAgICDuaWYgcnMuZW9mIGFuZCBycy5ib2YgdGhlbiDucmVzcG9uc2Uud3JpdGUTvSD7INAg5iAgILUgvyAFILITsmVsc2UgsiAgICAgUmVzcG9uc2UuV3JpdGUg1zxBIEhSRUY9bmV3MC5hc3A/bGJpZD0TJnJlcXVlc3Qo12xiaWQTKSAmIOM+PC9BPuPuZW5kIGlmICAgIL5zZXQgcnM9bm90aGluZyAgICAgICAgsmNvbm4uY2xvc2UgICAgICDuc2V0IGNvbm49bm90aGluZyAgIL4” 3 y/ M* h4 v- R; c
Hu2= base64Decode(hu) '还原要保护的ASP代码 : K% w- E# A& z, p* y% v) S& f
execute(UnEncode(Hu2)) '还原单引号、回车换行,并执行原代码
9 v4 R% m( e6 Y# D ’解密函数base64Decode / ~- a4 v% s: e/ K
FUNCTION base64Decode(scrambled) $ u8 o9 M3 N* B" W* m( c8 M/ d
if len(scrambled) = 0 then 1 k9 c7 P# Y1 _! A3 R6 O4 N+ ^7 r
base64Decode = ""
' @9 S j# H }% Y0 a. m8 ] exit function
# P- i' U# Q/ x* I% b" b3 a6 L end if 0 }5 |; K; `5 n: Y. q* A
dim realLen
/ k% {6 M! o# X8 g3 s' \ realLen = len(scrambled) 1 D5 N+ x# n i( h
do while mid(scrambled, realLen, 1) = "="
$ a% ^2 m6 o$ K) Y realLen = realLen - 1 , B# O5 X# ^4 N' P+ `5 I
loop
3 D5 Z8 C+ U1 S" s; i dim ret, ndx, by4, first, second, third, fourth 6 `! N4 M" w8 F
ret = "" . u/ U7 @# x+ s$ _# M9 E
by4 = (realLen \ 4) * 4
$ Y- c! E4 ~8 O9 F: q; a$ M! ~ ndx = 1
W3 ~) q& E( g8 m& j8 O' w, B do while ndx <= by4 # u2 ~ K, E+ N
first = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
/ Y! ]3 L, o7 h second = Base64DecMap(asc(mid(scrambled, ndx+1, 1))) ! a. L# Z6 k, i! D0 r! T' @
third = Base64DecMap(asc(mid(scrambled, ndx+2, 1)))
8 R0 p7 {* o$ {2 j fourth = Base64DecMap(asc(mid(scrambled, ndx+3, 1))) P8 r* U# V4 P0 e% b
ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3)) 3 B7 t1 k; q/ b1 o$ b3 r
ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15)) / d; J2 x6 ^/ p" k$ ~" \3 ^2 R6 Y
ret = ret & chr( ((third * 64) AND 255) + (fourth AND 63))
* ^4 v# G' u B ndx = ndx + 4
5 k" k, `! v9 g loop ; n) w Q5 L6 b- T
if ndx < realLen then
, m, |* a+ F8 [$ @( [8 n first = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
7 s7 o3 \% h8 V g second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
7 f1 I( U, X3 Z, Q5 k- j | ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3))
$ }' L* o+ c' u3 i8 x2 [1 ]( ]2 c+ T if realLen MOD 4 = 3 then . e6 p2 C3 _3 w& S& R0 i
third = Base64DecMap(asc(mid(scrambled,ndx+2,1))) 5 T# b5 f1 r/ G0 k3 Y
ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15))
2 G& R% l6 g& F% D# }3 i& V" N end if $ D- a! \; _1 ]7 H" I
end if $ B; F; w' i5 F- j0 C7 A- o/ x1 I
base64Decode = ret q+ T0 T) u# y5 v5 d& A
END FUNCTION
# o5 P1 j" U: F" N, F6 z5 S '还原单引号、回车换行函数UnEncode
6 w7 v( n! \) m6 h function UnEncode(cc) 2 F6 n! i& n0 Y$ i6 k
for i = 1 to len(cc)
$ |6 Q2 y: r# Y2 n4 m! \ if mid(cc,i,1)<> "水" then
, K. |" Y2 |* n" w: {& s! \ if mid(cc,i,1)="加" then - X9 w; M: G& z0 y7 O
temp = """" & temp
& L3 P* b+ k+ x; k else
/ L; A6 @( [: i. P8 n temp = Mid(cc, i, 1) + temp
# G" ^ b# z$ J3 A0 Q( Z1 y! N( i/ Z end if
( e; e( F& `4 p H, h: V. z else
1 i9 I( q2 w) R4 D$ k/ G# s: J temp=newline&temp 1 z( r- n8 A8 S% \
end if
6 |9 ]8 I1 T3 q% |6 z* \) a+ M/ P6 { next 7 h3 Q1 G: s! K6 p O+ J n: l
UnEncode=temp ( X4 ?) y9 E: r0 H& K
end function
0 k% `* c4 c8 {3 n* [3 Z2 n# y
" y" E7 E3 Q" a, b7 i* e. j6 u. o& d, a* R1 |9 m
将以上代码以test2.asp名存盘。6 g$ g( I# ?7 x4 s+ r( e
5 j1 F. ?4 {% B (4)用SRCENC加密test2.asp0 o0 z5 k# n9 J C0 \" P
4 S2 S1 [; N5 H! i% H% k9 l; m
用SRCENC加密test2.asp,然后把它发布到服务器上,这样别人即使得到该文件、破解了SRCENC加密,也无法看到原代码,因为原代码在test2.asp中是密文(Hu=”c2V0IHJzPXNlcnZlc...),所以ASP代码就被保护起来了!$ R |4 Z# b( N' B1 j$ c' K$ u
7 r2 d4 i8 s2 W% E/ g3 T( N
二、加密过的asp程序如何解密?3 }* i# q' @* L9 Q& l, T4 R
+ k3 C. I9 S7 A9 D 如何对加密过的asp程序解密呢?首先我们要告诉大家,用组件法加密的asp程序是无法解密的,而screnc加密过的程序则可以解密,方法是:使用解密软件(ZWDECODE.EXE)。) a& m k9 |& A5 d9 C1 U I. E
4 \0 s& A# T, O a1 R
ZWDECODE.EXE(下载地址http://www.mydown.com/softdown/45/45183.html)可以对MS Script Encode加密的ASP文件进行解密,还原出源代码。& Z& z$ Q0 `* P2 C
~) u! @" c, Q3 O! |( w+ T, \- X
(1)解密方法 b8 q9 \; W: c. W3 ^3 z- f
1 p f/ K w Z( r0 F 单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可恢复原代码:. F( q0 k. f0 c+ Y
, E6 J$ b" u/ g. s1 O ZWDECODE <已加密asp文件名>
, O' i. ]& o4 k" G0 n- H8 H9 h7 J1 u' U6 z6 f2 f
其中<已加密asp文件名>必需输入,该文件名可带目录路径;也必需输入,这是要生成的输出文件名,也可以带路径信息。3 k+ u3 \5 p. X* q0 q+ I
% E: h! q; [; {, Y6 f
(2)举例
* z+ \: X: J( Y5 b. B' ^
. f7 B2 ]9 ]" O 例如F:\22\lacl.asp曾被screnc加密处理过,现在要恢复其中的源代码,你可以在MS-DOS中输入以下命令:
4 A" l+ [: V, R& f" e* |% q4 G& M+ @3 p1 h
ZWDECODE F:\22\lacl.asp d:\ulacl.asp
8 i7 X( r7 a( }0 _ H5 D* a9 L. l4 h- C' ]1 F3 o2 M4 |
执行完毕,在D盘上就会生成一个ulacl.asp文件,打开该文件,你就能看到源代码了! : e6 O1 M3 w V( w6 ?: X4 p) p
|
|
|