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