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