|
ASP程序加密解密方法全面解析
- c+ x$ D% [, S# R- r2007-08-18 16:41
9 X5 D7 ]3 |0 y; P# R0 f) m! J+ A 目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法…… ' i1 |+ U O1 ^0 g
k" Q2 n0 K) D2 E8 f, w 如今,用ASP技术构建的网站随处可见。由于ASP脚本是在服务器上解释执行的(无法编译),因此你辛苦开发出来的ASP代码,很容易被人拷去任意修改,如何保护ASP源代码呢?这是每个ASP站长都会遇到的难题,网上求解这类问题的帖子非常多,下面我们就来谈谈ASP程序的加密方法。
+ t" Y$ Y: p! x, N( O3 A1 p) g
$ {, R# v' }* N. l 一、如何加密ASP程序?
`* d, a, S" h* Y" ]
1 K; u' d: i3 K 目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法。
4 [, a/ t6 e( n+ M: \1 ]2 U% x' f7 n
1、使用微软的MS Script Encode进行加密
, O4 G1 ?" N& M! W, ~8 g. Z9 T) E- n ~8 D8 \+ P
微软提供了脚本编码器MS Script Encode(下载地址http://www.itgene.cn/itgene/download/download.aspID=232),可以对ASP程序进行加密。这是一个简单的命令行工具,其执行文件是SRCENC.EXE,需要在DOS下运行。它只加密页面中嵌入的脚本代码,把网页中之间的ASP代码转换成不可读的乱码,其他部分则保持原样不变。加密后的程序,必须使用Internet Explorer 5.0以上版本才能正常浏览。
( w2 c N6 r, N+ d
$ v( k: l2 ^( Z, U 用SRCENC加密之后,文件中被加密过的部分将变成只读类型,假如你修改了加密部分(哪怕只改动一个字),就会导致整个文件不能使用。对于 VBScript,加密后在源文件的第一行会显示:<SCRIPT LANGUAGE="VBScript.Encode">;而JScript(或 JavaScript)则会显示:<SCRIPT LANGUAGE="JScript.Encode">8 m9 B3 q; _7 P4 P: Y8 I Z
" x# } D c- n, L2 W6 w
(1)加密方法8 p) N+ k; e8 \) Q7 P* Z
5 Q7 ?! K4 \7 ?9 }% r
单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可对某个asp文件加密:6 U3 e7 I4 Q3 @/ |3 a# r
2 L0 b! q* W8 h/ H# ?. s9 U# r( ?9 A
SRCENC [switches] <要加密asp文件名> <加密后的文件名>
6 t$ N R6 p3 [$ m) \9 o+ o& S. x( t2 H+ w. I
其中[switches]项目可以选以下5个参数
! Y6 ], Y& j- Q1 H, D* d$ ~. {- k1 C( |3 f3 {0 v3 b& `
[switches] 含义 举例
3 I5 U* T B9 _5 E. S8 w# [; F4 w% Z- z, i
/s 可选。命令中带了该参数,加密过程中屏幕上就不会有输出。 screnc /s lacl.sct ulacl.sct& O9 E, a/ b- ]4 Z2 g7 j2 o: y
, [ J: R8 u. f7 s/ A- I+ M8 @
对当前目录中的脚本小程序lacl.sct加密,加密过程中屏幕不显示任何信息- ? D" L; a c% h2 a I
# g9 w8 C6 L* S9 R- o$ T0 {4 `
/f 可选。指定输出文件是否覆盖同名输入文件。忽略,将不执行覆盖。 screnc /f lacl.asp
/ \. m* [. ?5 ~6 @- j/ o& N, e. n' v* }6 _
对文件 lacl.asp加密,并用编码后的同名文件覆盖原文件7 r5 ^/ j/ D# D* M/ o" @
5 J2 D0 }) [ J c
/xl 可选。是否在.asp文件的顶部添加@Language指令。忽略,将添加。
1 }# {$ l( w( g
# j; N3 b, C" c# j' H7 L /l defLanguage 可选。指定Script Encoder加密中选择的缺省脚本语言。文件中不包含这种脚本语言特性的脚本将被Script Encoder 忽略。& ]# F8 I k, M, |, U
# t/ G+ T& B# D( f! F" G 对于HTML文件,JScript为内置缺省脚本语言;对于ASP文件,VBScript为缺省脚本语言;对于扩展名为.vbs或.js的文件,Script Encoder也有自适应能力。 screnc /l vbscript lacl.htm ulacl.htm1 J$ e. ]" [8 l. a; e, f+ Z* o
. }1 m- l7 T6 b# m+ Q+ m- G* k/ M
对文件 lacl.htm加密,并生成输出文件 ulacl.htm,确保没有指定语言属性的脚本块使用 VBScript
+ s% `) b9 P& y3 U5 S7 o5 ~8 ^7 i9 q- \
/e defExtension 可选。指定待加密文件的文件扩展名。缺省状态下,Script Encoder能识别asa,asp,cdx,htm,html,js,sct和vbs文件。 screnc /e asp 11\*.* f:\labxw-jm
/ T% a9 E5 f7 u9 ?& ?4 h) G, ^2 E, H2 _
对11目录中的所有.ASP 文件进行加密,并把编码后的输出文件放在f:\labxw-jm目录中1 e) [# k- n, g1 M4 e" Q& N& y. f
7 u, n9 }8 |6 S6 M& ^
(2)操作举例
+ ]+ i3 x" B K$ X1 m
" y1 }8 d8 q8 h, M 例如要加密当前目录中的lacl.asp文件,生成加密文件ulacl.asp,则在DOS下输入命令:
# a+ F( j" B9 B" B" z! _# q: s/ e5 h
8 o7 U9 _* A5 c6 s9 Y2 ^ screnc lacl.asp ulacl.asp* J; Y* M3 m, C" A7 s
, _, ]% R5 o1 i
对当前目录中的所有 .ASP 文件进行加密,并把编码后的输出文件放在f:\labxw中,则使用命令:
3 B% @4 r) l: b% ~2 t( D- j+ j2 A j( m( `5 m0 F5 ?8 a/ ]( z
screnc *.asp f:\labxw6 @* D3 J' G: R
; U& k3 r, b+ z9 k; D) Q; j 2、使用组件加密asp& Q' g: o8 A2 Z* U, w/ G* F
! y( X6 p" d; @( n. V% \! U
以上被screnc加密过的程序,是可以解密的(解密方法下文有介绍),如果你想彻底保护自己的asp代码,可以通过开发activex dll组件的方法进行保护。6 O& e; I% x8 N
' J* K% G6 g$ r5 ]0 q Dll文件是被编译过的机器代码,如果没有源项目文件,是不可能被反编译的,所以组件加密这种方法最安全,也不可能被破解。下面我们来举例说明操作过程,例如你要保护以下asp代码:4 t, q$ J$ Q2 R! G( A; A
! U" m0 ~. v q* L4 Q: O# R9 R; r% r
set rs=server.createobject("adodb.recordset") 0 b7 B! U2 i- y0 q
sql="select * from gq where xs=1 order by date asc"
. y$ U; G) k, M" [+ k9 q7 H0 \ rs.open sql,conn,1,1 2 I& P" G; S! U5 ^* N
if rs.eof and rs.bof then
* m: Z+ i0 b7 D7 d% U5 Z response.write"<A HREF=new0.asp?lbid=gqx ><%= gqx %></A>"
5 H0 D7 V x. {" k, ]0 j else : h. D6 |( H6 g1 _
Response.Write ""
* c4 x$ {0 r! C) w( s end if j& z1 N# H' ~0 h- E% E
set rs=nothing + D' \. ]% Z3 G) ]7 R' O$ K
conn.close
. `3 ~- Q# A S9 d set conn=nothing
. I, s5 ^* w) I7 Z+ h, o f# h% ^ m, r9 h
可以把它们改写成VB组件,然后在ASP文件中调用组件即可。操作步骤如下:" Q" z- }: j7 w `# ~0 ^1 c
7 L6 \; B3 Y5 g4 P' `1 a: Z
(1)新建一个vb6的activex dll项目8 ~, B4 B( ~* s3 E! c) @7 w; _, ?
' |. _2 e% O7 Y; y' n8 w4 O ?
在属性窗口中,命名你的库模块和项目文件(例如项目名lacl,模块名disp),以后在asp文件中,调用的对象名将为lacl_disp1 ]& A( x: ?& w$ m: ?) s4 D
8 p5 e! b2 b; V% b% C 选择vb6中的项目菜单中的references ,选中microsoft activex data objects 2.0 library8 P/ w3 o+ i7 D, {
+ F) p1 G0 V4 i% q
(2)编写VB组件0 T5 d* e: O8 t, S5 |% L) b4 K4 u
* t3 z; i5 V# V& N; B 接下来把<欲保护的asp代码>改写成VB组件,代码如下:! c0 {. d$ d9 x, h% U4 A
U w6 r3 M% _
public function html_combo(disp_table as string) as string
" _, r4 Q |5 J& H- O dim outstring as string
, q5 I. W- W k* B) f dim conn as adodb.connection
+ h o% z; G: g, Q5 e$ s# ~ dim rst as adodb.recordset ; a1 A0 f* q: F- f. K2 }, W
dim sqlstring as string + Z1 z/ h8 P: V
set conn = createobject("adodb.connection")
w2 w8 s0 ]& U. S( u9 c set rst = createobject("adodb.recordset")
. @' Q2 G8 ~* T/ y sqlstring = "select * from " & disp_table & " where xs=1 order by date asc"
8 h2 n; L0 k- q, M1 H) A. Z# U1 v '以上是在VB中打开数据库操作,数据库中的表名、字段名,你可以根据自己的需要修改 9 p3 k' t* ]5 x7 }/ T5 A8 G
conn.open "dsn=sumnet" 7 ~+ S( k$ ]( U+ ?7 s. C
rst.open sqlstring, conn, 3, 3
n5 M6 |7 h5 K if rst.eof and rst.bof then
8 d: O5 }& M. r outstring = "还没有这类单位信息" 6 N; `0 e: o1 S
else 8 C" E- t- \6 q1 n8 N. x5 x) c
rst.movefirst
+ N$ f4 A/ I" g' M outstring = "<A HREF=new0.asp?lbid="&request("lbid") & "></A>"
q; k0 r$ r! K7 k6 [ a1 `# Z end if 2 ^/ a# T& A1 ~, e
html_combo = outstring
# S8 y7 v3 T6 l- B3 } rst.close
' r. E* ]* x% u, a. {' \ conn.close
1 p' a; t* z% M; y# L end function 2 v, d4 \' }, }0 N5 e
q5 j" L' B5 e8 Z
写好以上VB代码后,保存项目并开始编译。
$ x) S: E* Q0 F# H$ Q4 a' D
3 x5 d+ u+ q% o) ~7 N& v' {& V. d (3)生成安装文件
9 _9 A# E! s8 ~% S/ t3 [: z4 a) c% f4 D7 t3 H
打开visual studio 6中附带的package deployment wizard程序,选择刚才建立的activex项目文件lacl;选择package,选择要打包的脚本或使用默认脚本,选择标准安装,为生成的安装文件选择一个存放目录,选择single cab. 其他均默认;然后单击下一步,安装文件就自动生成了!
8 N; Q" C. {9 l3 [9 f4 \! v
+ Y* N+ M3 u8 F/ v: }% Y1 ? (4)在IIS服务器上安装组件
- i0 Q+ X4 I; w+ L: ~; R, |' G7 k# q
在IIS服务器上运行这个安装文件,把组件安装到服务器上。8 S8 Y1 L% E1 m2 M6 T7 J1 J
% D$ C; }6 F. H) @' Z (5)在网页中调用组件
( _: P% V2 v) e2 r* f$ ]8 i5 B
- N# t U$ y1 k* |" Y4 s( p 以后在ASP文件中,通过调用该组件完成原来的功能。在网页中调用你制作的组件,方法如下:: T/ `! X2 O1 D: ]
1 r" b# n3 i$ q
<%@ language="vbscript" %>
' @2 M! U* l c5 a# Y <%
; ]. u$ L, x. I7 H9 w0 c/ _. c7 C set diaoyong = server.createobject("lacl_disp.disp") 6 C/ f6 g* O2 T* x5 P
%> + D4 H4 r; X W8 E
<html> D% ^: w4 T6 ?2 e
<body> & q/ H& f7 u# m$ n* G8 b ^
<%= diaoyong.html_combo("gq")%> - j$ Q! ]! H0 Z l
<br>
2 b6 {( v' d. b8 P$ X O </body>
+ [) O/ z! P7 W4 s. _( E </html>
1 R% A: y. H+ E, {# w4 P' |6 x* s) D/ ?- |- N& h& b. a
/ N W( ^( M( k/ V5 \
你看,现在Asp文件中的内容只是组件的调用(与以前完全不同),别人即使得到该文件,也无法编辑修改源代码,因为代码都被封装在VB组件中了,对于组件中的代码,外人是无法看到、也不能反编译的!, \' ?. U# {+ ~0 _ J4 V4 S
- ^, \4 a5 @2 S3 p; u 3、自己编写加密程序1 [! q7 B" X9 }
% d# }5 A, g1 |! y 组件加密方法虽然不可破解,但是要求你熟悉VB编程,需要把ASP代码改写成VB组件,工作量很大,所以建议大家自己编程来保护asp代码,其基本思路是:写一个加密函数base64Encode和解密函数base64Decode,先用加密函数处理<要保护的asp代码>,得到对应的密文hu;然后再用execute(base64Decode(hu))替换<欲保护的asp代码>。
3 Y2 C0 I+ l2 q5 u8 ?2 |1 t
6 k B' ?; H1 F' q/ z2 {8 y) G+ d2 @ 例如我们要保护上面那段asp代码,可以这样操作:& i2 ?8 j4 O+ g4 y% o
8 y2 w0 P) f5 C8 B8 Z5 k/ b2 h6 X
(1)用WORD处理<要保护的ASP代码>
% p2 z5 p: p; N% d# A) c% o& s A7 B$ N) _! z
将<要保护的ASP代码>拷到WORD中;在WORD中,把代码里的段落标记(回车换行)全部替换成“水”这个汉字,方法是:点击“编辑”/替换,光标移到“查找内容”栏,点“高级”/特殊字符,选择“段落标记”;光标移到“替换为”栏,输入“水”,最后点“全部替换”。同法,把代码中的单引号也全部替换成“加”这个汉字。8 p3 ^( k: [7 }! m3 ]. e9 _* Y
: u$ G* [/ Y2 F; Z! H5 L1 s (2)编写、运行加密程序3 A/ }1 a* i0 p" N T9 }
# P& {4 D( C, d 在FrontPage中编写加密程序,该程序中有初始化函数initCodecs、加密函数base64Encode(代码如下),把WORD处理后的代码,copy粘贴在inp = ""这句中,最后以test1.asp名存盘;在IE中输入http://127.0.0.1/test1.asp本地运行该文件;屏幕上会显示一大段乱码(例如c2V0IHJzPXNlcnZlci5jcmVhd...),这就是《要保护的asp代码》对应的密文!
. C$ D" N3 x2 y( L" W" e
! u5 T! l; E: ~7 ` OPTION EXPLICIT
2 C; N' d3 [ U6 |$ ^ const BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
( q4 G3 ]1 w' H5 b; E; u9 Y9 E dim newline
$ E) T% X* I* T, O dim Base64EncMap(63) * [/ ^9 {* `. v+ @
dim Base64DecMap(127) % x1 P! S ~ P4 r; x
dim inp,hu,encode - E; M8 H' D1 l! D
call initCodecs '初始化
, J3 i, }) H/ J1 ^ inp = "<WORD处理后的asp代码>" '将要保护的asp代码用WORD处理,然后填在此处
% x u8 b; y3 u4 L hu= base64Encode(inp) '调用函数base64Encode进行加密,得到密文hu . O6 ~. {* w, N1 t; h
Response.Write(hu) '显示密文
$ P! D h9 S% s ]. T PUBLIC SUB initCodecs() '初始化函数initCodecs ) m+ E5 O9 J6 w
newline = "<P>" & chr(13) & chr(10)
& X, a9 Q6 v ?) O dim max, idx + u/ }8 S2 {/ X5 m |
max = len(BASE_64_MAP_INIT) 1 @/ n+ H& ^ X# m, r- C0 S; f
for idx = 0 to max - 1 , \0 S; N: Q1 F* H! P& t- E% I
Base64EncMap(idx) = mid(BASE_64_MAP_INIT, idx + 1, 1) $ y2 j0 t3 j; j+ i" X6 d0 B! l$ \
next 9 Q& b$ x( q. u. i3 o
for idx = 0 to max - 1
0 x4 b K/ J- T* ~, F Base64DecMap(ASC(Base64EncMap(idx))) = idx
) r" e6 J! l8 U( m) ?# P next
0 f0 l# P8 n3 Z; r" U) [& K END SUB
`0 J; t! R$ l, j/ ~6 E. ?, ] PUBLIC FUNCTION base64Encode(plain) '加密函数base64Encode
* p1 i' {8 k2 @0 x. G$ k if len(plain) = 0 then
1 w+ a: W' x3 J4 v base64Encode = "" ( b: [7 z" Q5 b
exit function ! C% q6 c$ R& K5 X! U
end if
: i/ s- q( J0 A' L dim ret, ndx, by3, first, second, third
: N; b1 t; o) I: k( x by3 = (len(plain) \ 3) * 3 : D& o9 j4 W% L: `8 u: @
ndx = 1 8 h' V7 a2 r& j2 p5 j7 Y9 {# k. x* E
do while ndx <= by3
, m& I: y. e/ h0 b$ y: S9 m. d8 B" c first = asc(mid(plain, ndx+0, 1)) + H* m, R7 e4 T5 Q( ~. C
second = asc(mid(plain, ndx+1, 1)) 8 U4 R. o& v6 u ^+ Z- x
third = asc(mid(plain, ndx+2, 1)) 3 c2 g, w- q7 E! X& a
ret = ret & Base64EncMap( (first \ 4) AND 63 ) / `8 h* j8 A- E' B9 i
ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) ) + v1 p o4 e0 `; v9 }0 `
ret = ret & Base64EncMap( ((second * 4) AND 60) + ((third \ 64) AND 3 ) ) 3 k& @' j9 `- w+ ]/ l
ret = ret & Base64EncMap( third AND 63)
" c4 |2 T' o7 V ndx = ndx + 3
% i" r" M9 T. x- {' T5 f# M loop 0 Y. k- d9 h9 h. q' o8 ?2 k% M
if by3 < len(plain) then 8 y. k( I9 i4 U
first = asc(mid(plain, ndx+0, 1))
) m" K9 G6 K4 h- ~# @: a ret = ret & Base64EncMap( (first \ 4) AND 63 ) + d3 p+ {& D1 o8 m9 z/ D
if (len(plain) MOD 3 ) = 2 then
$ J% Y) q. k# E second = asc(mid(plain, ndx+1, 1))
$ t1 R% _9 O2 {; y2 a ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
5 O f# [8 H: F6 x ret = ret & Base64EncMap( ((second * 4) AND 60) )
* K) X0 p- j- R6 h1 R5 L( n+ ? else 9 m, s C. s: _" {" p5 u
ret = ret & Base64EncMap( (first * 16) AND 48)
+ w3 [7 M: e. ^8 G( A1 x* Y5 v. o$ d, V ret = ret '& "=" 6 U3 [6 S' i5 |: j, t% J
end if : H2 G; M3 M% X4 N3 A/ f% H9 _5 K
ret = ret '& "=" $ Y' J; L) M' m* t
end if - x) p! `& X: P1 `
base64Encode = ret
3 Y, S& k, R, z" q% P- y/ v7 r END FUNCTION
9 r H3 K+ V; ~) h: l- H: y
+ b3 {1 i+ B p& { (3)重新改写要保护的asp文件
' z" \6 f' j6 ?. F2 I1 Y, t0 y* g& O- {9 @! t1 m
改写原来的asp文件,在文件中增加UnEncode 和base64Decode函数,全部代码如下:# F' ?0 B3 N; e" o' z
( k$ S/ u: d+ o8 r! l* B Dim Hu,Hu2 % G) q" J2 h. p& b8 d
'拷贝“欲保护asp代码”的密文 将之存放到Hu变量中
; B7 y0 }& M6 _) Z1 H Hu=”c2V0IHJzPXNlcnZlci5jcmVhdGVvYmplY3Qo12Fkb2RiLnJlY29yZHNldOMpICAgICDuc3FsPeNzZWxlY3QgKiBmcm9tIGdxICB3aGVyZSB4cz0xIG9yZGVyIGJ5IGRhdGUgYXNj1yAgICAgsnJzLm9wZW4gc3FsLGNvbm4sMSwxICAgICDuaWYgcnMuZW9mIGFuZCBycy5ib2YgdGhlbiDucmVzcG9uc2Uud3JpdGUTvSD7INAg5iAgILUgvyAFILITsmVsc2UgsiAgICAgUmVzcG9uc2UuV3JpdGUg1zxBIEhSRUY9bmV3MC5hc3A/bGJpZD0TJnJlcXVlc3Qo12xiaWQTKSAmIOM+PC9BPuPuZW5kIGlmICAgIL5zZXQgcnM9bm90aGluZyAgICAgICAgsmNvbm4uY2xvc2UgICAgICDuc2V0IGNvbm49bm90aGluZyAgIL4”
8 B- z0 j& t% B$ N, h Hu2= base64Decode(hu) '还原要保护的ASP代码
( A& E- t( m5 c' U) S execute(UnEncode(Hu2)) '还原单引号、回车换行,并执行原代码
. C! y5 {, b2 s' D" O/ j# { ’解密函数base64Decode 9 ?4 k( G; m5 I+ s8 `7 ?; P
FUNCTION base64Decode(scrambled)
; c) [( F y8 N" h8 ^, S+ d5 k3 ~ if len(scrambled) = 0 then
/ w& q9 T+ g! N base64Decode = ""
2 O7 }) M7 S6 q) e" g- I1 X exit function 6 t9 X; o5 t! o$ L9 ?% F
end if
5 C! X3 M7 h& I dim realLen
, C5 o8 Z2 ~" E# E1 i realLen = len(scrambled) & X" r$ _7 S* Q8 B9 I) Y4 q- \
do while mid(scrambled, realLen, 1) = "=" " [9 f. `7 x5 _7 r' x- Q
realLen = realLen - 1
( a2 z2 Y5 ?) ?; I+ s loop
6 A3 @8 j: X/ w( q9 {9 P) I' m dim ret, ndx, by4, first, second, third, fourth
+ w/ r f! s9 J, o/ z ret = ""
9 i* v+ `8 F) ]* C$ _4 ~ by4 = (realLen \ 4) * 4 " ]4 w$ Z3 W1 [, G+ ^8 c3 K
ndx = 1 & V( u. d& K& {# g
do while ndx <= by4 $ z1 ~ d" q4 B4 p
first = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
$ ~5 _2 {0 `6 L: D0 C0 g+ F, Y8 x second = Base64DecMap(asc(mid(scrambled, ndx+1, 1))) ; ^) A" ` n& K0 d
third = Base64DecMap(asc(mid(scrambled, ndx+2, 1))) 1 s/ [# V0 U1 o) x0 D0 J p
fourth = Base64DecMap(asc(mid(scrambled, ndx+3, 1))) & I& C6 n& L2 E3 R4 A3 x, V
ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3))
6 q9 w7 A" e% q( i ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15))
* U U0 x/ ?+ b ret = ret & chr( ((third * 64) AND 255) + (fourth AND 63))
# i% l8 n2 A0 p# Q ndx = ndx + 4
6 Y2 t' J. @2 l) M# W. ` loop
: L1 Z5 w/ V" r, d" \$ e* y' r if ndx < realLen then
7 M# |4 l: \) D8 F+ e first = Base64DecMap(asc(mid(scrambled, ndx+0, 1))) : p0 e' A1 l5 t9 E5 F
second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
2 M& l6 q: Q, {, \$ l% {: J ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3))
8 t1 b& D/ U4 C; u) U if realLen MOD 4 = 3 then 4 x2 Y6 `0 ~, n+ o3 ]. A7 G5 T& P0 M6 f
third = Base64DecMap(asc(mid(scrambled,ndx+2,1)))
+ W+ B, Y) @" A4 i, {! h ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15)) $ c0 ?- k' a s4 U. E4 \; O
end if : r4 E! @! W( z' O5 U" D2 ?
end if % }. L3 B7 ?# A
base64Decode = ret
) S4 P; C2 C) V9 p$ l END FUNCTION : {. d6 A3 V2 e, F& S+ s' E
'还原单引号、回车换行函数UnEncode . W; Y4 A! v( t7 Q8 L( [
function UnEncode(cc) 8 H# [" ~9 ^) V+ `
for i = 1 to len(cc)
7 Z/ }; \/ ]# Q7 |* f0 O% X+ n if mid(cc,i,1)<> "水" then 3 i0 |( W$ ]% M$ v$ L1 q* [
if mid(cc,i,1)="加" then
. ~. d& h$ e- a! v: [ temp = """" & temp ' C9 P# X' M7 [# P
else . g1 Z- X' ?; Y3 d' N4 `+ _- L8 @
temp = Mid(cc, i, 1) + temp
0 i3 ^+ \* e' b' G) V% z6 q& B end if
, E8 q- g Y D+ a5 @ else
. N' r& q! P/ x6 M1 U! J9 u temp=newline&temp 6 V3 u- D' |, c
end if & C& Q/ \( [8 S2 t
next $ |5 G5 f) \; x& V* x, `' v$ W' W' J
UnEncode=temp , c C6 u$ x& j8 F+ N( y) ^4 m
end function
0 E/ a2 |" H+ u* P8 A6 I2 _9 E8 R; l6 a6 f9 U! _
) A3 c1 Z" c% e- C8 a/ I& \5 W! B
将以上代码以test2.asp名存盘。( z# u. ^2 J% a* Z9 P
- K& M+ R: ~5 u9 t1 V) R1 _2 ?
(4)用SRCENC加密test2.asp
) G. p/ F# K1 ^. B7 j8 H% d( C, J2 N$ P. h2 E
用SRCENC加密test2.asp,然后把它发布到服务器上,这样别人即使得到该文件、破解了SRCENC加密,也无法看到原代码,因为原代码在test2.asp中是密文(Hu=”c2V0IHJzPXNlcnZlc...),所以ASP代码就被保护起来了!( d& j/ v$ J: Z: [5 W) U$ X
: p! K1 b) E1 ?: E' Z 二、加密过的asp程序如何解密?
7 ]' @/ r, P! J3 ~! u& J) _. e2 ?6 U. y# x
如何对加密过的asp程序解密呢?首先我们要告诉大家,用组件法加密的asp程序是无法解密的,而screnc加密过的程序则可以解密,方法是:使用解密软件(ZWDECODE.EXE)。
" {* z+ W! G( [/ X7 w/ r5 q* q- ` `
ZWDECODE.EXE(下载地址http://www.mydown.com/softdown/45/45183.html)可以对MS Script Encode加密的ASP文件进行解密,还原出源代码。
6 k( E3 h( a, N n2 J$ T7 I* S* q/ q% `. ]6 [
(1)解密方法5 ?; o: ]$ K4 n) b j% {
; Z! b* u$ J9 l% q1 m# r
单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可恢复原代码:
. R, i9 V' y/ `+ P+ s6 K; S" e/ [# D- O) l: r% H
ZWDECODE <已加密asp文件名>
+ i" W" ]8 g' b+ E* U- q9 ?# P- M" k9 @ o3 g
其中<已加密asp文件名>必需输入,该文件名可带目录路径;也必需输入,这是要生成的输出文件名,也可以带路径信息。; g2 B& M; ~; b$ X4 c- q( D- W
3 M$ p7 C M; r0 W' }; p0 A (2)举例
6 D/ P- S6 {/ u) d
$ _ D+ R( D5 h+ s 例如F:\22\lacl.asp曾被screnc加密处理过,现在要恢复其中的源代码,你可以在MS-DOS中输入以下命令:. H1 F& i+ s% f8 ^. v
0 R% h, E7 M& d T) W" n& v9 K ZWDECODE F:\22\lacl.asp d:\ulacl.asp- L& i/ y! s7 Y3 J, D/ J7 d# n& Z0 \
H) V$ g; |9 l* ? 执行完毕,在D盘上就会生成一个ulacl.asp文件,打开该文件,你就能看到源代码了!
. X7 y: `$ b/ G" ?# u |
|
|