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