|
|
ASP程序加密解密方法全面解析
7 c+ K. @5 L! @" e' r2007-08-18 16:41
`; S1 r6 Q1 }/ M/ W+ { 目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法……
5 [8 q+ c* ?. t) I
1 ?% G7 }. z! Z+ c P2 J0 x 如今,用ASP技术构建的网站随处可见。由于ASP脚本是在服务器上解释执行的(无法编译),因此你辛苦开发出来的ASP代码,很容易被人拷去任意修改,如何保护ASP源代码呢?这是每个ASP站长都会遇到的难题,网上求解这类问题的帖子非常多,下面我们就来谈谈ASP程序的加密方法。
: c1 D' L- {5 B1 N9 J* z2 B* _! O1 x B- ^. _+ i! [* [$ j: Y0 E( a; N
一、如何加密ASP程序?
( N# t) {, M7 z8 c2 F5 o# c4 U7 R0 X8 J
目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法。
: g2 ~+ o0 ^$ t/ n: @
4 E' r# D5 {& `' X; g 1、使用微软的MS Script Encode进行加密# d# C# q, P+ h
. j$ k: r+ }" Z, h# ]
微软提供了脚本编码器MS Script Encode(下载地址http://www.itgene.cn/itgene/download/download.aspID=232),可以对ASP程序进行加密。这是一个简单的命令行工具,其执行文件是SRCENC.EXE,需要在DOS下运行。它只加密页面中嵌入的脚本代码,把网页中之间的ASP代码转换成不可读的乱码,其他部分则保持原样不变。加密后的程序,必须使用Internet Explorer 5.0以上版本才能正常浏览。
8 V ]7 J6 |! b. j% }8 ~# \
4 m7 t9 m7 T5 R 用SRCENC加密之后,文件中被加密过的部分将变成只读类型,假如你修改了加密部分(哪怕只改动一个字),就会导致整个文件不能使用。对于 VBScript,加密后在源文件的第一行会显示:<SCRIPT LANGUAGE="VBScript.Encode">;而JScript(或 JavaScript)则会显示:<SCRIPT LANGUAGE="JScript.Encode">* d0 L) p0 W% b1 ^; q1 {4 B
; B8 h. b$ F( C* J2 e; `& s (1)加密方法
, p. ]) t9 r$ l' e
) J/ a; n# |: ~! g7 }2 D2 b; F 单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可对某个asp文件加密:
6 c9 x( J0 x, l3 W2 T1 _: X- z5 D& I) A5 o
SRCENC [switches] <要加密asp文件名> <加密后的文件名>
i2 B3 r# U |
4 ?4 A" v' G/ I5 Y: f 其中[switches]项目可以选以下5个参数4 N4 C# z. K3 h! l/ ]+ O
+ y9 `* E/ O/ h
[switches] 含义 举例& X: _; l Q o. f& ^3 t
( U; a( u- t0 L7 ]. |0 {1 Q /s 可选。命令中带了该参数,加密过程中屏幕上就不会有输出。 screnc /s lacl.sct ulacl.sct
+ Z. J: o0 N) Q/ F, P# o3 v6 p8 e2 q0 Y$ U
对当前目录中的脚本小程序lacl.sct加密,加密过程中屏幕不显示任何信息( f/ ?" J8 F5 l5 @
& G2 u0 g, T% \- w$ |+ C7 A /f 可选。指定输出文件是否覆盖同名输入文件。忽略,将不执行覆盖。 screnc /f lacl.asp: `. G* `) o" D
( X! G+ Q. @3 x6 X l6 }# R7 O
对文件 lacl.asp加密,并用编码后的同名文件覆盖原文件6 E5 h, N: z0 P: t; G( B
6 K& T' ^5 E( Z% r* L& `. U
/xl 可选。是否在.asp文件的顶部添加@Language指令。忽略,将添加。4 J t+ |+ Q- Z# ~. @
7 j" ~7 e. Q1 A% ~) ~# r
/l defLanguage 可选。指定Script Encoder加密中选择的缺省脚本语言。文件中不包含这种脚本语言特性的脚本将被Script Encoder 忽略。
! C% ^# ^+ i, ~/ Y' {3 g2 q) Q) {. e5 r2 |- k; C4 t, E
对于HTML文件,JScript为内置缺省脚本语言;对于ASP文件,VBScript为缺省脚本语言;对于扩展名为.vbs或.js的文件,Script Encoder也有自适应能力。 screnc /l vbscript lacl.htm ulacl.htm
+ y) c5 F9 e, I3 N# J7 B1 V( R a2 d I* o Y
对文件 lacl.htm加密,并生成输出文件 ulacl.htm,确保没有指定语言属性的脚本块使用 VBScript
" e- |6 n7 t! r# c8 R0 ~, }
Y& u) e$ j+ _* W2 Y# v' ^9 x3 I /e defExtension 可选。指定待加密文件的文件扩展名。缺省状态下,Script Encoder能识别asa,asp,cdx,htm,html,js,sct和vbs文件。 screnc /e asp 11\*.* f:\labxw-jm
4 ?' B4 g( f% A5 t% r# G: S& {
2 K' t w" p5 x1 N$ V* D, ]4 e8 ~ 对11目录中的所有.ASP 文件进行加密,并把编码后的输出文件放在f:\labxw-jm目录中1 g/ G0 N+ [4 |: U( g1 w3 Y
! M2 u g5 V7 ` H" u% ~: B' q (2)操作举例) ^' S% z9 I/ l
5 x9 T5 H j! @ 例如要加密当前目录中的lacl.asp文件,生成加密文件ulacl.asp,则在DOS下输入命令:% X+ U2 N7 `) }) i4 k
( {5 A. L, Q$ w# c' M8 _$ Y screnc lacl.asp ulacl.asp& H; j$ H5 U) M) {( u3 w! G
) D' c! ?. t1 `# J1 B$ M) l) b4 y 对当前目录中的所有 .ASP 文件进行加密,并把编码后的输出文件放在f:\labxw中,则使用命令:
2 s& j( c6 ]. m1 Z
; p& ]8 l/ Z9 l) w& B8 b* t& B) l screnc *.asp f:\labxw b0 Q% F' P% J5 L! `: v
. j9 @" J* J* x+ O4 @ 2、使用组件加密asp
. ?: j: E3 E$ C0 i' L; ]' ^% S" t0 K0 D
以上被screnc加密过的程序,是可以解密的(解密方法下文有介绍),如果你想彻底保护自己的asp代码,可以通过开发activex dll组件的方法进行保护。- H* @% C# K% y2 p" g
1 l. \4 J$ L1 t, l+ q/ w Dll文件是被编译过的机器代码,如果没有源项目文件,是不可能被反编译的,所以组件加密这种方法最安全,也不可能被破解。下面我们来举例说明操作过程,例如你要保护以下asp代码:
$ s) |! }# o: {& p5 V% P0 C* G# L' m* j0 E' S0 K
set rs=server.createobject("adodb.recordset") ; D0 E: x4 R) ?/ `( `" ^
sql="select * from gq where xs=1 order by date asc" * j8 C1 r+ {$ n! Z- b) |
rs.open sql,conn,1,1 ; C) V- b( w7 E' L; j( d6 m
if rs.eof and rs.bof then : L; K2 U3 x0 ?6 ]. u3 ^
response.write"<A HREF=new0.asp?lbid=gqx ><%= gqx %></A>" ; ~6 a6 H, c \' B; c
else ( [# P, ?( c) O
Response.Write "" " k1 z+ S# I1 M& N: v. a- \$ w
end if 8 K) Q2 C, G3 h( ]+ _1 J: e
set rs=nothing
* j0 U1 `* r% P9 Y: @6 b. j1 A4 c conn.close 8 _1 D' G' s0 h
set conn=nothing
! I' z. {, ?; S- u* G% |& h3 l" b6 w9 C% N) ~5 u# F2 q+ f
可以把它们改写成VB组件,然后在ASP文件中调用组件即可。操作步骤如下:
) O( R1 U5 ~3 f4 h6 r
# L, L8 M9 Q3 u7 Y. Z, A (1)新建一个vb6的activex dll项目
% M, e# D3 I& R# }
% n$ H7 [# b+ Q* T1 L k8 h G3 @# W 在属性窗口中,命名你的库模块和项目文件(例如项目名lacl,模块名disp),以后在asp文件中,调用的对象名将为lacl_disp6 o/ l* ^0 O1 \7 D
. k, o. R$ a* F4 ^# Y
选择vb6中的项目菜单中的references ,选中microsoft activex data objects 2.0 library. g6 U" ]( Z% p( Z
Q; n) q6 ]9 Z ~2 Q* i (2)编写VB组件
% O# G- D+ [6 |2 V9 ~) D
8 ]. y$ P$ o" Y 接下来把<欲保护的asp代码>改写成VB组件,代码如下:0 L% [8 q7 b. e4 c% l
+ V$ O, M: ]' p1 U0 H$ l
public function html_combo(disp_table as string) as string # x, @/ S+ T+ Y
dim outstring as string
. F4 [7 o, Q$ H+ f4 e4 K dim conn as adodb.connection ) j! Q8 y9 S2 ^* o# F! B
dim rst as adodb.recordset / x0 \- q: Q) ]8 f
dim sqlstring as string
; y% h6 F, `! u* k set conn = createobject("adodb.connection") & W/ y7 s/ t" Q E/ e
set rst = createobject("adodb.recordset") ; [& J u V8 ], V; x1 x/ G
sqlstring = "select * from " & disp_table & " where xs=1 order by date asc" . ]! V/ n* D5 z4 u) P* n( s
'以上是在VB中打开数据库操作,数据库中的表名、字段名,你可以根据自己的需要修改 3 g4 C, _ k( ]6 [! m' J$ b
conn.open "dsn=sumnet"
1 ^& _7 }* y- l- Z rst.open sqlstring, conn, 3, 3 : B6 K' ~1 z h. N
if rst.eof and rst.bof then : U0 p/ L0 d' g) @; f ~
outstring = "还没有这类单位信息"
0 a0 r6 a) q4 a4 q' \ else ] r$ A1 a3 K0 A
rst.movefirst + {9 f+ w. J* m6 Z u7 O' d4 |
outstring = "<A HREF=new0.asp?lbid="&request("lbid") & "></A>" 1 j1 `9 h& m* _! C i0 o
end if
8 M& m* R- N! h D: z1 T# R' k html_combo = outstring * `7 x8 g0 O$ X1 |* y
rst.close 9 g# T r; Q* I4 U5 r* b
conn.close ; j. `( D9 I# Y% f
end function & c4 u6 I: _0 }1 ]* z. L' {( j- ^$ I
. O, g$ f# F# w, `0 i3 A
写好以上VB代码后,保存项目并开始编译。9 ` `. c i6 C/ U. I3 q
3 E/ X2 |- X! U& E* }
(3)生成安装文件
, K0 ], I! L# }& y2 e# |# [' C* ]* }9 M
打开visual studio 6中附带的package deployment wizard程序,选择刚才建立的activex项目文件lacl;选择package,选择要打包的脚本或使用默认脚本,选择标准安装,为生成的安装文件选择一个存放目录,选择single cab. 其他均默认;然后单击下一步,安装文件就自动生成了!& c. G3 B$ p' H! |1 U; a' J
$ }+ c: X; J8 o$ ~- q" Q1 o (4)在IIS服务器上安装组件
1 K! b' t$ m+ X( F6 ?' o' }1 X7 a$ M* |4 q$ v
在IIS服务器上运行这个安装文件,把组件安装到服务器上。) H0 Y; w) M% d2 |' {6 K
\! D1 Q9 @! r2 v& b% i (5)在网页中调用组件) V9 Q/ M% _! K7 n; H% f+ N
$ q, s/ H6 f) W% }) i6 q 以后在ASP文件中,通过调用该组件完成原来的功能。在网页中调用你制作的组件,方法如下:
! \" I' d* ~5 U7 W" Z# J
& L4 I, G( z! i* {7 F4 A8 i <%@ language="vbscript" %> + ], y r. e9 o9 g4 ~; `
<%
' Y) U8 r% v1 z& V: v m; { set diaoyong = server.createobject("lacl_disp.disp")
& q) e0 a6 J* T6 D %>
/ {1 d' q k: T9 | H% D <html>
3 L& ~; A F# n- h <body> 9 K9 W! i9 ]" \. q3 u3 ~" X' M
<%= diaoyong.html_combo("gq")%>
3 t) o. \& d1 K( V1 w7 A- p d8 ?5 |& b <br>
# Z% a, X# x- d( n </body> # G, X+ b; F' c, k0 M$ K
</html>
5 z1 b" d9 l7 E. x! Z
1 ~9 ]0 x7 I$ m% e8 ~. J
# m. F" t5 U; }$ @, w4 x- \# S, [ 你看,现在Asp文件中的内容只是组件的调用(与以前完全不同),别人即使得到该文件,也无法编辑修改源代码,因为代码都被封装在VB组件中了,对于组件中的代码,外人是无法看到、也不能反编译的!
y+ F$ K, t- y8 w) f$ E. O% S6 a0 \- v; P1 ^
3、自己编写加密程序
, L4 ~. m1 ?5 d
; B+ `. W" [9 H; j# S, s 组件加密方法虽然不可破解,但是要求你熟悉VB编程,需要把ASP代码改写成VB组件,工作量很大,所以建议大家自己编程来保护asp代码,其基本思路是:写一个加密函数base64Encode和解密函数base64Decode,先用加密函数处理<要保护的asp代码>,得到对应的密文hu;然后再用execute(base64Decode(hu))替换<欲保护的asp代码>。
+ b' j5 c+ F8 e. K8 G7 k; C
# h1 h3 c1 H/ ?- F0 R& e5 j+ C' [/ x( G 例如我们要保护上面那段asp代码,可以这样操作:
# R& d: L. K/ {+ |5 l8 Z3 d: k5 }: k0 h" E% M- @. _5 r8 ~
(1)用WORD处理<要保护的ASP代码>1 ~4 z8 L& o/ b/ g! O4 T4 a
3 ] v! T/ L3 V% r. k
将<要保护的ASP代码>拷到WORD中;在WORD中,把代码里的段落标记(回车换行)全部替换成“水”这个汉字,方法是:点击“编辑”/替换,光标移到“查找内容”栏,点“高级”/特殊字符,选择“段落标记”;光标移到“替换为”栏,输入“水”,最后点“全部替换”。同法,把代码中的单引号也全部替换成“加”这个汉字。/ I/ W+ Z: T0 P) N q6 h* g
0 d, M# W" d0 s (2)编写、运行加密程序% c+ I( g# u* v+ A
1 F# L4 J) Q5 v+ h: e$ ]
在FrontPage中编写加密程序,该程序中有初始化函数initCodecs、加密函数base64Encode(代码如下),把WORD处理后的代码,copy粘贴在inp = ""这句中,最后以test1.asp名存盘;在IE中输入http://127.0.0.1/test1.asp本地运行该文件;屏幕上会显示一大段乱码(例如c2V0IHJzPXNlcnZlci5jcmVhd...),这就是《要保护的asp代码》对应的密文!+ M( E3 J5 A2 ?. r
" {# M- p6 T! r6 I* @: o9 h3 ` OPTION EXPLICIT
; ^! x, X6 M- Q; s! N/ L const BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
2 p) r* i1 o8 a4 @- `5 c0 n dim newline
+ K7 f6 `& D! U* O8 P s. r dim Base64EncMap(63)
, A3 X6 a: j0 i" y9 J dim Base64DecMap(127)
: W( I; q. E1 m: t, O) R' o2 n dim inp,hu,encode
' T1 Y7 |- F) q2 }" Y call initCodecs '初始化
4 H8 z, |, j7 o) R inp = "<WORD处理后的asp代码>" '将要保护的asp代码用WORD处理,然后填在此处 - l: {+ [4 q a% n S' \
hu= base64Encode(inp) '调用函数base64Encode进行加密,得到密文hu
: Z$ I% B7 \( q! G2 k# R Response.Write(hu) '显示密文
3 n C" H; y+ `, a/ J) | PUBLIC SUB initCodecs() '初始化函数initCodecs
a) G) A( p# \, v& V. {2 e$ S newline = "<P>" & chr(13) & chr(10)
! S. c$ I9 K$ P m9 b" o( k$ H dim max, idx ' c- v& i& p) r1 S, a
max = len(BASE_64_MAP_INIT)
+ x' z# S) Q. l8 k. ~5 W0 B0 P; g for idx = 0 to max - 1
% ], q. }, v0 ?3 d Base64EncMap(idx) = mid(BASE_64_MAP_INIT, idx + 1, 1)
, ~8 E! L1 H1 r next
1 ~! A, c) a6 @+ ]' d0 \# @ for idx = 0 to max - 1 5 Z Q+ }7 g9 ?. c# E% j
Base64DecMap(ASC(Base64EncMap(idx))) = idx 4 W1 T# s# o, I& y9 D2 Y ? f- w" }
next & c7 \6 E4 m/ K3 S; z" [0 K
END SUB ' a8 P) K# f8 [, @* y
PUBLIC FUNCTION base64Encode(plain) '加密函数base64Encode % B2 @% ~/ Y2 [$ w; Z% E1 S
if len(plain) = 0 then
/ @9 M1 a7 Z/ a' ^ base64Encode = ""
3 f; ]; u0 B. W' Y$ _+ r exit function
?" t; B& H1 t$ C. V, J. k/ o4 G end if ' a, @- U. C* M# g: `. D7 y
dim ret, ndx, by3, first, second, third
: V6 L" o: |) c; t+ b0 K4 C9 [ by3 = (len(plain) \ 3) * 3 _4 Y p$ _ S
ndx = 1
9 u3 @8 H3 X c+ Y do while ndx <= by3 + A/ J' O/ B( @( B. J
first = asc(mid(plain, ndx+0, 1))
: [7 C4 V' z' ^! I3 j3 w1 t second = asc(mid(plain, ndx+1, 1))
, e) w8 e( `8 g third = asc(mid(plain, ndx+2, 1)) B9 |3 m- v7 P7 Z
ret = ret & Base64EncMap( (first \ 4) AND 63 )
9 x* m" M/ Q" x5 n ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
8 T) j* S b& n( X+ | ret = ret & Base64EncMap( ((second * 4) AND 60) + ((third \ 64) AND 3 ) ) * w* t q; w: R H, }% N
ret = ret & Base64EncMap( third AND 63) # A' h" {) g- `6 C. f" m3 E
ndx = ndx + 3
. R7 t. s% \& \% i, a( r loop
! L- i2 U/ B4 [$ b) F; C if by3 < len(plain) then 5 X% k$ b7 D" e" N' S
first = asc(mid(plain, ndx+0, 1))
, T% E' ]7 P! r7 T5 T, E ret = ret & Base64EncMap( (first \ 4) AND 63 ) - @1 h0 U$ U% S# f4 h
if (len(plain) MOD 3 ) = 2 then o0 N( Y/ q! L5 D/ x
second = asc(mid(plain, ndx+1, 1))
0 B: J( ~1 t: ?: j% e7 z ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) ) ; K" H- a" G1 W5 y* F+ R
ret = ret & Base64EncMap( ((second * 4) AND 60) ) 8 ?( M0 B* _1 t+ n* U
else
. x, x1 u2 C4 e B- x" ]% c( d ret = ret & Base64EncMap( (first * 16) AND 48) ) S" s( v' H0 g0 }0 d0 V
ret = ret '& "="
. e3 ]2 _+ W5 u& r end if
& R7 b, G9 y' ~2 e8 M ret = ret '& "="
, A2 q& p! B0 M: i0 I* s# ^0 L5 I end if
0 u8 W' a+ v# @* ^) f; z, l& m base64Encode = ret
. h* ]& r1 T: _' U: u. A5 x END FUNCTION
$ U+ r1 o6 W$ G1 c) b$ W) ?; P: X. Q. [) e- X
(3)重新改写要保护的asp文件
: h) n) X/ m7 G8 E, d' r
8 _0 x2 g, _( h9 H9 Q$ W) t 改写原来的asp文件,在文件中增加UnEncode 和base64Decode函数,全部代码如下:. c7 T6 d+ C5 G5 ?) ?; o
0 ^- U: r% ~6 D' A Dim Hu,Hu2 ) K( [* r+ l; ^4 D6 d; j. Y! J# |1 a
'拷贝“欲保护asp代码”的密文 将之存放到Hu变量中 ! I( ?4 K( _' K" p1 r0 R# p2 q
Hu=”c2V0IHJzPXNlcnZlci5jcmVhdGVvYmplY3Qo12Fkb2RiLnJlY29yZHNldOMpICAgICDuc3FsPeNzZWxlY3QgKiBmcm9tIGdxICB3aGVyZSB4cz0xIG9yZGVyIGJ5IGRhdGUgYXNj1yAgICAgsnJzLm9wZW4gc3FsLGNvbm4sMSwxICAgICDuaWYgcnMuZW9mIGFuZCBycy5ib2YgdGhlbiDucmVzcG9uc2Uud3JpdGUTvSD7INAg5iAgILUgvyAFILITsmVsc2UgsiAgICAgUmVzcG9uc2UuV3JpdGUg1zxBIEhSRUY9bmV3MC5hc3A/bGJpZD0TJnJlcXVlc3Qo12xiaWQTKSAmIOM+PC9BPuPuZW5kIGlmICAgIL5zZXQgcnM9bm90aGluZyAgICAgICAgsmNvbm4uY2xvc2UgICAgICDuc2V0IGNvbm49bm90aGluZyAgIL4”
. t6 t; h4 O- b, F7 D( |# G8 g1 i Hu2= base64Decode(hu) '还原要保护的ASP代码
2 I& H Z- x: L: c execute(UnEncode(Hu2)) '还原单引号、回车换行,并执行原代码
! r5 q+ P- m) Q0 [2 r$ ~ ’解密函数base64Decode 3 c; h; d |" A3 C; S, |
FUNCTION base64Decode(scrambled) ' O% }2 e3 I5 ^9 V
if len(scrambled) = 0 then ! Y* O5 c. B: `1 _
base64Decode = "" ! j+ Y$ g* |& ?4 }
exit function * j: o1 H4 t9 E. ^% H+ B
end if
0 N# Y ^8 U5 S+ C, d$ V& d dim realLen
+ F1 r/ q& ~ m& R7 O realLen = len(scrambled)
3 G# \9 T" a& g) O, ^' b- ]2 T do while mid(scrambled, realLen, 1) = "="
- O- q% R) {: z# l realLen = realLen - 1
+ w6 b6 j( l9 a' ?( x loop
z( O/ e5 @1 C/ j2 _9 h dim ret, ndx, by4, first, second, third, fourth ' a7 M+ }) Q0 A$ S; ~6 q
ret = "" # }0 T5 o- J3 v. J3 W g9 o- U
by4 = (realLen \ 4) * 4
' T2 X) S U- _; U7 G8 k ndx = 1 ) W+ J" C" f* |2 Z6 _8 Z) r8 F
do while ndx <= by4
/ B B& a. J1 P# R' g7 _% ~, ] first = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
: V* q" `& J4 E6 o( v second = Base64DecMap(asc(mid(scrambled, ndx+1, 1))) 2 @/ M8 R( `" m. X2 _: Q3 b. O! Z
third = Base64DecMap(asc(mid(scrambled, ndx+2, 1))) : d7 ~9 y) v# Q$ p, d
fourth = Base64DecMap(asc(mid(scrambled, ndx+3, 1))) : i6 ^0 F; L2 t$ `; c. b2 K4 `
ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3)) : y ~9 [3 t0 b# w. t/ I
ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15)) 9 ]) i: t2 ]4 Z' l# p" W
ret = ret & chr( ((third * 64) AND 255) + (fourth AND 63)) / ]1 s/ o3 l0 y8 e* d7 l
ndx = ndx + 4
1 W7 C. a B# G+ A loop * _( y t: H; Q) ]
if ndx < realLen then
2 Q# J, S6 M5 J7 Y" u! m" L5 w first = Base64DecMap(asc(mid(scrambled, ndx+0, 1))) , L; @: Z3 q* d4 X- v
second = Base64DecMap(asc(mid(scrambled, ndx+1, 1))) ) X; s! g8 A2 r3 G' j
ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3)) 1 T. u8 R2 i9 G& x+ J# D
if realLen MOD 4 = 3 then
s0 l" }# R, B2 t third = Base64DecMap(asc(mid(scrambled,ndx+2,1)))
; S" o; z! B7 O' P5 J ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15))
% ]2 Q( c. e8 Y+ D end if 9 A! t/ B+ \: S* `9 |( V
end if
% d! V( O) p( ]* c$ M1 |' ^ base64Decode = ret 3 Z, S! N7 A, |; c
END FUNCTION ( g0 C0 M0 N9 z0 K4 i
'还原单引号、回车换行函数UnEncode
D! l/ v) J2 Y" Q5 _. ^: [ function UnEncode(cc)
" T. k/ J* u: z3 _* ? for i = 1 to len(cc)
9 s1 x+ q. d0 h' N; H" Z if mid(cc,i,1)<> "水" then * o+ |* m5 L4 m* G; k8 G
if mid(cc,i,1)="加" then
2 f+ t( f- {6 f5 a0 W+ o" @2 v6 c. s' n temp = """" & temp
8 ~+ F' S6 K' g& D8 r; n: ^ else * w8 `+ G; Z/ S# u
temp = Mid(cc, i, 1) + temp 6 H' x! k- C. e" L
end if
; d! G. U( t/ J. J/ t. s else 9 |" s. e% _+ Q- m( {4 w/ g& J* I
temp=newline&temp
; r( W, W. D3 U) i) a end if ' X: T* d7 }1 h3 u
next
+ g4 a4 W1 s2 q8 G! o UnEncode=temp
, M% J: x7 Y- L# o0 S% o end function + l' p5 @* z$ s+ h4 x5 @) I
3 O) d5 z/ \* @( i7 H
9 q+ R; [3 O- }2 y 将以上代码以test2.asp名存盘。+ f/ Y* z9 m8 j- z
, }; I6 d/ O' N! A8 ~ A (4)用SRCENC加密test2.asp
2 ^4 ?5 o1 ]0 ]8 Z( L) P3 R) ?
2 l- p2 W3 a+ u8 \# b L 用SRCENC加密test2.asp,然后把它发布到服务器上,这样别人即使得到该文件、破解了SRCENC加密,也无法看到原代码,因为原代码在test2.asp中是密文(Hu=”c2V0IHJzPXNlcnZlc...),所以ASP代码就被保护起来了!* X, o' b: c+ @6 G7 H
- D5 [( `7 ?+ u) `5 u7 R; @
二、加密过的asp程序如何解密?! e" P4 p7 s8 T. X7 ^0 v
8 l) [" ~( k) \$ k9 ?1 o 如何对加密过的asp程序解密呢?首先我们要告诉大家,用组件法加密的asp程序是无法解密的,而screnc加密过的程序则可以解密,方法是:使用解密软件(ZWDECODE.EXE)。
9 n9 o/ ]- Q+ R: x& S) e Y: U/ Q: p! W$ O8 R
ZWDECODE.EXE(下载地址http://www.mydown.com/softdown/45/45183.html)可以对MS Script Encode加密的ASP文件进行解密,还原出源代码。# K0 q& Y! m+ P4 r4 P p
/ |4 l. X M* t0 y7 w
(1)解密方法+ ]6 w' N9 L. g P) Z
5 T$ o; }; @: S4 m" D0 D 单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可恢复原代码:
% n* w. z: P0 [& q% S+ [ |/ J3 t/ N/ d7 E3 K% ?% N( ^
ZWDECODE <已加密asp文件名>6 c& g, [, X7 A/ l
6 p+ r: R& S( m: C0 \5 N 其中<已加密asp文件名>必需输入,该文件名可带目录路径;也必需输入,这是要生成的输出文件名,也可以带路径信息。
) ?, }# n* i% R1 M' Z" I0 ]/ D/ p. m9 C+ {3 [9 k" D3 Q* G/ l
(2)举例
( Q0 B. f% j! t6 `& R( c7 ^1 `& T% I/ y
例如F:\22\lacl.asp曾被screnc加密处理过,现在要恢复其中的源代码,你可以在MS-DOS中输入以下命令:
+ F9 H ^2 l7 \8 {4 {8 _4 B" F
* Z& s- J( U0 ^3 y; }) z' a3 K ZWDECODE F:\22\lacl.asp d:\ulacl.asp
6 a) J6 O' J5 A3 U- S/ n
3 |$ p1 F+ c& Z" t 执行完毕,在D盘上就会生成一个ulacl.asp文件,打开该文件,你就能看到源代码了! ( N% N9 ?: C, G; K3 |
|
|
|