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