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