|
|
ASP程序加密解密方法全面解析
( H8 @4 b; @& D+ }/ `3 D O I- E2007-08-18 16:417 s9 D1 H; T9 f" L) \/ o ]
目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法……
9 X6 K# N6 |. \! e* L. m7 h
6 s( h8 j) X; i9 Z 如今,用ASP技术构建的网站随处可见。由于ASP脚本是在服务器上解释执行的(无法编译),因此你辛苦开发出来的ASP代码,很容易被人拷去任意修改,如何保护ASP源代码呢?这是每个ASP站长都会遇到的难题,网上求解这类问题的帖子非常多,下面我们就来谈谈ASP程序的加密方法。) ~5 ~' T9 c b3 f+ b8 I
' R: F/ w3 Z* s! A. z/ I6 c: [5 w% H
一、如何加密ASP程序?
! l+ P* T" R/ m- O$ o5 a$ u6 d& S: J; _' W, \
目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法。
# c: [- p2 D& m! g* w0 W% k/ g# i" D; g7 w9 w* e
1、使用微软的MS Script Encode进行加密- r) }- W% ~4 e9 L7 o4 x( p
- R, J* I: i+ L# C
微软提供了脚本编码器MS Script Encode(下载地址http://www.itgene.cn/itgene/download/download.aspID=232),可以对ASP程序进行加密。这是一个简单的命令行工具,其执行文件是SRCENC.EXE,需要在DOS下运行。它只加密页面中嵌入的脚本代码,把网页中之间的ASP代码转换成不可读的乱码,其他部分则保持原样不变。加密后的程序,必须使用Internet Explorer 5.0以上版本才能正常浏览。# i4 [+ _) W& f5 E/ ~; P
( S' p0 x/ B% d g" n1 ^, R 用SRCENC加密之后,文件中被加密过的部分将变成只读类型,假如你修改了加密部分(哪怕只改动一个字),就会导致整个文件不能使用。对于 VBScript,加密后在源文件的第一行会显示:<SCRIPT LANGUAGE="VBScript.Encode">;而JScript(或 JavaScript)则会显示:<SCRIPT LANGUAGE="JScript.Encode">* m, y2 m+ w* [/ w- ]' V
+ q/ b. n; r) i; [7 b (1)加密方法
2 Q- T, h( f5 e5 y! r3 \' t$ b2 y8 F" h1 p
单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可对某个asp文件加密:
K0 D( B# w. `$ b- G; h) j' M; y. t( Y" }
SRCENC [switches] <要加密asp文件名> <加密后的文件名>; h. N: s& h; U: _& E3 R3 m/ l
8 P) i) {; m2 U- H 其中[switches]项目可以选以下5个参数
6 k% L/ E: K! _7 s! k- j: [! [; M3 x) R% C& N
[switches] 含义 举例( o- A1 K/ O5 j
1 Q) ?; G9 Q9 r" Z6 t2 L /s 可选。命令中带了该参数,加密过程中屏幕上就不会有输出。 screnc /s lacl.sct ulacl.sct
! _# T& g7 V8 a) d' E5 r: ^8 c
# D& T" i1 }$ x: u f" s9 y( a 对当前目录中的脚本小程序lacl.sct加密,加密过程中屏幕不显示任何信息
- p. V6 \' q* @, `- A& l* T8 ^9 p( y- t, p- N
/f 可选。指定输出文件是否覆盖同名输入文件。忽略,将不执行覆盖。 screnc /f lacl.asp
6 R7 @2 _9 u' Y- v) a! X8 X4 c2 N' b6 e2 G/ n
对文件 lacl.asp加密,并用编码后的同名文件覆盖原文件
- w, o7 K A' {1 G# F9 A$ b% l) V( \/ k% f, V
/xl 可选。是否在.asp文件的顶部添加@Language指令。忽略,将添加。
4 e; _6 ?" y, t6 y/ }1 q
& R: a# w; e" _ w /l defLanguage 可选。指定Script Encoder加密中选择的缺省脚本语言。文件中不包含这种脚本语言特性的脚本将被Script Encoder 忽略。
' K, t( G+ t( M& K' X% s
2 W9 b) W. v0 }# c 对于HTML文件,JScript为内置缺省脚本语言;对于ASP文件,VBScript为缺省脚本语言;对于扩展名为.vbs或.js的文件,Script Encoder也有自适应能力。 screnc /l vbscript lacl.htm ulacl.htm
% Z7 M; V) d* a" J: F* [
" p" f Q1 v% [; m% k' o2 u1 `0 v' c 对文件 lacl.htm加密,并生成输出文件 ulacl.htm,确保没有指定语言属性的脚本块使用 VBScript( z: a9 E' W+ Z
- K6 k* A4 s; g$ I& b& h
/e defExtension 可选。指定待加密文件的文件扩展名。缺省状态下,Script Encoder能识别asa,asp,cdx,htm,html,js,sct和vbs文件。 screnc /e asp 11\*.* f:\labxw-jm+ T) w2 }: a6 l. _8 q. y
$ d' M- Z- r8 L6 P
对11目录中的所有.ASP 文件进行加密,并把编码后的输出文件放在f:\labxw-jm目录中
; }6 \7 g' z8 K( r) b4 S; x* f- @1 R
(2)操作举例, ~/ [8 `% N3 d2 Q0 G: m
. E& o+ U8 m; L' a) [ 例如要加密当前目录中的lacl.asp文件,生成加密文件ulacl.asp,则在DOS下输入命令:* S" e3 U( X$ I
" t" L% s9 G1 y screnc lacl.asp ulacl.asp
" e0 p$ b) `+ d- J$ R% g8 G, F
0 \% O3 ~. K% y& H) `# N 对当前目录中的所有 .ASP 文件进行加密,并把编码后的输出文件放在f:\labxw中,则使用命令:
+ |) e% w4 U5 T; ^3 Y
1 C4 i( `" ~2 [" y screnc *.asp f:\labxw
$ h5 |( \. w3 o/ A$ W* U$ L5 _
: L, o! A" l' I* x, }$ D 2、使用组件加密asp* U0 L3 b7 Q$ i! H
; _& y2 ?* C" X' ]6 e
以上被screnc加密过的程序,是可以解密的(解密方法下文有介绍),如果你想彻底保护自己的asp代码,可以通过开发activex dll组件的方法进行保护。5 M: s( f4 E3 {, c
* a' ?6 S4 x; I) W
Dll文件是被编译过的机器代码,如果没有源项目文件,是不可能被反编译的,所以组件加密这种方法最安全,也不可能被破解。下面我们来举例说明操作过程,例如你要保护以下asp代码:
1 c6 [% m! f- N0 E4 q
2 D+ x$ O* q9 G# I* X1 b5 C, D" A/ ^ set rs=server.createobject("adodb.recordset") & r6 L) _0 W4 I, b
sql="select * from gq where xs=1 order by date asc" 3 U! a* |# r! z! r2 g6 N* {/ z
rs.open sql,conn,1,1
2 f. m: N" k# s3 ?. u# \ if rs.eof and rs.bof then
4 r$ X5 b2 t# e1 k/ ^ response.write"<A HREF=new0.asp?lbid=gqx ><%= gqx %></A>" - E( @1 f4 N6 @& l& U
else
1 k. J9 v/ m1 ]6 \/ }' n B: i Response.Write "" 0 t% G* ?4 T) r" a6 o' _+ y% Y
end if
; ^& p# z8 G1 x3 T" g9 \ set rs=nothing ; @" k0 G' |- h
conn.close 5 @- u: a; n0 u4 m8 B5 Y
set conn=nothing
; ?9 f8 m; N& M+ i1 `5 D% b# k& o& j" N9 V
可以把它们改写成VB组件,然后在ASP文件中调用组件即可。操作步骤如下:4 I0 a. h* f, U5 R* ~
' [% [. f+ S) v* j$ A+ U+ ` (1)新建一个vb6的activex dll项目3 z( P* K' K* i) S4 w4 X
8 O! k0 B; v( u# ^ R& R+ Z+ ` 在属性窗口中,命名你的库模块和项目文件(例如项目名lacl,模块名disp),以后在asp文件中,调用的对象名将为lacl_disp
- c# s1 P; s& O7 B u) o8 ]- k' d1 m' O! S( D+ ~& w8 Q
选择vb6中的项目菜单中的references ,选中microsoft activex data objects 2.0 library& ?5 O. l0 Y; T7 `" V) I1 l! m2 B
2 N! m- Q% E. }6 s2 ^$ V (2)编写VB组件! v, N/ @5 ~! w) i2 i- P4 L
; H' _3 z: P8 {2 U' s$ P2 [
接下来把<欲保护的asp代码>改写成VB组件,代码如下:! n) E& q; y0 o7 }; K
5 ?8 V2 O& \' U# [ W public function html_combo(disp_table as string) as string
) y8 r# V0 X: p, C: v& |2 r% [2 N0 W5 ` dim outstring as string g7 s1 Q* I1 ~; t- E
dim conn as adodb.connection * g1 E# U) t! {$ b
dim rst as adodb.recordset . S$ s5 G6 k# y0 E7 S
dim sqlstring as string + d4 ~% m: u6 {
set conn = createobject("adodb.connection") 9 H8 T" |1 I" u7 w, A
set rst = createobject("adodb.recordset") 7 Z8 {8 I) T; ^4 M3 D& r o
sqlstring = "select * from " & disp_table & " where xs=1 order by date asc"
, t y" @0 X' D# } '以上是在VB中打开数据库操作,数据库中的表名、字段名,你可以根据自己的需要修改 5 k& u. H! h+ p' Q) T: y
conn.open "dsn=sumnet" . L" s+ q- B' B# ^
rst.open sqlstring, conn, 3, 3 " D/ Z, u5 A' u4 |; s
if rst.eof and rst.bof then + P% ] t9 c, h K/ j& G+ m
outstring = "还没有这类单位信息" , }; v! i6 W; [( t( ^/ ~
else
# m! B' q2 k: O rst.movefirst 6 L8 g$ E b0 a$ \3 j% h; I/ A% \
outstring = "<A HREF=new0.asp?lbid="&request("lbid") & "></A>" 8 @& q5 n, e4 M- [/ B0 B2 u
end if
; f- f) e+ g, R8 z" N7 v html_combo = outstring / K' o" \. q% p3 \/ V
rst.close . l0 ~1 G3 n: B6 O A1 V' A
conn.close 3 t9 G' B. l8 Z8 o" i
end function 2 N5 z# v' i. T
% P9 M# U& P2 K! H: F, ^8 q- s9 S7 s( c
写好以上VB代码后,保存项目并开始编译。: g- ^9 o+ b( S; N! E+ j0 [1 ~ X
0 W( D2 N3 l! ^8 w (3)生成安装文件: L2 m A0 x* ]8 O# M. i
" k: ]" |9 b7 U, d% Q# ^
打开visual studio 6中附带的package deployment wizard程序,选择刚才建立的activex项目文件lacl;选择package,选择要打包的脚本或使用默认脚本,选择标准安装,为生成的安装文件选择一个存放目录,选择single cab. 其他均默认;然后单击下一步,安装文件就自动生成了!0 |6 p) ]' p3 e- r" ~: c+ V4 D
) U& M, U. G& W1 `1 m1 }
(4)在IIS服务器上安装组件
J4 S1 y1 e1 |8 c2 w7 C8 h. T- T+ P7 v6 U
在IIS服务器上运行这个安装文件,把组件安装到服务器上。
/ r" j/ C# j6 _8 P8 l8 U% C1 j$ R4 J- g! p2 m
(5)在网页中调用组件
; g, t. m9 M) J1 p4 @9 Q4 q
" e. L- I* F2 h; m6 @+ M 以后在ASP文件中,通过调用该组件完成原来的功能。在网页中调用你制作的组件,方法如下:# l6 m: u( D% F9 T" b
( |+ ? @, w5 _2 q" n. F2 i
<%@ language="vbscript" %>
8 k9 O, e8 `! [ Y2 Y <%
|0 {6 D t8 z, R, k set diaoyong = server.createobject("lacl_disp.disp") ' a3 T& ^* U7 o+ \
%> $ O- t5 |7 Y$ F Q
<html>
[4 X2 f$ O0 ~/ g g0 ?" Y <body> # Y" }$ ?1 g/ Y' c9 b
<%= diaoyong.html_combo("gq")%>
6 C) Q3 E: M3 B1 I: ^7 M <br>
# u8 j! v' S# Z. N7 Z </body>
% P- {, f( K* J* e ]4 F# f3 @3 x </html> 8 l; J, d& u+ s; O- T* y" l8 Q
% J; w/ p" |" O! O( ~( X {) s( j
: v6 E1 q. {! e7 S 你看,现在Asp文件中的内容只是组件的调用(与以前完全不同),别人即使得到该文件,也无法编辑修改源代码,因为代码都被封装在VB组件中了,对于组件中的代码,外人是无法看到、也不能反编译的!
1 b7 c# J% S8 M) _( A0 S2 X O! k
6 r0 o& A* N" [) b- }4 C# {- }! d 3、自己编写加密程序1 R8 ~+ L3 y1 S2 x$ h- c2 |
6 |3 Y7 _' S& {/ D
组件加密方法虽然不可破解,但是要求你熟悉VB编程,需要把ASP代码改写成VB组件,工作量很大,所以建议大家自己编程来保护asp代码,其基本思路是:写一个加密函数base64Encode和解密函数base64Decode,先用加密函数处理<要保护的asp代码>,得到对应的密文hu;然后再用execute(base64Decode(hu))替换<欲保护的asp代码>。$ b& _+ `3 v5 _$ A3 K: _
' f5 B. ^; U. g" T0 ] 例如我们要保护上面那段asp代码,可以这样操作:- t4 U$ B/ q% ]* {
/ I8 W7 O. d4 h' W (1)用WORD处理<要保护的ASP代码>
' z, f+ M9 Y. A9 ] ~
2 q3 @9 `. G! d& D 将<要保护的ASP代码>拷到WORD中;在WORD中,把代码里的段落标记(回车换行)全部替换成“水”这个汉字,方法是:点击“编辑”/替换,光标移到“查找内容”栏,点“高级”/特殊字符,选择“段落标记”;光标移到“替换为”栏,输入“水”,最后点“全部替换”。同法,把代码中的单引号也全部替换成“加”这个汉字。' m, r, H! Q: J
# E0 g& J6 B! a. P6 ]
(2)编写、运行加密程序
O" g' g$ ?! U
3 P( A1 E" g; t+ F 在FrontPage中编写加密程序,该程序中有初始化函数initCodecs、加密函数base64Encode(代码如下),把WORD处理后的代码,copy粘贴在inp = ""这句中,最后以test1.asp名存盘;在IE中输入http://127.0.0.1/test1.asp本地运行该文件;屏幕上会显示一大段乱码(例如c2V0IHJzPXNlcnZlci5jcmVhd...),这就是《要保护的asp代码》对应的密文!9 H3 P2 g5 F0 U
. _5 U% M" v* v' I5 w OPTION EXPLICIT ) u7 K w; U0 S# O a! v% R1 w
const BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" 4 ~# o) H) M9 C
dim newline
0 d" n: Y: f; d% E dim Base64EncMap(63) : p" b9 _7 ^- Z
dim Base64DecMap(127) Q9 i/ E4 Q( y ^
dim inp,hu,encode
6 j$ m4 x- A2 k call initCodecs '初始化
+ M/ [7 X& ?4 V inp = "<WORD处理后的asp代码>" '将要保护的asp代码用WORD处理,然后填在此处
% X. i, V- m+ v7 _' n0 {5 \ hu= base64Encode(inp) '调用函数base64Encode进行加密,得到密文hu
@( E+ M9 B$ ~$ _ Response.Write(hu) '显示密文
8 `! H8 X Z4 k& y1 Y PUBLIC SUB initCodecs() '初始化函数initCodecs ' n, N9 P4 n/ g* g% ?
newline = "<P>" & chr(13) & chr(10)
2 \9 V' G9 p5 n' ?4 a0 B& W! n% z dim max, idx ' }3 \- Z9 h+ P& \8 k; I2 d" }! X
max = len(BASE_64_MAP_INIT) 9 R* ~( ?2 w3 P. E8 g
for idx = 0 to max - 1 3 e6 K4 I. ]9 M8 e1 d# G# t. N5 N
Base64EncMap(idx) = mid(BASE_64_MAP_INIT, idx + 1, 1)
0 C) ~* k" ~, P9 Q% u next ! O! M$ p) f" t5 i% t% k4 v2 w4 i
for idx = 0 to max - 1
" W" G+ _. f' n# v- F% j$ Q( p Base64DecMap(ASC(Base64EncMap(idx))) = idx
$ D S. q9 n+ W. @ next % l7 f5 U2 `4 _( }" u7 E
END SUB 6 _6 }9 w: E/ C& F0 k
PUBLIC FUNCTION base64Encode(plain) '加密函数base64Encode 9 y% H: v6 Q/ Q- @6 T' d. C
if len(plain) = 0 then + P5 m. T: _/ t
base64Encode = ""
$ H: ?4 u3 U2 Q6 ? exit function & H8 Q5 k% U4 z" C$ X
end if
Z7 }6 P) d, z; t- i3 @ dim ret, ndx, by3, first, second, third
6 ` N2 @3 D* X2 r by3 = (len(plain) \ 3) * 3 0 Z3 C. F9 Y- N
ndx = 1 5 y* l; {& ~7 o$ ]# `
do while ndx <= by3
3 ^+ P7 n, L, w: y% T& E first = asc(mid(plain, ndx+0, 1)) $ }" L1 v$ X' `6 H7 O
second = asc(mid(plain, ndx+1, 1))
! r+ o: A( v4 S% P6 c third = asc(mid(plain, ndx+2, 1)) 7 _& F8 O4 e6 P. K* _5 i, Q+ ^
ret = ret & Base64EncMap( (first \ 4) AND 63 )
" S4 x+ v/ @- r# n5 H ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) ) ?$ @ w' @1 c! v: y
ret = ret & Base64EncMap( ((second * 4) AND 60) + ((third \ 64) AND 3 ) )
4 j+ U7 S( R1 b1 Z2 ]4 W3 i% T ret = ret & Base64EncMap( third AND 63)
* s' W7 Q2 L. L# F4 ^1 Z ndx = ndx + 3
. S% `7 K- y$ U loop " |/ n8 w* c+ v" e1 {0 b3 k p9 o
if by3 < len(plain) then * V# A0 V0 J$ Y7 C5 w
first = asc(mid(plain, ndx+0, 1)) / d* l1 n( H2 E0 y( b1 \; g
ret = ret & Base64EncMap( (first \ 4) AND 63 )
* ]9 b; x% v/ M* U0 I) x ?' ~+ [ if (len(plain) MOD 3 ) = 2 then + z% t: O' ^8 O- Q' X
second = asc(mid(plain, ndx+1, 1))
3 o _* ^" T' P' q* _ ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) ) 7 l3 s e( t4 Z9 i+ [9 v+ s
ret = ret & Base64EncMap( ((second * 4) AND 60) ) " o- k( \' e! e! i% _
else
, f$ g: l( J( ]; L8 _# S6 o ret = ret & Base64EncMap( (first * 16) AND 48)
* m a; j1 ~2 N8 O5 s ret = ret '& "=" 9 X5 w/ O/ W; X& h9 ?: L
end if 5 q* h- [, V! V' P: A8 Y$ A {
ret = ret '& "="
7 p9 R( r1 P6 I, J* L* R$ p end if
" Z) [) C1 e# J6 T$ F' b base64Encode = ret
+ s5 x. T4 _4 |# Z7 O' k END FUNCTION
6 j; x! R% p, n7 m8 w/ k
) t- B9 a9 u* S2 N (3)重新改写要保护的asp文件
' v( b2 W6 z4 k
9 |. F- y' ]* u" p. G: | 改写原来的asp文件,在文件中增加UnEncode 和base64Decode函数,全部代码如下:+ N! a9 T, e- Q: X3 {
/ q; l( I8 K* c+ i$ s+ |
Dim Hu,Hu2
$ u4 \+ U* v+ e7 q( O6 I' ~ '拷贝“欲保护asp代码”的密文 将之存放到Hu变量中
7 W; ~6 j$ u/ s% R0 Q( y0 [ Hu=”c2V0IHJzPXNlcnZlci5jcmVhdGVvYmplY3Qo12Fkb2RiLnJlY29yZHNldOMpICAgICDuc3FsPeNzZWxlY3QgKiBmcm9tIGdxICB3aGVyZSB4cz0xIG9yZGVyIGJ5IGRhdGUgYXNj1yAgICAgsnJzLm9wZW4gc3FsLGNvbm4sMSwxICAgICDuaWYgcnMuZW9mIGFuZCBycy5ib2YgdGhlbiDucmVzcG9uc2Uud3JpdGUTvSD7INAg5iAgILUgvyAFILITsmVsc2UgsiAgICAgUmVzcG9uc2UuV3JpdGUg1zxBIEhSRUY9bmV3MC5hc3A/bGJpZD0TJnJlcXVlc3Qo12xiaWQTKSAmIOM+PC9BPuPuZW5kIGlmICAgIL5zZXQgcnM9bm90aGluZyAgICAgICAgsmNvbm4uY2xvc2UgICAgICDuc2V0IGNvbm49bm90aGluZyAgIL4” & L4 N, j0 I; w* T1 V. ~
Hu2= base64Decode(hu) '还原要保护的ASP代码 - d, }7 a! S/ `1 Z
execute(UnEncode(Hu2)) '还原单引号、回车换行,并执行原代码 ; g* J8 g* m, b ]. [( W% I1 f
’解密函数base64Decode ! Z x) g$ v, D* K0 b
FUNCTION base64Decode(scrambled)
5 S# F$ o. X; ]# j% |: U* ? if len(scrambled) = 0 then 6 _$ p% p) e1 A( z; ^2 J% h
base64Decode = ""
" c+ u( `8 Z. g6 I' }+ i( r2 G exit function
8 [( M6 U0 a A+ L end if
% P& t, m% A5 Y$ i+ d dim realLen
1 l0 D7 I6 X. _1 g' f( l realLen = len(scrambled)
3 @- ?9 Y/ c# Q; S9 e+ E do while mid(scrambled, realLen, 1) = "="
- j6 J5 I# Q: ]+ K) |" o realLen = realLen - 1 $ j1 j- W3 X. g+ l" d; w
loop 2 M) I, w8 P6 I7 o
dim ret, ndx, by4, first, second, third, fourth
8 l$ I% }5 Y' n1 T a% M- v) W ret = ""
) ^5 y$ Y( R ?* u7 r by4 = (realLen \ 4) * 4
+ n! V! \2 r! T$ G7 \ v6 s ndx = 1 ; E4 }( Z6 W, q- r! K
do while ndx <= by4
$ ?( T" R/ V' I2 D* j k first = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
9 l2 u, W5 A( v/ H1 I0 x second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
3 M9 [0 @. g. o* O third = Base64DecMap(asc(mid(scrambled, ndx+2, 1))) + ~! z; ~# P; O Q
fourth = Base64DecMap(asc(mid(scrambled, ndx+3, 1))) ; b1 p! J9 B5 F
ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3))
* G; ?/ [0 ~4 ]& t7 L ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15))
+ m, b# u: t2 z9 ^- H* @ ret = ret & chr( ((third * 64) AND 255) + (fourth AND 63)) / o2 q3 k+ s2 u
ndx = ndx + 4 " B" Y% x9 m. @& z2 w* ]# U* y: [
loop
9 f! z/ L3 E, h, Z$ j: d, y) t if ndx < realLen then ' e. Z9 q2 _% w* x# @% o" H
first = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
1 J3 H2 y! c }2 ?: V+ J+ b second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
1 M, e0 E" G3 M3 W% S" u( l8 U ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3))
+ r$ b8 g e* d( [' v/ |. q if realLen MOD 4 = 3 then / O0 {/ K0 q4 O- i5 b; R8 W; o( u
third = Base64DecMap(asc(mid(scrambled,ndx+2,1)))
% S6 \$ d+ O0 ]# z6 W; u* e- j ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15))
W" t7 b* V4 Z1 t3 ^ end if ) l# l+ T) s: G! t5 B
end if
& t& M+ I) ~2 p# [ base64Decode = ret
' I3 q6 Y ]/ h" k- M& A' f2 Q% t END FUNCTION & A$ W4 p4 \/ F0 W) B- P
'还原单引号、回车换行函数UnEncode
+ Z- T, x8 L. K function UnEncode(cc) . e4 ]& `' p/ q* w
for i = 1 to len(cc)
7 ]' I2 u; X1 i0 k if mid(cc,i,1)<> "水" then ) H, K) r; y7 L& p% y4 A/ M8 \
if mid(cc,i,1)="加" then ) F5 }& {1 [' l" s3 ?# z9 k: Y( N2 N6 L' A
temp = """" & temp " B: J* W4 \4 m: U9 K5 o3 [
else 2 P3 t; n, C/ H6 i4 i6 N% F
temp = Mid(cc, i, 1) + temp
/ [ \" P+ g. W) V# i, W end if
7 _) I- M+ w/ Y else
g* L+ y. u% e; O) s temp=newline&temp * I" I! b' [/ l" k/ A
end if ' K/ F, j+ b/ }( u9 n4 L& Y
next
) N" B; S' Z0 y UnEncode=temp / w3 v2 j# f( p# f/ n G
end function
k$ C7 A, K4 P: c* Z+ ^ \1 I- c9 f# h$ d) i9 V. h
4 T" ?; T* |- B/ o/ R& C
将以上代码以test2.asp名存盘。( G- U. _) M9 f* L* }
3 p; I( |8 _' @/ F8 Q
(4)用SRCENC加密test2.asp
0 ?2 [7 b( t6 O7 i! z: f) L" T2 w7 o$ R6 ]# k. q. A, M0 ^
用SRCENC加密test2.asp,然后把它发布到服务器上,这样别人即使得到该文件、破解了SRCENC加密,也无法看到原代码,因为原代码在test2.asp中是密文(Hu=”c2V0IHJzPXNlcnZlc...),所以ASP代码就被保护起来了!# [; N% B3 l/ a$ F# O! ]% e+ D' [+ T
. ^( Q8 J6 H/ h0 J
二、加密过的asp程序如何解密?
2 M& E6 j9 E3 e- y$ n" _- s% k9 F0 c- H% a: T* Z( A) W
如何对加密过的asp程序解密呢?首先我们要告诉大家,用组件法加密的asp程序是无法解密的,而screnc加密过的程序则可以解密,方法是:使用解密软件(ZWDECODE.EXE)。1 o+ {! \3 T% v$ s* @; u x
: i5 _6 D( Q0 r, i0 h( \7 Y& }
ZWDECODE.EXE(下载地址http://www.mydown.com/softdown/45/45183.html)可以对MS Script Encode加密的ASP文件进行解密,还原出源代码。
4 \1 R- e7 u+ w/ x( B/ z; j) {4 @* H* W( @2 `
(1)解密方法- p f3 T& M* i/ ~
8 C% g7 J' A; g4 [1 L4 t
单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可恢复原代码:$ X7 \0 w; j: P) O) y: G' e
4 N6 u. h+ s# K, @8 n ZWDECODE <已加密asp文件名>
. n4 i% L D v! i8 L* {7 l* F: r8 n- A; k
其中<已加密asp文件名>必需输入,该文件名可带目录路径;也必需输入,这是要生成的输出文件名,也可以带路径信息。5 E R: R7 b7 C0 }0 J+ s/ E
0 a/ _5 {: B: X6 b8 F7 a( p. _# P (2)举例& }& ~3 z. q' j9 C& @% y5 {) C
6 Z" X- h: Q) q8 Z( U1 Z% R
例如F:\22\lacl.asp曾被screnc加密处理过,现在要恢复其中的源代码,你可以在MS-DOS中输入以下命令:) J* Y# ?5 d+ z# f/ n
, o B% t9 h0 y
ZWDECODE F:\22\lacl.asp d:\ulacl.asp% w1 o1 _2 ^" g. I
& `7 P& U- M! J7 S# ` 执行完毕,在D盘上就会生成一个ulacl.asp文件,打开该文件,你就能看到源代码了!
6 N$ o1 f( c; k: r |
|
|