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