|
|
ASP程序加密解密方法全面解析* ?; u* m* z" H$ j1 K5 W2 f
2007-08-18 16:41$ ~3 p4 P3 j) [8 n- @6 M
目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法…… ' Q4 Z B: U n( H T. b3 C
+ X' V- T$ s. h* E |; _2 `
如今,用ASP技术构建的网站随处可见。由于ASP脚本是在服务器上解释执行的(无法编译),因此你辛苦开发出来的ASP代码,很容易被人拷去任意修改,如何保护ASP源代码呢?这是每个ASP站长都会遇到的难题,网上求解这类问题的帖子非常多,下面我们就来谈谈ASP程序的加密方法。 V5 g6 {3 U4 {6 w x
3 ^& s( y; ?( T0 `2 t5 @ 一、如何加密ASP程序?
* Y+ ` [) q6 ]! y( c- J" }
/ Q/ x, @6 O) S( R 目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法。
" C5 E7 W% d+ m) a" e+ L8 y9 W4 K9 R5 ?5 o; }
1、使用微软的MS Script Encode进行加密+ [6 J) K! s! O
' P# g6 V9 m% h$ h 微软提供了脚本编码器MS Script Encode(下载地址http://www.itgene.cn/itgene/download/download.aspID=232),可以对ASP程序进行加密。这是一个简单的命令行工具,其执行文件是SRCENC.EXE,需要在DOS下运行。它只加密页面中嵌入的脚本代码,把网页中之间的ASP代码转换成不可读的乱码,其他部分则保持原样不变。加密后的程序,必须使用Internet Explorer 5.0以上版本才能正常浏览。4 G: \1 @8 }; m+ M; i
/ A- G6 n: S& H# g& R' p* ]
用SRCENC加密之后,文件中被加密过的部分将变成只读类型,假如你修改了加密部分(哪怕只改动一个字),就会导致整个文件不能使用。对于 VBScript,加密后在源文件的第一行会显示:<SCRIPT LANGUAGE="VBScript.Encode">;而JScript(或 JavaScript)则会显示:<SCRIPT LANGUAGE="JScript.Encode">
% B, |. _7 L' w7 v8 y6 l7 Q3 y* d) G3 h3 u& F1 X
(1)加密方法
+ x( z0 z, g5 C) N1 `, V8 _: D% Y$ y* J& n/ ^& F1 t
单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可对某个asp文件加密:0 c! v" T! a& j
2 L0 z% U/ N+ l1 a- r SRCENC [switches] <要加密asp文件名> <加密后的文件名>
/ U) v z; h$ D2 S5 Z, G8 z- \0 q3 M2 W' a
其中[switches]项目可以选以下5个参数* t" i. N# U' W/ B2 s* k e
z' s, ?) U1 R1 }3 e
[switches] 含义 举例
" S& g$ I- _4 V6 c q0 }% A
8 d! }* E0 q: R- Z$ U% R! P- f /s 可选。命令中带了该参数,加密过程中屏幕上就不会有输出。 screnc /s lacl.sct ulacl.sct; Q U7 s% n# j1 N5 O( H y
! u( q% C2 q1 t2 @5 D& U* a* o
对当前目录中的脚本小程序lacl.sct加密,加密过程中屏幕不显示任何信息; I% w- R- |# Z6 C: l8 C5 L
$ ^9 h1 _9 b1 C' U
/f 可选。指定输出文件是否覆盖同名输入文件。忽略,将不执行覆盖。 screnc /f lacl.asp6 m8 c& {3 z3 e1 I
; k7 R) O- J/ b2 |( o
对文件 lacl.asp加密,并用编码后的同名文件覆盖原文件
" F; [* H2 _ G4 b. _, g
4 [* q1 w" c2 G* t' N) t. N /xl 可选。是否在.asp文件的顶部添加@Language指令。忽略,将添加。4 h0 A5 d. W1 d, {" ]1 P
" h# P3 [# m! }7 t. {
/l defLanguage 可选。指定Script Encoder加密中选择的缺省脚本语言。文件中不包含这种脚本语言特性的脚本将被Script Encoder 忽略。, ]$ p' d" Z. z7 H9 U
5 S1 u( |( j! a- H! Z+ S) H+ W 对于HTML文件,JScript为内置缺省脚本语言;对于ASP文件,VBScript为缺省脚本语言;对于扩展名为.vbs或.js的文件,Script Encoder也有自适应能力。 screnc /l vbscript lacl.htm ulacl.htm
9 p% { d2 S) P( Q# E) j
+ _, j) P& |; W, P 对文件 lacl.htm加密,并生成输出文件 ulacl.htm,确保没有指定语言属性的脚本块使用 VBScript4 r8 [0 i$ P3 y5 m
* u$ d' N7 H: T* \( U+ y# j2 f /e defExtension 可选。指定待加密文件的文件扩展名。缺省状态下,Script Encoder能识别asa,asp,cdx,htm,html,js,sct和vbs文件。 screnc /e asp 11\*.* f:\labxw-jm! r# B. J: P- P. ~5 t
7 ^/ X: A A, W3 N; Q6 C+ z7 \
对11目录中的所有.ASP 文件进行加密,并把编码后的输出文件放在f:\labxw-jm目录中0 q. k5 V' N$ ?1 C0 ^
0 z; V4 U, C: s1 j7 c: H- J2 ~
(2)操作举例4 l+ o+ B6 d9 a+ @; U$ J
$ r" z) N3 P" c3 i
例如要加密当前目录中的lacl.asp文件,生成加密文件ulacl.asp,则在DOS下输入命令: J: i+ a4 f* e6 K7 L
1 ^, f& L# O: S screnc lacl.asp ulacl.asp6 _% c+ K! ~1 H- Q
5 q I. P0 Y7 }4 _
对当前目录中的所有 .ASP 文件进行加密,并把编码后的输出文件放在f:\labxw中,则使用命令:4 [2 Z: T! e( z8 r! g' n# {
2 r' }; I3 L) F4 V6 e
screnc *.asp f:\labxw
$ U; m! D# f+ N0 d" P
6 |; r7 e8 C- O- ^4 v; q3 }' i0 q 2、使用组件加密asp: P' `# z7 J, e5 X! R
! k+ W) C/ Y+ j
以上被screnc加密过的程序,是可以解密的(解密方法下文有介绍),如果你想彻底保护自己的asp代码,可以通过开发activex dll组件的方法进行保护。2 \! K* X# {8 q# l( r
4 ` _0 s. j" [# \2 b* w- B+ x) G& T Dll文件是被编译过的机器代码,如果没有源项目文件,是不可能被反编译的,所以组件加密这种方法最安全,也不可能被破解。下面我们来举例说明操作过程,例如你要保护以下asp代码:5 B2 E) j8 o0 c1 `0 e) s2 `* l
. m7 ^. K9 }) ~( P- U' T! V' _! O
set rs=server.createobject("adodb.recordset") 0 W1 ?. _( j5 ?) L! l- i: Z+ l4 B
sql="select * from gq where xs=1 order by date asc"
3 C* S( p% l o( j% e rs.open sql,conn,1,1 5 |9 H$ ?% ^4 [+ n$ v" g' C- A
if rs.eof and rs.bof then 3 Z9 r! k7 F3 X4 n8 J! N& R
response.write"<A HREF=new0.asp?lbid=gqx ><%= gqx %></A>"
) r- {- \8 S! ~9 Y |& w" d* r else , A' i0 Q p) G2 }
Response.Write "" . n: |& r6 H7 V# w
end if 1 F! }& l9 ]! Y/ [1 O& q
set rs=nothing
2 b- Q/ w2 }( N3 j conn.close 3 E# l6 E( v Q- \2 z1 U. X' Q
set conn=nothing 9 O! ^" _& B7 O* v9 J6 s
) E, F" S: S8 y7 B5 d P1 H# x1 G
可以把它们改写成VB组件,然后在ASP文件中调用组件即可。操作步骤如下:
2 o' C" p* V( {. x
- e* z" T6 y6 [ (1)新建一个vb6的activex dll项目
6 E- r8 w3 h Q; |) |8 K/ H; s7 W0 N7 v; v7 j# h$ \, ?" ?
在属性窗口中,命名你的库模块和项目文件(例如项目名lacl,模块名disp),以后在asp文件中,调用的对象名将为lacl_disp- l* F& Z& z: P" Z5 Y# D" c! \
3 ?$ l* G) C% u9 @ 选择vb6中的项目菜单中的references ,选中microsoft activex data objects 2.0 library
7 R& y8 _$ m% V& q9 R3 Y# g! n% d' J% e; R% S H
(2)编写VB组件5 S$ f: z# G9 X# W: h
* r9 q" H) z. R" v& y
接下来把<欲保护的asp代码>改写成VB组件,代码如下:
) i/ C) i7 G2 m6 w1 H& X; h7 R! E! S
public function html_combo(disp_table as string) as string 4 x0 j) _, o. W. ^
dim outstring as string % U2 k! a! Y0 z; C) C- J
dim conn as adodb.connection
( i' Z3 ]1 L/ D) Y" w6 r$ F dim rst as adodb.recordset
) p9 z+ ?0 N1 F6 ?; L/ U dim sqlstring as string
& Y6 j7 R5 c" z1 q j set conn = createobject("adodb.connection") % B' m) W$ W O, `7 A3 T: o
set rst = createobject("adodb.recordset")
) Q- R1 _2 O% N0 F( W4 l2 ?/ z- A sqlstring = "select * from " & disp_table & " where xs=1 order by date asc" 1 b% r3 b1 D9 ~; [$ Y- r% B
'以上是在VB中打开数据库操作,数据库中的表名、字段名,你可以根据自己的需要修改
* D% k5 ^% P% p" P4 Y& }: _" r8 I3 G conn.open "dsn=sumnet" 0 D( ^% @% h; E
rst.open sqlstring, conn, 3, 3 # G1 v' K7 i2 M/ S% t
if rst.eof and rst.bof then
! K1 z: ~+ D3 G5 x outstring = "还没有这类单位信息"
9 Q' \4 y4 E4 ?" { else ! I" e: d! j( a1 h8 k' T* \7 q( j
rst.movefirst
- ^! r: I! J9 ?$ v3 Y+ J4 ? outstring = "<A HREF=new0.asp?lbid="&request("lbid") & "></A>"
B; l' K9 B3 i! K: g end if
; V* O$ y7 [! f/ b4 L html_combo = outstring ' J/ D& }% J: c2 d6 b2 A" q
rst.close - Z) L0 w0 `( W; E4 S
conn.close
; E" r# i. l. L2 U end function
Q/ h' L' }( D+ H4 U4 y; ?& \& L( ~3 r" O- V6 B5 B/ F
写好以上VB代码后,保存项目并开始编译。
% R+ f; P6 _: n! m. o7 w1 r d
% p) k7 X$ ]# _" c: G; [+ ? (3)生成安装文件
" i% h, G0 y. i+ {+ j
& B: S4 B n' k" K# U 打开visual studio 6中附带的package deployment wizard程序,选择刚才建立的activex项目文件lacl;选择package,选择要打包的脚本或使用默认脚本,选择标准安装,为生成的安装文件选择一个存放目录,选择single cab. 其他均默认;然后单击下一步,安装文件就自动生成了!
% m8 G* a8 ?) h& V8 I( r9 {$ \) k* i
(4)在IIS服务器上安装组件* G! O. G0 V& ^( ?; [' F' ?4 Q' S6 ]
- o8 W8 u8 ?& `, B+ J: p
在IIS服务器上运行这个安装文件,把组件安装到服务器上。
3 {3 b0 s# g/ |
& X2 X$ `. V! {8 ^0 K0 E6 {) V (5)在网页中调用组件- ^' ?: c* o: D0 R
& C, T5 r& _ A5 N9 c& |( R/ h, S
以后在ASP文件中,通过调用该组件完成原来的功能。在网页中调用你制作的组件,方法如下:1 v) H6 z2 S/ `0 T9 Y
; Y) \& ?9 g# {& P, M) G( [. ? <%@ language="vbscript" %> - z1 d- H, R5 l7 n$ ?9 ~
<% 8 I5 y0 Y1 D. ]( E1 g% h9 v" N
set diaoyong = server.createobject("lacl_disp.disp") , o6 Y" ~' e: {4 O1 S2 Q
%>
; ]9 N* R3 T- B( o0 ? <html> ?% l. P% r) m/ W0 d0 M9 E
<body>
* t2 I2 i7 ], s1 L7 {: i8 j) w <%= diaoyong.html_combo("gq")%> * F* i1 t6 Z* K/ D9 O7 O
<br> 4 y2 Y* h6 ^( E$ y" v- {
</body> ( l0 x# T9 N' v4 z
</html> / b$ l4 {; r5 ]: v( ]" a
/ L7 |/ K5 Z9 K* i$ x5 C% K
7 ?- ?1 `9 u* U3 d% n
你看,现在Asp文件中的内容只是组件的调用(与以前完全不同),别人即使得到该文件,也无法编辑修改源代码,因为代码都被封装在VB组件中了,对于组件中的代码,外人是无法看到、也不能反编译的!; c4 p h$ y0 l
. n7 s9 p5 T# B: [: W4 A 3、自己编写加密程序2 B% j9 p# j1 L1 l* x$ o
+ g6 i4 g+ R9 Y3 v+ C 组件加密方法虽然不可破解,但是要求你熟悉VB编程,需要把ASP代码改写成VB组件,工作量很大,所以建议大家自己编程来保护asp代码,其基本思路是:写一个加密函数base64Encode和解密函数base64Decode,先用加密函数处理<要保护的asp代码>,得到对应的密文hu;然后再用execute(base64Decode(hu))替换<欲保护的asp代码>。
; `0 W$ W# _: b& }( X9 a! r* e9 ?" q( |( t
例如我们要保护上面那段asp代码,可以这样操作:
! A P3 h+ X9 X v+ e; ?( y5 r; h- ^
(1)用WORD处理<要保护的ASP代码>9 l, k l- s, O0 \+ G' |1 [/ ~8 i
9 H. T9 ?( d' B" t
将<要保护的ASP代码>拷到WORD中;在WORD中,把代码里的段落标记(回车换行)全部替换成“水”这个汉字,方法是:点击“编辑”/替换,光标移到“查找内容”栏,点“高级”/特殊字符,选择“段落标记”;光标移到“替换为”栏,输入“水”,最后点“全部替换”。同法,把代码中的单引号也全部替换成“加”这个汉字。
( p, Q: C, f4 r7 {
) A5 y. p+ R; l: \8 ]! h (2)编写、运行加密程序% J, J- A! h9 o7 N4 G
6 s) G( O- j5 | F
在FrontPage中编写加密程序,该程序中有初始化函数initCodecs、加密函数base64Encode(代码如下),把WORD处理后的代码,copy粘贴在inp = ""这句中,最后以test1.asp名存盘;在IE中输入http://127.0.0.1/test1.asp本地运行该文件;屏幕上会显示一大段乱码(例如c2V0IHJzPXNlcnZlci5jcmVhd...),这就是《要保护的asp代码》对应的密文! B( g. K+ C; B+ b8 [2 @( J& ?
8 T9 H {" x$ q8 Y& `) i4 ?
OPTION EXPLICIT
6 O/ a( {0 c% [ const BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
* @- E6 z* ]7 [: i/ O5 q | dim newline ; y' t( `. ]0 R
dim Base64EncMap(63) 2 ]' ]5 C0 z/ c4 |
dim Base64DecMap(127) 6 J0 @! K( x9 q+ N+ [
dim inp,hu,encode
4 O" W6 t" P/ `* Y1 u call initCodecs '初始化 $ q: w* k8 ]& X) m
inp = "<WORD处理后的asp代码>" '将要保护的asp代码用WORD处理,然后填在此处
3 [- f& W9 A3 O0 g$ ^& Q hu= base64Encode(inp) '调用函数base64Encode进行加密,得到密文hu 3 S$ U7 A% c4 n( L' b# S a
Response.Write(hu) '显示密文
( Q/ _! _( M2 v& }( m PUBLIC SUB initCodecs() '初始化函数initCodecs
& T& Q3 i' V3 g: [( j0 _ newline = "<P>" & chr(13) & chr(10)
# D+ R0 M# V4 d* H+ S* k" \2 i dim max, idx 6 o! N; d, y: I9 ]
max = len(BASE_64_MAP_INIT) ) f: \/ U4 d6 E. S4 f* ]* C, q
for idx = 0 to max - 1
- j3 F8 F" r% _7 H, o, F Base64EncMap(idx) = mid(BASE_64_MAP_INIT, idx + 1, 1)
& |1 o8 Z, f2 {% }( F% Y next 9 s& e X2 H& c
for idx = 0 to max - 1
7 z% c6 b4 I2 d+ x9 M& v/ ^8 h4 e+ [+ h) z Base64DecMap(ASC(Base64EncMap(idx))) = idx 4 w4 ]0 {1 `5 J1 V' r
next
( c8 t( y' t- d9 j END SUB
/ N5 E" \* ^: x A$ B PUBLIC FUNCTION base64Encode(plain) '加密函数base64Encode 1 {! t. ?" f" g1 _" `
if len(plain) = 0 then
* l+ ?! V+ l* ~: g' D0 H base64Encode = ""
7 ]# y& ~+ _8 I exit function * |" q) M; m# e0 |4 {
end if + }8 Q$ U: s; h, @9 g- O
dim ret, ndx, by3, first, second, third
+ t' B( {4 T: d' v$ y8 k by3 = (len(plain) \ 3) * 3
; Q0 g1 V- ~5 E h; d ndx = 1 % t3 O; Q. r/ K7 l8 E* q
do while ndx <= by3 ( @6 L" I; n5 L! @
first = asc(mid(plain, ndx+0, 1)) 1 j( C3 V' W% |; h
second = asc(mid(plain, ndx+1, 1)) K0 |; j8 L% m6 E
third = asc(mid(plain, ndx+2, 1))
7 }1 G7 f- Z4 _0 V$ ]/ Z ret = ret & Base64EncMap( (first \ 4) AND 63 ) 0 Q% T2 `0 k$ \% [2 b. V
ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
6 L! k. ~, ?5 l! q! F, Q# \ ret = ret & Base64EncMap( ((second * 4) AND 60) + ((third \ 64) AND 3 ) ) & A4 C7 H" d% M6 {" p
ret = ret & Base64EncMap( third AND 63)
& e7 e( W% C: X. d7 U$ V; y1 F: a ndx = ndx + 3 9 J0 `, c' ] P2 E6 v
loop , W. b; M9 M) g R4 o$ G
if by3 < len(plain) then
: t; L! o4 }' W6 G first = asc(mid(plain, ndx+0, 1))
5 S1 O B9 h. V# u ret = ret & Base64EncMap( (first \ 4) AND 63 ) + d' f0 y$ ]2 ~3 z8 l* \* u
if (len(plain) MOD 3 ) = 2 then
; O# D+ M: O! j: b& ] second = asc(mid(plain, ndx+1, 1))
4 s9 g% e9 u4 x# K' k; M0 ?. T2 F ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) ) 8 j0 B6 o' H% Y) Z
ret = ret & Base64EncMap( ((second * 4) AND 60) )
2 A' k% q) O, b! Z else
4 @" T5 @- [3 p$ \' B# Z! e ret = ret & Base64EncMap( (first * 16) AND 48)
' D3 R( X7 t% A& d. O ret = ret '& "="
& M+ l5 m7 U. ] end if
. c2 i9 M8 j* W0 [; N6 R/ _ ret = ret '& "="
* G, @. _' E5 z* A9 H end if
0 F! f4 b" z7 X- n base64Encode = ret
5 h+ U( O6 M3 g$ G" [ END FUNCTION
/ L( Q7 X2 [; g1 l5 ^
2 N! s+ D! C& w4 S; q2 F (3)重新改写要保护的asp文件
' L% |6 L! T! ~3 w" m( m( N( _% f' W2 D0 G
改写原来的asp文件,在文件中增加UnEncode 和base64Decode函数,全部代码如下:
* @/ K; T7 H2 }7 s3 j7 l& s
3 r0 V; v0 E* _* j% W9 C& o% \ Dim Hu,Hu2
8 _6 M( h6 z ~2 r '拷贝“欲保护asp代码”的密文 将之存放到Hu变量中
' }* h% Y1 x4 @( K# n$ ~+ {0 \: ]& S Hu=”c2V0IHJzPXNlcnZlci5jcmVhdGVvYmplY3Qo12Fkb2RiLnJlY29yZHNldOMpICAgICDuc3FsPeNzZWxlY3QgKiBmcm9tIGdxICB3aGVyZSB4cz0xIG9yZGVyIGJ5IGRhdGUgYXNj1yAgICAgsnJzLm9wZW4gc3FsLGNvbm4sMSwxICAgICDuaWYgcnMuZW9mIGFuZCBycy5ib2YgdGhlbiDucmVzcG9uc2Uud3JpdGUTvSD7INAg5iAgILUgvyAFILITsmVsc2UgsiAgICAgUmVzcG9uc2UuV3JpdGUg1zxBIEhSRUY9bmV3MC5hc3A/bGJpZD0TJnJlcXVlc3Qo12xiaWQTKSAmIOM+PC9BPuPuZW5kIGlmICAgIL5zZXQgcnM9bm90aGluZyAgICAgICAgsmNvbm4uY2xvc2UgICAgICDuc2V0IGNvbm49bm90aGluZyAgIL4”
- @0 E' |- n7 ^! _, } Hu2= base64Decode(hu) '还原要保护的ASP代码
- E& d9 x! ]) J9 [/ d; l1 r execute(UnEncode(Hu2)) '还原单引号、回车换行,并执行原代码 # L0 C- |! V4 ^" ^
’解密函数base64Decode
; ^& P4 D- L/ e" ~, [ FUNCTION base64Decode(scrambled) 7 U9 c& c8 f: I' B, ]" p
if len(scrambled) = 0 then
& T1 m; o( Q2 C+ \8 D base64Decode = ""
$ e% ]# R4 I% y4 M exit function " |8 y7 r; h; S
end if
" `$ m! {2 n. h ] dim realLen
* e3 F) F* n% ~( q5 G1 J6 _* y realLen = len(scrambled)
, }4 B0 O/ _; N! L( T3 Z1 i do while mid(scrambled, realLen, 1) = "=" $ I. z0 o& ^ e+ L' s0 y
realLen = realLen - 1 ; A8 q& Z0 \; G- d6 l
loop
" i1 A( u5 ~$ H: K+ n: T! s dim ret, ndx, by4, first, second, third, fourth " a* D6 B9 N; z: k
ret = ""
* b1 N9 P, G& [* Z7 j by4 = (realLen \ 4) * 4
V% ^7 J8 Z6 j3 X Y ndx = 1 * R: @1 z; n2 r* s' K
do while ndx <= by4
( v% o7 m6 A/ y" F! q2 D7 | first = Base64DecMap(asc(mid(scrambled, ndx+0, 1))) : o0 g$ [- j; M' d' S+ B( ?
second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
% X& \; ~ S/ r& ]" X" v* ?/ m1 r third = Base64DecMap(asc(mid(scrambled, ndx+2, 1)))
7 q& O- o8 c, b; ~! k' g# b fourth = Base64DecMap(asc(mid(scrambled, ndx+3, 1))) + K) P! @+ w) O+ O$ X
ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3)) ! ~& L' [3 o5 ^* r* D% j% o3 t- |3 n; I
ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15))
; W/ e4 G. l) H- V4 q- d }4 g ret = ret & chr( ((third * 64) AND 255) + (fourth AND 63)) - v1 f: o6 X6 B
ndx = ndx + 4
0 h7 ^1 a4 X7 C loop ! D: p9 {4 ~, i& _
if ndx < realLen then
& f0 @) R2 B* b, Q- T first = Base64DecMap(asc(mid(scrambled, ndx+0, 1))) " D" y+ G0 {" H3 U! Y7 P+ A
second = Base64DecMap(asc(mid(scrambled, ndx+1, 1))) . g" A" Z6 Z" y4 g& }# S
ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3)) 6 t4 _ e$ }0 J* n/ Z' |
if realLen MOD 4 = 3 then 2 T0 a5 G3 Y% |, _# h! B$ o
third = Base64DecMap(asc(mid(scrambled,ndx+2,1)))
4 E7 t# {' V5 ~: W1 @ ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15))
4 k3 F4 Q4 P! z1 g0 B end if
2 c5 `; L- ]2 r4 W6 x) B3 y/ _ end if
& H$ T! o3 N# U3 s U0 k+ M6 z base64Decode = ret - @% ]" o% M) O/ ^
END FUNCTION & T3 u0 \- X5 G0 u+ V7 K
'还原单引号、回车换行函数UnEncode 4 P" H7 U1 Z& ?7 ?
function UnEncode(cc)
( j8 f/ G3 b7 k7 ~7 P3 Z* P/ C5 e for i = 1 to len(cc) - H' I9 n% E! K* o/ e% ]
if mid(cc,i,1)<> "水" then 3 k5 f. l- b% }+ T; e
if mid(cc,i,1)="加" then % v7 Z" D* R. W/ M) Y0 W
temp = """" & temp
; j' B5 J: L/ \' [) p else
+ Y! H8 L, O/ P) j) j# u temp = Mid(cc, i, 1) + temp
, A% m( u/ Z! `8 z. ` H" @0 { end if
1 p' j6 J, P4 q0 \3 \' N% _ else W- h4 J o4 `% H
temp=newline&temp
1 n! T4 i9 x0 C! E- t; A, j- e" Z0 e end if . c/ z) T3 m4 I( j
next 8 B4 n, T1 \; a0 N5 c
UnEncode=temp
4 H, ^- \3 e+ r" m! u' M end function
2 s! b. T& p& _0 B' t. W
( z1 Y: f6 T" W9 \, l; W) h* i. }, m2 ~
将以上代码以test2.asp名存盘。5 I }( x1 J. f I4 p1 B# [' P1 l, s
$ B; p5 _' @2 F/ u" s
(4)用SRCENC加密test2.asp
5 }3 ~8 ?% H1 d. E3 U7 _
' {* T$ x) S X9 ~ 用SRCENC加密test2.asp,然后把它发布到服务器上,这样别人即使得到该文件、破解了SRCENC加密,也无法看到原代码,因为原代码在test2.asp中是密文(Hu=”c2V0IHJzPXNlcnZlc...),所以ASP代码就被保护起来了!/ A4 A' R0 ^' i3 r
* f: D+ ~& M# B: q; Q& z 二、加密过的asp程序如何解密?
5 Y+ q/ T6 o3 l+ q7 s: T7 s1 O+ e# J- M3 j. N
如何对加密过的asp程序解密呢?首先我们要告诉大家,用组件法加密的asp程序是无法解密的,而screnc加密过的程序则可以解密,方法是:使用解密软件(ZWDECODE.EXE)。3 L8 o9 s9 R* x! R r, D
V3 a2 k9 v: E2 ^4 e
ZWDECODE.EXE(下载地址http://www.mydown.com/softdown/45/45183.html)可以对MS Script Encode加密的ASP文件进行解密,还原出源代码。* L$ O8 E; T/ H Q
, [$ d. }7 ?) F, f( Z (1)解密方法/ F# C) p) @ ~1 |6 E( C# ]
) E" L& g: {& O9 b
单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可恢复原代码:
& \4 }! J/ {" n& I8 r6 _! S3 T5 E" C( s @9 C
ZWDECODE <已加密asp文件名>
/ K* x: [1 y$ h% X5 }# X% N2 u& H$ k* s7 `# z
其中<已加密asp文件名>必需输入,该文件名可带目录路径;也必需输入,这是要生成的输出文件名,也可以带路径信息。
. r8 c$ p* j- n" R8 b o( \" M
+ A: m. c: s7 ^ (2)举例
( D' X) }( q5 z( U8 Q- S0 ]
$ ]/ ?" n5 u; E, C5 h# g& S 例如F:\22\lacl.asp曾被screnc加密处理过,现在要恢复其中的源代码,你可以在MS-DOS中输入以下命令:4 K k1 {* b$ ]0 K* f
' m! E/ s% c, M$ d8 R9 {
ZWDECODE F:\22\lacl.asp d:\ulacl.asp
; l# O( X& k0 ^
. N# V$ Q: J7 S 执行完毕,在D盘上就会生成一个ulacl.asp文件,打开该文件,你就能看到源代码了!
# F D7 z+ V$ B& m4 m5 @3 w |
|
|