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