|
ASP程序加密解密方法全面解析4 C9 h. f: U/ I4 e+ W3 u$ D0 q
2007-08-18 16:41
8 C' v5 A0 E" Q" v& i$ O5 Z, ^% T 目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法……
) b0 D% r* s5 m% ] ^, A9 d' |; w- v
& M* j1 d# O& w5 e+ L" l7 s 如今,用ASP技术构建的网站随处可见。由于ASP脚本是在服务器上解释执行的(无法编译),因此你辛苦开发出来的ASP代码,很容易被人拷去任意修改,如何保护ASP源代码呢?这是每个ASP站长都会遇到的难题,网上求解这类问题的帖子非常多,下面我们就来谈谈ASP程序的加密方法。
$ S, X. S& U3 a: C1 m: Z+ o5 p8 Y& z o5 q3 d. }6 C: y
一、如何加密ASP程序?% h* [7 M& K7 j/ j8 M. C% }
) S4 c8 L+ }0 T. ~; y* }
目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法。
% ?% |2 V3 N# }; M
: h8 x+ _6 F0 K, V" _- m# k 1、使用微软的MS Script Encode进行加密3 Z% _) n, ], y+ X, }4 n2 I. G z
g. n! w6 V$ c/ J 微软提供了脚本编码器MS Script Encode(下载地址http://www.itgene.cn/itgene/download/download.aspID=232),可以对ASP程序进行加密。这是一个简单的命令行工具,其执行文件是SRCENC.EXE,需要在DOS下运行。它只加密页面中嵌入的脚本代码,把网页中之间的ASP代码转换成不可读的乱码,其他部分则保持原样不变。加密后的程序,必须使用Internet Explorer 5.0以上版本才能正常浏览。
0 O' i4 ?6 [/ P- o' U$ X! J G4 c. Z# J8 O9 G. s
用SRCENC加密之后,文件中被加密过的部分将变成只读类型,假如你修改了加密部分(哪怕只改动一个字),就会导致整个文件不能使用。对于 VBScript,加密后在源文件的第一行会显示:<SCRIPT LANGUAGE="VBScript.Encode">;而JScript(或 JavaScript)则会显示:<SCRIPT LANGUAGE="JScript.Encode">* h+ K% Q0 C. x8 ~
5 W8 ~8 B, [+ ]# K) x* T# K7 X
(1)加密方法
3 O1 {' V8 r# d' O
# V! @6 v" G8 H2 d- f- f7 R9 ~) s 单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可对某个asp文件加密:6 E) t( `# R) Z0 h
2 I4 p/ [. ]0 J# K SRCENC [switches] <要加密asp文件名> <加密后的文件名>& f x3 F* V3 c+ n% d0 X O
2 n; y- q* s& k+ ~' C7 @0 S
其中[switches]项目可以选以下5个参数
$ @: ?* m0 E% F8 y+ [
x6 X( j' f, [" A/ _9 J [switches] 含义 举例) s2 C2 k4 A" A: z3 F8 o
q) c$ c4 X! a3 m
/s 可选。命令中带了该参数,加密过程中屏幕上就不会有输出。 screnc /s lacl.sct ulacl.sct" D, P, n1 v' `7 I) R1 ~, H' }- o
& G/ }: F1 u1 ^7 M2 ?4 c+ U 对当前目录中的脚本小程序lacl.sct加密,加密过程中屏幕不显示任何信息
8 c+ x0 [ A* F" d% K! `2 O& a
8 }, H/ v' X c6 W/ t/ |- k /f 可选。指定输出文件是否覆盖同名输入文件。忽略,将不执行覆盖。 screnc /f lacl.asp
* \7 w3 O6 J" `8 |: ]7 h0 A- \2 j7 i. A3 k; p% t
对文件 lacl.asp加密,并用编码后的同名文件覆盖原文件, R: r* n2 j+ Q0 o/ T
( \% m2 e( C t- J" z7 ^) D# a
/xl 可选。是否在.asp文件的顶部添加@Language指令。忽略,将添加。
; V) P3 i9 h { Q: M5 ^ U2 Z
/l defLanguage 可选。指定Script Encoder加密中选择的缺省脚本语言。文件中不包含这种脚本语言特性的脚本将被Script Encoder 忽略。
/ X0 r' r- r; Q& R Z' o% ?
& ]% V& v. C- d 对于HTML文件,JScript为内置缺省脚本语言;对于ASP文件,VBScript为缺省脚本语言;对于扩展名为.vbs或.js的文件,Script Encoder也有自适应能力。 screnc /l vbscript lacl.htm ulacl.htm
/ T' C' z6 h8 i
' y1 B# y, ]" {8 Y! R6 q! z 对文件 lacl.htm加密,并生成输出文件 ulacl.htm,确保没有指定语言属性的脚本块使用 VBScript
4 D0 s8 h) u. s2 q
" |& B! o1 x) b1 J: } /e defExtension 可选。指定待加密文件的文件扩展名。缺省状态下,Script Encoder能识别asa,asp,cdx,htm,html,js,sct和vbs文件。 screnc /e asp 11\*.* f:\labxw-jm5 N0 d' d1 T; [, U" a
- B3 H9 z8 o7 V- u1 h
对11目录中的所有.ASP 文件进行加密,并把编码后的输出文件放在f:\labxw-jm目录中
6 I: O5 }# l+ k3 M' s S( S
) U* l4 L: ?# G( [2 M: j/ ~ (2)操作举例3 ? \8 v9 ]1 |1 `* j7 w# U, u, k
' o, {. [# P. d; H. i" B _ 例如要加密当前目录中的lacl.asp文件,生成加密文件ulacl.asp,则在DOS下输入命令:% @9 J- U. R( }. o3 V) `" G" c
, }1 @/ q' `2 F
screnc lacl.asp ulacl.asp0 d0 a$ ^! O3 w* s' \
% t I, b( M: G j, E
对当前目录中的所有 .ASP 文件进行加密,并把编码后的输出文件放在f:\labxw中,则使用命令:
3 W1 f# C* k. A3 g
+ o" M: Z" f) E3 }9 W8 Z screnc *.asp f:\labxw
. l3 ]# ?% m+ z, z* L$ o' C" X' c0 X$ `- X$ G1 W- F- |) U
2、使用组件加密asp. ` d* i: m3 Z* Y+ u
9 w3 G1 L% t2 \! q
以上被screnc加密过的程序,是可以解密的(解密方法下文有介绍),如果你想彻底保护自己的asp代码,可以通过开发activex dll组件的方法进行保护。, F( `+ l: f, l# ~- p3 f
4 V) ~$ f/ e# p' i8 a; w( q- _ Dll文件是被编译过的机器代码,如果没有源项目文件,是不可能被反编译的,所以组件加密这种方法最安全,也不可能被破解。下面我们来举例说明操作过程,例如你要保护以下asp代码:
3 F/ e5 U; w9 m5 ?6 ]/ }2 |4 s; i% V, D+ s' H
set rs=server.createobject("adodb.recordset")
: h* r5 ]) f# Y3 R" ?5 I sql="select * from gq where xs=1 order by date asc"
& {6 Y2 ]: P% X E9 s rs.open sql,conn,1,1
* h4 q, C) B: E2 p& ~ if rs.eof and rs.bof then * C! i; B1 p/ P+ T% q. `0 Z: N3 H
response.write"<A HREF=new0.asp?lbid=gqx ><%= gqx %></A>"
X4 }# V }5 z4 D0 N* J/ R* n$ I else
, S. r' g4 H& A" U Response.Write ""
! z* a2 R# Y. j a) q& Y end if
% P$ x' r8 L4 g& G/ c3 t9 O% v set rs=nothing + @7 x- [* j) m6 o0 ~, B
conn.close 2 p3 p6 j2 r$ W$ @; ^
set conn=nothing 3 M0 y- }# I/ ^" ]
7 g- |/ q: ^) |5 d; l" y3 t& o 可以把它们改写成VB组件,然后在ASP文件中调用组件即可。操作步骤如下:* v! m- V7 ]: ?& s7 |, _" D5 u
! N7 {# {) l( j: [$ ~3 T (1)新建一个vb6的activex dll项目% `1 r; ~2 L5 J! ?# y' S
2 W( Q, n" Y: K 在属性窗口中,命名你的库模块和项目文件(例如项目名lacl,模块名disp),以后在asp文件中,调用的对象名将为lacl_disp2 `1 L' d. l# n! o' j3 h L+ c
9 B1 @1 D) [- c- h. L8 f' U+ R* t 选择vb6中的项目菜单中的references ,选中microsoft activex data objects 2.0 library7 [$ y4 i) ~& F& t0 B6 }
$ G! A; w: |. n1 N$ ^! I3 U6 ~ (2)编写VB组件
# @6 h6 }' P# q) }5 [; \5 o8 s- M! i9 e l1 O
接下来把<欲保护的asp代码>改写成VB组件,代码如下:( i: \+ l8 c3 `2 c( p3 y7 v2 w9 l
$ e l2 W1 r0 O
public function html_combo(disp_table as string) as string
- a9 [ W, w4 N* G dim outstring as string 5 G6 |1 m1 n1 K
dim conn as adodb.connection
4 N: J) ?6 G# k& K2 ]5 n dim rst as adodb.recordset
9 D1 ]' [) i5 i9 L4 O [0 l dim sqlstring as string
e$ G' N# e% x set conn = createobject("adodb.connection") 7 Q2 {1 w& D' }3 J
set rst = createobject("adodb.recordset") ; [: z& V5 [+ g; ~% J8 |
sqlstring = "select * from " & disp_table & " where xs=1 order by date asc"
- l' X: j- T# J2 h! y% N '以上是在VB中打开数据库操作,数据库中的表名、字段名,你可以根据自己的需要修改
0 W6 C) _, k& |4 R conn.open "dsn=sumnet"
8 r8 X5 q- l. _, @; `- C rst.open sqlstring, conn, 3, 3 $ @5 D3 l' Z; x) E$ v/ C
if rst.eof and rst.bof then
% n z9 Z D. i3 m- d! @ outstring = "还没有这类单位信息" & W/ b+ H h4 ~
else
/ M) {6 ` X: c0 ]$ w, s rst.movefirst
" [5 r- k. q: |3 ]0 R outstring = "<A HREF=new0.asp?lbid="&request("lbid") & "></A>" 8 `- i3 J! Y G* I
end if
M b( d# [: e3 M! y t6 [ html_combo = outstring ' d# S( n% w4 Z3 {9 q
rst.close $ Q$ K( m& r6 Y2 A5 }2 H w
conn.close
5 z8 Q( N* M. {. l" M end function * C( ~8 t4 E; n& [8 F* E8 {
8 B: U9 O2 z+ [/ L% p, J 写好以上VB代码后,保存项目并开始编译。
, J1 O: O2 s% H( O+ u$ |: T, { t+ N7 P! k
(3)生成安装文件
3 J! E( M0 L6 B X. x
( K% g3 |% ^1 R* `- }' k9 V$ m 打开visual studio 6中附带的package deployment wizard程序,选择刚才建立的activex项目文件lacl;选择package,选择要打包的脚本或使用默认脚本,选择标准安装,为生成的安装文件选择一个存放目录,选择single cab. 其他均默认;然后单击下一步,安装文件就自动生成了!) z$ E1 u+ e4 f: ~* _; N
/ s* ?) S) z8 K: W% ~ (4)在IIS服务器上安装组件- |* H5 p; \4 U* N
+ v; v! T- j0 V# U( ] 在IIS服务器上运行这个安装文件,把组件安装到服务器上。 u* i; c' {0 c# P# G# G3 J; |
4 a1 D; N9 j# C- _( k0 b (5)在网页中调用组件3 \( ~* }2 ^* p; k9 c$ C+ p: C
3 c" P3 G7 R" |3 W! |1 i
以后在ASP文件中,通过调用该组件完成原来的功能。在网页中调用你制作的组件,方法如下:
) S( l _* x5 ~' U8 F5 H& r( n$ t- L+ L& R
<%@ language="vbscript" %> 2 t* c0 `9 j( `( ?9 \ m
<%
5 N. a9 P: O9 ]! {0 H" W. B- X7 k5 t set diaoyong = server.createobject("lacl_disp.disp")
8 W5 i4 I8 X: ~+ x( W %> ( T4 e& Y, r! C% ^9 i+ q
<html> 6 ]: q, I) c1 l% X+ u
<body> - k/ x7 C) [2 i. O2 b( N
<%= diaoyong.html_combo("gq")%>
, I/ k& t& G& g4 l2 d <br>
# w P* R$ i+ { </body>
3 `. X( V& P) F3 Y </html>
* M h/ H7 B" W7 f$ |9 k' Z
) W& x% o2 V& e: e) m1 M$ T
% d/ U j! v* ~, P/ e1 U" X 你看,现在Asp文件中的内容只是组件的调用(与以前完全不同),别人即使得到该文件,也无法编辑修改源代码,因为代码都被封装在VB组件中了,对于组件中的代码,外人是无法看到、也不能反编译的!
/ X2 \6 m" X% a& N* A' a* u% _/ x* A
3、自己编写加密程序
0 k4 P2 N5 d% l" P6 C! v2 T0 L/ I( I4 r4 M
组件加密方法虽然不可破解,但是要求你熟悉VB编程,需要把ASP代码改写成VB组件,工作量很大,所以建议大家自己编程来保护asp代码,其基本思路是:写一个加密函数base64Encode和解密函数base64Decode,先用加密函数处理<要保护的asp代码>,得到对应的密文hu;然后再用execute(base64Decode(hu))替换<欲保护的asp代码>。
: Y" R$ r6 z$ w: S( e+ N: H( x8 s7 m( l& v0 Q8 Q6 W0 [; e3 F4 ^3 Y
例如我们要保护上面那段asp代码,可以这样操作:5 T8 a6 Y: M! ~
" O' f c3 U1 o
(1)用WORD处理<要保护的ASP代码>
6 L' _5 _) W* D% j1 m4 H; b: P* f5 p
将<要保护的ASP代码>拷到WORD中;在WORD中,把代码里的段落标记(回车换行)全部替换成“水”这个汉字,方法是:点击“编辑”/替换,光标移到“查找内容”栏,点“高级”/特殊字符,选择“段落标记”;光标移到“替换为”栏,输入“水”,最后点“全部替换”。同法,把代码中的单引号也全部替换成“加”这个汉字。
' k2 P1 {" x% M0 a: B+ A d' c, e! S; I( Y' Z9 O* Q& k9 {
(2)编写、运行加密程序& [: m: V. c- \. H) F) B
* _6 h0 ^) k! m 在FrontPage中编写加密程序,该程序中有初始化函数initCodecs、加密函数base64Encode(代码如下),把WORD处理后的代码,copy粘贴在inp = ""这句中,最后以test1.asp名存盘;在IE中输入http://127.0.0.1/test1.asp本地运行该文件;屏幕上会显示一大段乱码(例如c2V0IHJzPXNlcnZlci5jcmVhd...),这就是《要保护的asp代码》对应的密文!7 l1 R1 o: t K' E- {
, x& L. K" G2 c
OPTION EXPLICIT
5 J' r) \1 w6 ?& K. u! j const BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" 8 \" a# Q* N4 w# h+ W5 z7 n; x. L
dim newline 1 c( L, ]& ]8 [( f" k
dim Base64EncMap(63)
~3 W- ^# a, K# u dim Base64DecMap(127)
* n9 s: |# B1 e' c1 w! F7 X( g dim inp,hu,encode 8 z+ ]& [+ Y2 ?, W. N
call initCodecs '初始化
. V; V3 w, v* V inp = "<WORD处理后的asp代码>" '将要保护的asp代码用WORD处理,然后填在此处 * S& d3 h1 U% S2 C0 N
hu= base64Encode(inp) '调用函数base64Encode进行加密,得到密文hu : n+ m3 l8 [3 f7 F' W, |
Response.Write(hu) '显示密文
# k" ]; N) z: y G; o7 b PUBLIC SUB initCodecs() '初始化函数initCodecs / L! L$ b5 f. \
newline = "<P>" & chr(13) & chr(10)' R+ |9 x/ h: c. O. c0 n1 t5 M! p
dim max, idx
4 b6 ^0 Y( l( y. M3 W1 z max = len(BASE_64_MAP_INIT) # H: ]. U, T, s/ I" Z( P
for idx = 0 to max - 1 9 x! e0 q: x9 Z! n7 q0 b+ B
Base64EncMap(idx) = mid(BASE_64_MAP_INIT, idx + 1, 1)
" ]- q" E$ H; o( |* Q2 J next ' ^* j' B, v* F$ A( w* f
for idx = 0 to max - 1 7 B& c3 ?; L( }
Base64DecMap(ASC(Base64EncMap(idx))) = idx
6 P$ x2 ~9 ]5 _" ~7 K next
. R4 O* {; p+ t# W+ R* D7 ]0 @. h/ ~ END SUB }; U3 [: o B8 H
PUBLIC FUNCTION base64Encode(plain) '加密函数base64Encode : l' M, }9 v5 H( C
if len(plain) = 0 then $ ^: P3 |6 s2 [+ L, R, ]# \6 i/ {
base64Encode = "" 9 G/ P. W# w( X. S3 g% B
exit function 4 C' G3 Q( n8 f( R
end if ; Y, U% K$ `& M
dim ret, ndx, by3, first, second, third % y4 R: B9 f9 F7 f5 b6 m6 y
by3 = (len(plain) \ 3) * 3
: p+ K4 ~+ A8 C ndx = 1
8 e- W9 C2 W, t) a- G4 X, e do while ndx <= by3
# I" j+ \. x5 r: ]! ~) E# c first = asc(mid(plain, ndx+0, 1))
0 V$ @0 T1 K% i/ G h- C- u second = asc(mid(plain, ndx+1, 1)) - ~% M* c3 c: f$ B p
third = asc(mid(plain, ndx+2, 1)) 2 x4 k" [ Z, m3 ^1 N Z# o) E
ret = ret & Base64EncMap( (first \ 4) AND 63 )
$ w. r y8 f( u ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) ) 5 C6 ~' Q4 |: z
ret = ret & Base64EncMap( ((second * 4) AND 60) + ((third \ 64) AND 3 ) ) ! S* L3 V$ X! Q8 `+ H; V8 N3 ?8 S
ret = ret & Base64EncMap( third AND 63) 7 |6 F4 V- T: |4 g, y' d1 H$ t3 t u
ndx = ndx + 3
2 a6 o8 r7 J$ ?0 j loop
. o* F* v" I' x! ?, p if by3 < len(plain) then 0 F3 h5 |; ` l0 q
first = asc(mid(plain, ndx+0, 1))
! \: D* [ j0 {5 z' b ret = ret & Base64EncMap( (first \ 4) AND 63 )
8 h: z; `. ?% U' c( n& |0 Q if (len(plain) MOD 3 ) = 2 then
6 _ L& t9 C- E) S2 u+ f second = asc(mid(plain, ndx+1, 1))
8 E8 o0 K: o: ?7 Z9 J9 W, m4 [ ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) ) 1 j: p6 N6 x" r! R& b
ret = ret & Base64EncMap( ((second * 4) AND 60) ) / t' k% x$ t. ~# T* c7 V* v8 [2 @. s
else
' B y8 J5 I* _/ Q, |( A4 @4 Z ret = ret & Base64EncMap( (first * 16) AND 48) 0 J. t' a) M! A2 t. W1 o* ]
ret = ret '& "=" ' a9 ~+ O' `! J8 a1 n" y
end if / r; W8 z0 o, T" c
ret = ret '& "=" 4 {: y- k$ E5 o; M1 e1 A: J
end if
4 B2 X! f% |& A/ S: d base64Encode = ret
3 L6 u! y: p/ f' r0 ]8 R: O+ C END FUNCTION
) \7 f! P3 o+ ^: d0 ^& O/ N0 v+ ?
(3)重新改写要保护的asp文件
4 @. g( c2 Q8 a5 \; L; r; N
2 B/ T, ^; `8 c8 X& T& t' v" v1 S 改写原来的asp文件,在文件中增加UnEncode 和base64Decode函数,全部代码如下:1 \0 G1 T" }; k ?& |" D
" f5 ^1 e) s: r# B( ~; S" Y5 D
Dim Hu,Hu2
, F+ E/ N7 N l4 w3 R# l% @3 n! V '拷贝“欲保护asp代码”的密文 将之存放到Hu变量中 4 j9 n8 A7 D5 X* |" L" M5 r/ N
Hu=”c2V0IHJzPXNlcnZlci5jcmVhdGVvYmplY3Qo12Fkb2RiLnJlY29yZHNldOMpICAgICDuc3FsPeNzZWxlY3QgKiBmcm9tIGdxICB3aGVyZSB4cz0xIG9yZGVyIGJ5IGRhdGUgYXNj1yAgICAgsnJzLm9wZW4gc3FsLGNvbm4sMSwxICAgICDuaWYgcnMuZW9mIGFuZCBycy5ib2YgdGhlbiDucmVzcG9uc2Uud3JpdGUTvSD7INAg5iAgILUgvyAFILITsmVsc2UgsiAgICAgUmVzcG9uc2UuV3JpdGUg1zxBIEhSRUY9bmV3MC5hc3A/bGJpZD0TJnJlcXVlc3Qo12xiaWQTKSAmIOM+PC9BPuPuZW5kIGlmICAgIL5zZXQgcnM9bm90aGluZyAgICAgICAgsmNvbm4uY2xvc2UgICAgICDuc2V0IGNvbm49bm90aGluZyAgIL4”
! t i" d0 s+ V Hu2= base64Decode(hu) '还原要保护的ASP代码 & f$ c. @; s: o2 }7 ]
execute(UnEncode(Hu2)) '还原单引号、回车换行,并执行原代码
. W: `: \3 r* F ’解密函数base64Decode : J" l+ `4 d6 X/ o+ h' V, d- }
FUNCTION base64Decode(scrambled) # P) v8 G4 f4 c: G
if len(scrambled) = 0 then
! e+ ]) K% B( U: \1 N9 ? base64Decode = "" 3 j# a$ x" D# s
exit function
( ^ ?5 o: ~' `, z9 d5 D! c8 k end if
9 W$ L5 g! @, ?3 \0 O dim realLen
8 z$ X: a2 e1 k5 l realLen = len(scrambled)
1 ?! F* k' O7 j- n5 c# |( [1 A# _1 l do while mid(scrambled, realLen, 1) = "=" ' f z1 E# B& W% r, ~) Y
realLen = realLen - 1
F) N' j$ O% r, Z$ P0 n loop
' c3 |# R, y0 s7 ?/ J! {5 u7 A dim ret, ndx, by4, first, second, third, fourth
& Q! _" W x& q5 b0 g ret = "" % c7 `: h" @" K3 c" ]& O" U- ]
by4 = (realLen \ 4) * 4
( b i1 o' A+ \: _$ J ndx = 1
. `! ?. z' A/ t$ x/ ^, V7 @- c0 t do while ndx <= by4
# Z/ K% p2 I' j5 A+ t; z first = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
x" U7 f, ~; O- T& F# H8 I } second = Base64DecMap(asc(mid(scrambled, ndx+1, 1))) : h* ~5 M2 M: `2 E H0 D
third = Base64DecMap(asc(mid(scrambled, ndx+2, 1)))
' w6 n! v- f+ L fourth = Base64DecMap(asc(mid(scrambled, ndx+3, 1)))
; g- `9 R1 _# y2 j0 q* k2 n ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3)) ! Q9 `1 w3 e- R' T8 Z
ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15))
1 T* m' R4 d* Q$ w9 q% V* }- v r ret = ret & chr( ((third * 64) AND 255) + (fourth AND 63))
. ]7 A# G, _: G8 o ndx = ndx + 4
/ K4 G2 v; y( K8 v, u6 | loop
, l+ |1 o& f0 l; z if ndx < realLen then / {# ]7 ^8 ?6 M5 W! j3 V# \/ B
first = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
6 H5 ~, r) Z% p$ X' f8 ? second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
1 ~( }1 T3 M$ ` ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3))
% g- D; o1 k2 C2 E6 l if realLen MOD 4 = 3 then 4 m. M. O( D1 _$ g
third = Base64DecMap(asc(mid(scrambled,ndx+2,1)))
! e* [' ?, [, b& I- _ ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15))
- K* @$ p% B3 }( [ end if . X6 C- A3 @9 m, c
end if . q; ?5 x0 e8 e* v
base64Decode = ret & {4 H" Q( a8 ?# j
END FUNCTION
0 o3 x# ^" D# \ '还原单引号、回车换行函数UnEncode
) Y: \$ [- y, A/ P* a2 n function UnEncode(cc) + Z" E$ s/ I2 E% K
for i = 1 to len(cc) / K. D( r8 B% T) g
if mid(cc,i,1)<> "水" then
& @4 x& D5 w: d! ~6 I if mid(cc,i,1)="加" then
* @7 T0 e% a& G4 ^- g6 D, |: Y temp = """" & temp
( e S% `# v; e" v2 g+ C/ b5 i else $ l7 G6 i) o; C+ I( |' }' k) |3 a5 w
temp = Mid(cc, i, 1) + temp
! P0 Q; p5 |1 X2 }) w end if
# W( X! f6 B/ B& s8 R8 U2 ^ else
* c( X0 K; t- n, ?" }' m. z temp=newline&temp 6 Z& l# z3 L8 H# G& `) S" h/ k4 z
end if
& D$ |& j( n3 L+ S next
+ ^& m1 x. K; H6 E2 u UnEncode=temp
4 |* g: U5 ^0 t end function + \5 h* g$ T' W6 q6 \ I
' |( e9 U7 _* K g$ n
; o, |3 s6 H ]4 x/ g# R; h7 ^ 将以上代码以test2.asp名存盘。
$ H1 i. L3 J2 d6 _' N, Q
. `5 W8 [/ N5 M" j+ H (4)用SRCENC加密test2.asp& l8 v9 Q4 i$ |0 z3 A0 U0 K
% R+ n) G+ H- N0 L 用SRCENC加密test2.asp,然后把它发布到服务器上,这样别人即使得到该文件、破解了SRCENC加密,也无法看到原代码,因为原代码在test2.asp中是密文(Hu=”c2V0IHJzPXNlcnZlc...),所以ASP代码就被保护起来了!
; N# b# K& t h" H! y; J- J
, F1 L# @7 k% |7 F J* j+ ? w0 u 二、加密过的asp程序如何解密?2 W7 U" A/ {" W5 f; [7 Q
( j2 c5 \3 M# L* a
如何对加密过的asp程序解密呢?首先我们要告诉大家,用组件法加密的asp程序是无法解密的,而screnc加密过的程序则可以解密,方法是:使用解密软件(ZWDECODE.EXE)。
. W5 H2 F8 P$ c$ I n
; e5 U% L9 ?7 ~ ZWDECODE.EXE(下载地址http://www.mydown.com/softdown/45/45183.html)可以对MS Script Encode加密的ASP文件进行解密,还原出源代码。) U" C& i. B" t1 ^- G. P# Q+ w
2 c! {/ Z: U; b( w- E C6 v (1)解密方法( `# Z, c/ `% y3 A- q+ P8 N
6 a! l+ G$ g. W+ G3 c1 v: \ 单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可恢复原代码:
& j, Y% j% [" a% K% ]9 w% l, u4 |; c0 {
) K+ W. M) i3 V& y4 N( G$ V ZWDECODE <已加密asp文件名>/ |' M- Z. ^, u% a {6 _2 W
' j% \5 m y6 l3 B: ?
其中<已加密asp文件名>必需输入,该文件名可带目录路径;也必需输入,这是要生成的输出文件名,也可以带路径信息。- E: c3 _& v+ m6 l) o2 P1 G3 n' b
. v) [4 ?6 c- J1 k; `
(2)举例
: T- j9 `3 k8 o$ v# v4 r& x$ e0 X+ }9 g6 k8 ^; I( h+ Q# [
例如F:\22\lacl.asp曾被screnc加密处理过,现在要恢复其中的源代码,你可以在MS-DOS中输入以下命令:
1 [) C* }# v4 D% ^
- D0 x: M2 A+ b" \, W6 M9 c# J ZWDECODE F:\22\lacl.asp d:\ulacl.asp$ R0 t+ X9 m1 c D0 U3 Z
/ z" G$ N& M, ^# J0 Y) S8 n 执行完毕,在D盘上就会生成一个ulacl.asp文件,打开该文件,你就能看到源代码了! # n2 H- ~; h4 Z# R
|
|
|