|
|
ASP程序加密解密方法全面解析5 Q7 t9 e( n! c0 ~0 F7 D1 I
2007-08-18 16:41 b z4 o: A0 V! l1 |2 v" ?# K
目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法……
3 R( P; c, ~' l8 f% E/ P E, l
/ |: l& L2 E; H6 ^4 ? 如今,用ASP技术构建的网站随处可见。由于ASP脚本是在服务器上解释执行的(无法编译),因此你辛苦开发出来的ASP代码,很容易被人拷去任意修改,如何保护ASP源代码呢?这是每个ASP站长都会遇到的难题,网上求解这类问题的帖子非常多,下面我们就来谈谈ASP程序的加密方法。) d( b- y5 J& l) M7 P6 t3 S
1 D* y# `. `0 `7 b' C/ o1 R 一、如何加密ASP程序?( w! b; X' W& s/ d( b- h
^! e# R- u/ ~7 o' t. `9 U0 M2 g* U 目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法。, L w5 Y; @/ e X* G9 |
% w7 F, a# r: B% P5 K 1、使用微软的MS Script Encode进行加密3 _' @+ i) o6 G) Z; a8 u9 ^) g+ O, j
: Z. ?$ `- T9 v$ r5 ]1 t 微软提供了脚本编码器MS Script Encode(下载地址http://www.itgene.cn/itgene/download/download.aspID=232),可以对ASP程序进行加密。这是一个简单的命令行工具,其执行文件是SRCENC.EXE,需要在DOS下运行。它只加密页面中嵌入的脚本代码,把网页中之间的ASP代码转换成不可读的乱码,其他部分则保持原样不变。加密后的程序,必须使用Internet Explorer 5.0以上版本才能正常浏览。& w' n. R4 \ [3 b
% H4 }: Y$ W: R. l6 F7 ?
用SRCENC加密之后,文件中被加密过的部分将变成只读类型,假如你修改了加密部分(哪怕只改动一个字),就会导致整个文件不能使用。对于 VBScript,加密后在源文件的第一行会显示:<SCRIPT LANGUAGE="VBScript.Encode">;而JScript(或 JavaScript)则会显示:<SCRIPT LANGUAGE="JScript.Encode">- r, ~ _; Z- h6 ` o* [
& _& y4 e& E/ ^, z' b
(1)加密方法
# \3 I! c: p) |
! ]1 U5 P/ V* q9 I" U; i; s 单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可对某个asp文件加密:3 \7 m& H8 \, ^; h' Q
4 C# U6 U/ T- a& L+ ^ SRCENC [switches] <要加密asp文件名> <加密后的文件名>
8 u1 G* ?" @3 d! H1 h5 f) ^) x2 d" V7 c T9 ~
其中[switches]项目可以选以下5个参数
9 j* E! \& E: \2 P5 o+ }; t7 [2 r$ U
; [/ T, A, O+ A# |5 @ [switches] 含义 举例$ H% m' _; d2 ^- y" |3 z/ X; a
% w9 V" {4 _& L X) { /s 可选。命令中带了该参数,加密过程中屏幕上就不会有输出。 screnc /s lacl.sct ulacl.sct
% G7 I e, H7 c( x. o& A- ?9 s7 Z: f& c) Q9 u" S, J$ M' ]& j
对当前目录中的脚本小程序lacl.sct加密,加密过程中屏幕不显示任何信息" Q8 C( x$ j, c( {
4 e* p& M" {5 G6 C+ O; A. [: Q /f 可选。指定输出文件是否覆盖同名输入文件。忽略,将不执行覆盖。 screnc /f lacl.asp
& z! L* e$ Z% D. m& H3 ~: `2 C/ H% V1 O6 `' h' X5 O- x6 |
对文件 lacl.asp加密,并用编码后的同名文件覆盖原文件6 c# m$ s' d( l8 N& G0 u
. ~) {" }: p2 G" C& O2 Q /xl 可选。是否在.asp文件的顶部添加@Language指令。忽略,将添加。
# Y9 Z# r+ |/ d
# X/ |# F, T! P6 g+ I. b* s1 @% U /l defLanguage 可选。指定Script Encoder加密中选择的缺省脚本语言。文件中不包含这种脚本语言特性的脚本将被Script Encoder 忽略。
$ X; B1 }4 g9 d
* h4 n1 ?8 d/ i+ s2 S# M: ]4 N 对于HTML文件,JScript为内置缺省脚本语言;对于ASP文件,VBScript为缺省脚本语言;对于扩展名为.vbs或.js的文件,Script Encoder也有自适应能力。 screnc /l vbscript lacl.htm ulacl.htm
" q n5 U4 a5 C, p
9 V1 [% Y& d$ {8 q7 ~8 | 对文件 lacl.htm加密,并生成输出文件 ulacl.htm,确保没有指定语言属性的脚本块使用 VBScript
: r% U+ g; k8 l( p- Y% O: H8 h3 M7 F
/e defExtension 可选。指定待加密文件的文件扩展名。缺省状态下,Script Encoder能识别asa,asp,cdx,htm,html,js,sct和vbs文件。 screnc /e asp 11\*.* f:\labxw-jm
) c1 Q9 q& B% S* w$ h: x6 }* _2 Q3 ^) [
对11目录中的所有.ASP 文件进行加密,并把编码后的输出文件放在f:\labxw-jm目录中7 z( C' R$ k o8 p( a; n0 o, I( i
1 F9 K7 I, N9 n
(2)操作举例0 ~: A0 |! G* _. q1 r
! S, J. b) V. M
例如要加密当前目录中的lacl.asp文件,生成加密文件ulacl.asp,则在DOS下输入命令:& v5 h" q2 p. M, @' X
. C o$ s2 |! Q: Y' a+ ]" Y3 ~2 N
screnc lacl.asp ulacl.asp+ F2 q2 p9 s* G% ?
0 C" @2 m; ? J+ Y) G$ N9 J- K. ~" U 对当前目录中的所有 .ASP 文件进行加密,并把编码后的输出文件放在f:\labxw中,则使用命令:
% z* l% j9 H( k/ z: h u6 d5 z- F/ t3 e& z( A6 H: j
screnc *.asp f:\labxw
7 }0 o! P7 M! o0 {$ U* K2 ]
) O8 \0 |% a! F8 q 2、使用组件加密asp% Q$ M1 e+ A4 g$ e# _, H6 m" g+ ~
/ [1 S6 G$ v% G& Q3 ]! I2 R
以上被screnc加密过的程序,是可以解密的(解密方法下文有介绍),如果你想彻底保护自己的asp代码,可以通过开发activex dll组件的方法进行保护。
; E" n. R! O# ?2 p9 P0 p- `1 O& ]) ^; W1 j% o( [
Dll文件是被编译过的机器代码,如果没有源项目文件,是不可能被反编译的,所以组件加密这种方法最安全,也不可能被破解。下面我们来举例说明操作过程,例如你要保护以下asp代码:
! m0 C4 f& _" _# r# ~2 J0 @
4 r( @/ S [$ D; ^. r set rs=server.createobject("adodb.recordset") ( Y+ ?& [" u0 t9 _. N9 d0 |
sql="select * from gq where xs=1 order by date asc"
# I! ^# u6 ?% m rs.open sql,conn,1,1 0 S2 u+ c+ S: N8 g* y
if rs.eof and rs.bof then
$ ^9 [. }- w/ s1 ?* I: L response.write"<A HREF=new0.asp?lbid=gqx ><%= gqx %></A>"
0 w) G/ c- i+ j* y0 V7 @ else
* ~" y1 ]* j: G. @! d, k4 h Response.Write ""
: u4 n0 j2 _3 z( @+ z) P% d end if + x. ]; G, e1 O2 Y
set rs=nothing " m/ R6 C8 V' T/ l
conn.close 7 q+ s" `1 ^4 h; L* W) i- {6 s, F" R
set conn=nothing
0 f8 `3 O: ~' `, x% B' S2 ?; V
可以把它们改写成VB组件,然后在ASP文件中调用组件即可。操作步骤如下:
+ _3 p7 X/ ~) ]+ q% \; ? T- T+ {/ R4 w W0 ? P! h6 r1 i
(1)新建一个vb6的activex dll项目
- ]( Y3 c1 b$ O t1 \) R0 _/ ]" B" C9 m5 C
在属性窗口中,命名你的库模块和项目文件(例如项目名lacl,模块名disp),以后在asp文件中,调用的对象名将为lacl_disp M# ^4 Q8 l7 ]# }/ q4 J" b
9 g9 B3 q- _9 y- | 选择vb6中的项目菜单中的references ,选中microsoft activex data objects 2.0 library5 ? \9 j5 }# u6 @2 x0 f' y0 B
$ E9 w& M6 G" i) p; ^6 ]
(2)编写VB组件
, c9 n9 v1 S9 i+ I$ \3 F6 Q7 S( ^# h% x8 Y# q
接下来把<欲保护的asp代码>改写成VB组件,代码如下:
, a6 A/ j4 @6 k- v+ s2 K7 M" S+ `( N
$ t3 @1 w! M, h: r8 y f public function html_combo(disp_table as string) as string + m4 w0 n) j8 X6 m
dim outstring as string
! P! l# R) p* S5 R+ s7 G dim conn as adodb.connection
4 v9 z3 s4 W1 s0 O$ A" m6 d' x x: v dim rst as adodb.recordset
: _" w5 c4 ?: f2 E dim sqlstring as string . g5 R: C+ C! _# ^
set conn = createobject("adodb.connection") / v- u9 E6 w8 e" A9 L: U! [: Y
set rst = createobject("adodb.recordset")
& n- P! _, G# _1 w sqlstring = "select * from " & disp_table & " where xs=1 order by date asc" ( ?# a. n: A( \
'以上是在VB中打开数据库操作,数据库中的表名、字段名,你可以根据自己的需要修改 6 X5 _; r, N0 s" B
conn.open "dsn=sumnet"
+ B& y! E0 K7 n* P rst.open sqlstring, conn, 3, 3 * a" u4 i) G1 c3 Q
if rst.eof and rst.bof then
0 c) }7 A: Z. L outstring = "还没有这类单位信息"
B1 [( L! A8 ] else
5 @" g" C6 y! F- ]+ b- p rst.movefirst
2 I" |: `" ?+ c+ d) H" V( j outstring = "<A HREF=new0.asp?lbid="&request("lbid") & "></A>"
) j9 [# j& f( S# [& X( h- z end if 7 T7 V6 p- k- i7 g+ G8 d/ }7 M3 |
html_combo = outstring
6 b* x/ q6 f6 p! O) h$ z5 R rst.close
3 ?& p _* ^, d5 F N( Q0 J5 V5 | conn.close
Q8 P# ^- L0 F7 B end function ) D8 q* }( T2 ?6 j- l6 e$ @
+ o7 |$ V: ~# V/ n2 ]7 n9 Y 写好以上VB代码后,保存项目并开始编译。
* e# ]1 ^9 ^$ t5 ]- B* x6 R2 b% D9 p8 Q0 |
(3)生成安装文件
1 o% @1 r, b Z; ?. G8 j% F
7 b1 R: c2 H4 Z6 T/ Q5 @. l 打开visual studio 6中附带的package deployment wizard程序,选择刚才建立的activex项目文件lacl;选择package,选择要打包的脚本或使用默认脚本,选择标准安装,为生成的安装文件选择一个存放目录,选择single cab. 其他均默认;然后单击下一步,安装文件就自动生成了!
]! p V7 L% u9 k/ r" h: \' w* i. ^1 l. a( k' q
(4)在IIS服务器上安装组件
6 _' c$ m0 G# j' s$ n4 d1 i9 b- K- A8 {1 q5 u
在IIS服务器上运行这个安装文件,把组件安装到服务器上。; y- o9 }' X2 J A
: P$ p5 i) \6 D2 h6 x8 ^
(5)在网页中调用组件1 [* c8 f5 A# r k
w6 t4 p% ~4 h) r7 o
以后在ASP文件中,通过调用该组件完成原来的功能。在网页中调用你制作的组件,方法如下:, W i7 m$ y' _/ ]8 }
8 F: Q: M' t& F9 e& x+ X* W) { <%@ language="vbscript" %>
- |/ Q) B" c3 F <% 8 [0 p/ N) r8 H: _! O6 w% m
set diaoyong = server.createobject("lacl_disp.disp")
% N2 v- G) F5 @7 \( ~9 P8 b! r1 c %> 1 b8 y( S- N2 f
<html>
0 }7 V0 C9 N7 X <body> ) d6 \% x5 U' b, p: t
<%= diaoyong.html_combo("gq")%> * q( E6 o" b g; O' \: k" h6 F
<br> 4 f( v- t+ x( } s3 x
</body> : ^% y; S3 A$ y" [: H* Z# _
</html> \2 r& q# n& s% l7 u
7 Z) U9 f5 O6 H& m0 Q8 h- h/ Y. \# ]; j- P2 i, c9 u/ o
你看,现在Asp文件中的内容只是组件的调用(与以前完全不同),别人即使得到该文件,也无法编辑修改源代码,因为代码都被封装在VB组件中了,对于组件中的代码,外人是无法看到、也不能反编译的!& ]# R! Y6 @( |3 S
8 R* A7 }1 [, n% r7 q; ~0 R
3、自己编写加密程序
+ D6 I0 g6 ~, ~ w3 f4 g0 b& ~$ h" h. f/ ~2 K# l
组件加密方法虽然不可破解,但是要求你熟悉VB编程,需要把ASP代码改写成VB组件,工作量很大,所以建议大家自己编程来保护asp代码,其基本思路是:写一个加密函数base64Encode和解密函数base64Decode,先用加密函数处理<要保护的asp代码>,得到对应的密文hu;然后再用execute(base64Decode(hu))替换<欲保护的asp代码>。" D8 ]5 {: n% c, w" P) M' D1 m
3 n1 p* [$ o' p: _2 Q
例如我们要保护上面那段asp代码,可以这样操作:
7 @, o+ l6 T3 b# d6 `0 k" Q$ y! |( v+ ^7 H/ G4 u+ t/ g
(1)用WORD处理<要保护的ASP代码>' Y2 S( W( H/ K
! R& T# C/ J7 j3 l6 [5 c! {
将<要保护的ASP代码>拷到WORD中;在WORD中,把代码里的段落标记(回车换行)全部替换成“水”这个汉字,方法是:点击“编辑”/替换,光标移到“查找内容”栏,点“高级”/特殊字符,选择“段落标记”;光标移到“替换为”栏,输入“水”,最后点“全部替换”。同法,把代码中的单引号也全部替换成“加”这个汉字。
9 W, `* k9 q: P* H
+ T: e5 i% P) }" C, X$ \7 O7 G (2)编写、运行加密程序7 D- y- R* G& s" \3 ~1 `
- R; ~9 h# P7 v, w5 ?
在FrontPage中编写加密程序,该程序中有初始化函数initCodecs、加密函数base64Encode(代码如下),把WORD处理后的代码,copy粘贴在inp = ""这句中,最后以test1.asp名存盘;在IE中输入http://127.0.0.1/test1.asp本地运行该文件;屏幕上会显示一大段乱码(例如c2V0IHJzPXNlcnZlci5jcmVhd...),这就是《要保护的asp代码》对应的密文!
5 I! f% H5 l4 l* T. }, ^# C$ Z
0 g5 e2 G4 Z& l, K( \* X OPTION EXPLICIT
! s( ^4 A2 ^! C6 j, Q4 U/ W const BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" 8 h! W- N& u4 l* q5 a% q3 V: ^
dim newline
{2 `. q8 @# m dim Base64EncMap(63) 4 m7 x" D7 c' y: ~- p" i
dim Base64DecMap(127)
, l: G- P) ]( _/ g6 L# e dim inp,hu,encode 5 v% k3 |& P: z$ i0 e% j7 V
call initCodecs '初始化
2 B; P! D( d3 k, _ inp = "<WORD处理后的asp代码>" '将要保护的asp代码用WORD处理,然后填在此处 + Z2 S% ]: q# r
hu= base64Encode(inp) '调用函数base64Encode进行加密,得到密文hu
F$ W$ O. v- B* a, _/ T Response.Write(hu) '显示密文 8 O+ o4 g7 m% Z9 s9 A0 n
PUBLIC SUB initCodecs() '初始化函数initCodecs ' \# ^* |7 \+ v7 q: k9 c, y! y& x' v) Z
newline = "<P>" & chr(13) & chr(10)
; I( r- [" k7 l' }& y5 c dim max, idx . l! R& d5 Z& d( R' a
max = len(BASE_64_MAP_INIT) 8 H9 D5 p4 L4 e4 A; S3 p/ X
for idx = 0 to max - 1 + K, B7 ~# E4 c
Base64EncMap(idx) = mid(BASE_64_MAP_INIT, idx + 1, 1)
* m% C7 i: h# ` next
/ m; A# J, W3 k! F7 ?. G+ o for idx = 0 to max - 1 # o5 _! Z: S# D& w- R+ M
Base64DecMap(ASC(Base64EncMap(idx))) = idx ! L% \% z3 s' x5 ]3 K& D+ y
next
5 U6 S3 V' F7 u- i7 T END SUB . S$ W8 q5 U: {$ F# m
PUBLIC FUNCTION base64Encode(plain) '加密函数base64Encode
; D# K/ ]% k6 W) L% X# V if len(plain) = 0 then
- G& B. q: i: R2 U base64Encode = "" # ^+ X% C' F. m, P$ Q- x
exit function 0 I3 i- u4 }, M$ @
end if # {' w: T4 W) }/ V Z) n+ D, w% ^
dim ret, ndx, by3, first, second, third
7 [) B. y& b6 h# j by3 = (len(plain) \ 3) * 3 " J9 L' O9 G6 Y, U# c/ n
ndx = 1 ) z9 c& i2 ]) m! d; ~
do while ndx <= by3 5 C8 o1 m/ j5 F3 [
first = asc(mid(plain, ndx+0, 1)) 3 V+ O9 T; \% c+ E0 @# A/ S
second = asc(mid(plain, ndx+1, 1)) ' J/ A3 U+ B2 M% r3 G: V2 x( O
third = asc(mid(plain, ndx+2, 1))
; d3 I% W: ~3 e5 M) K: \ ret = ret & Base64EncMap( (first \ 4) AND 63 ) * ?8 {( \' m( C
ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
( c6 R0 r( U$ { ret = ret & Base64EncMap( ((second * 4) AND 60) + ((third \ 64) AND 3 ) )
6 D" b. [9 } v. F8 @1 y ret = ret & Base64EncMap( third AND 63)
1 d3 h$ y0 i% u/ ^- }" x! g ndx = ndx + 3 & a: g# A7 g" W" ?* [5 R
loop
1 z, M) T! J) L: d if by3 < len(plain) then
6 L6 f6 Y" z4 q1 k first = asc(mid(plain, ndx+0, 1)) 6 i9 x( O6 z: b; q0 a, g" F
ret = ret & Base64EncMap( (first \ 4) AND 63 ) A3 Z( U: x1 U
if (len(plain) MOD 3 ) = 2 then 5 Y8 c$ _1 c! `3 i4 S: v
second = asc(mid(plain, ndx+1, 1)) ; ?3 B* C2 d' }6 _8 z$ {$ E
ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
: |6 t2 E( @/ Q1 ^ ret = ret & Base64EncMap( ((second * 4) AND 60) ) # c% y i0 d1 D+ n( |* M, F7 b! f
else
2 ]* W7 I1 ~" V& m3 M2 m ret = ret & Base64EncMap( (first * 16) AND 48)
: T) ~/ ~; G& P9 [* X5 j ret = ret '& "=" 0 U% m# }& O0 V8 N& j. b
end if 8 C/ s/ |5 W2 r+ R: l+ @
ret = ret '& "="
0 S) D! i7 I2 p ?! J end if
- f+ N8 i+ N6 N& q7 L* P base64Encode = ret
" b; L9 {- C" T/ \ END FUNCTION 5 Q$ ^. h; k5 t5 S
1 Q' q e6 z, z i (3)重新改写要保护的asp文件: t u* k: i: ^* L9 w( W" r) x
# _0 m; e2 G' i
改写原来的asp文件,在文件中增加UnEncode 和base64Decode函数,全部代码如下:
& D: ^7 u6 C. c0 J( S4 V: P4 s4 W1 ]# L
Dim Hu,Hu2
0 F6 Z7 }4 d6 I9 f2 t '拷贝“欲保护asp代码”的密文 将之存放到Hu变量中
! P3 B2 d1 K G p+ j Hu=”c2V0IHJzPXNlcnZlci5jcmVhdGVvYmplY3Qo12Fkb2RiLnJlY29yZHNldOMpICAgICDuc3FsPeNzZWxlY3QgKiBmcm9tIGdxICB3aGVyZSB4cz0xIG9yZGVyIGJ5IGRhdGUgYXNj1yAgICAgsnJzLm9wZW4gc3FsLGNvbm4sMSwxICAgICDuaWYgcnMuZW9mIGFuZCBycy5ib2YgdGhlbiDucmVzcG9uc2Uud3JpdGUTvSD7INAg5iAgILUgvyAFILITsmVsc2UgsiAgICAgUmVzcG9uc2UuV3JpdGUg1zxBIEhSRUY9bmV3MC5hc3A/bGJpZD0TJnJlcXVlc3Qo12xiaWQTKSAmIOM+PC9BPuPuZW5kIGlmICAgIL5zZXQgcnM9bm90aGluZyAgICAgICAgsmNvbm4uY2xvc2UgICAgICDuc2V0IGNvbm49bm90aGluZyAgIL4”
) U$ @- f6 m! z Hu2= base64Decode(hu) '还原要保护的ASP代码 ; m& i! q) p& ` |, q' N3 f* s% F: b
execute(UnEncode(Hu2)) '还原单引号、回车换行,并执行原代码
" f) c. v1 o# X: v1 Q- n+ b ’解密函数base64Decode
2 h( [5 Y) D. G X* ?5 W* f- @ FUNCTION base64Decode(scrambled) " k# q/ Z( z, [5 M5 t
if len(scrambled) = 0 then
* D6 X$ U0 d% R0 M7 v( D5 w% Q: K base64Decode = ""
5 e d$ P8 B7 ?4 { exit function 4 k' w1 u1 @; L
end if
2 s* J1 g& Q t. l* ] dim realLen 1 R' J2 `: N/ s$ y% _/ E0 } t
realLen = len(scrambled)
- i* k) y) Z- t: W0 a do while mid(scrambled, realLen, 1) = "="
) p8 q+ C I# x5 I; k; W7 } realLen = realLen - 1
8 w: Z5 ]# b# t) ]+ G loop
, K3 q* X+ _' ^0 y1 M- E dim ret, ndx, by4, first, second, third, fourth 4 _2 X# K; A. M) ?) G
ret = "" & p' q7 Q' d. ]3 o; ~
by4 = (realLen \ 4) * 4 1 [" `9 q/ }0 S, K8 S
ndx = 1
2 f4 h" v0 w5 U) |( M1 a do while ndx <= by4 9 o! S& Q2 [" \) d: J
first = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
( F( H& e" T2 _& K second = Base64DecMap(asc(mid(scrambled, ndx+1, 1))) 9 p* T* _! q! h% Z8 A0 Z
third = Base64DecMap(asc(mid(scrambled, ndx+2, 1))) 7 I! z6 ?6 c, e! {* ~
fourth = Base64DecMap(asc(mid(scrambled, ndx+3, 1))) ! b$ E0 y0 L' t+ M: ^* x7 \
ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3))
/ L. C$ k* x! O# Q ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15)) $ k! H( V$ V% B: f1 k- J" i$ d
ret = ret & chr( ((third * 64) AND 255) + (fourth AND 63))
# X s& j6 Z. K. l, s ndx = ndx + 4 7 o7 R. N- K$ P* k) W% R% _
loop
* k$ a$ z% j* t: J- J( j if ndx < realLen then
( D8 h* `" e; z% Z first = Base64DecMap(asc(mid(scrambled, ndx+0, 1))) 4 V6 v' o% s1 V9 u
second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
1 U7 C( S2 N* X! ?9 [, Q ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3)) D) a3 L/ A1 U3 S3 @" X) C
if realLen MOD 4 = 3 then
, W- y2 }, K* ~$ O third = Base64DecMap(asc(mid(scrambled,ndx+2,1))) 6 P0 a8 s. b/ Z. i7 |4 X3 y) v4 H% w
ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15))
: e; p# W( Q j, A6 h5 j end if
" J9 N- u; f7 K9 e5 e end if
) M; i) t" o1 I) \& g" d base64Decode = ret . u R; `. Q: @$ ]3 A. P. [3 e
END FUNCTION " Q: }# R/ |, e" s5 ~0 X
'还原单引号、回车换行函数UnEncode
1 e) j( f; N8 v0 }/ h function UnEncode(cc) 6 A: M5 n! q7 c& F% o E" a. ^
for i = 1 to len(cc) ! P9 [! o) n% f" J
if mid(cc,i,1)<> "水" then + E# X4 {) t" {! q6 z9 S* P3 I8 C
if mid(cc,i,1)="加" then
, Y: H K" F! m" D" d temp = """" & temp
* d8 ~, v) a3 {0 U else " S7 \5 f/ G% V) `5 V: D/ `
temp = Mid(cc, i, 1) + temp
+ |3 f8 S1 M0 {$ Z end if $ l' S: Z4 j3 A0 p" f9 l( y
else 7 u! V" e: F& W' j( i3 g
temp=newline&temp
9 O" C3 n/ p. D; }; E2 G end if d$ l j" `0 l% n$ o6 Y! S
next # x7 Y) t4 z' r, X' B+ r
UnEncode=temp : g4 }8 m! A& _1 ~
end function ) o: n I+ P7 ?# z. d8 {
' r/ r( k- y0 ?" k# a- ?2 o5 D$ H- V
; m7 Y: U* h' ~ 将以上代码以test2.asp名存盘。. G: J ^/ I# ~" w1 j- o! T6 G
; f; J. |# H* Y `9 [ (4)用SRCENC加密test2.asp
- Q& ?5 [; Q4 D2 y0 Z/ b7 {8 S# k; [& x; S' J% L9 t
用SRCENC加密test2.asp,然后把它发布到服务器上,这样别人即使得到该文件、破解了SRCENC加密,也无法看到原代码,因为原代码在test2.asp中是密文(Hu=”c2V0IHJzPXNlcnZlc...),所以ASP代码就被保护起来了!
# O8 I# A; y$ }" c# V$ ?5 ~" ~: h2 E* E- L( x- L
二、加密过的asp程序如何解密?1 `' x" e3 U! m; ^: p5 z, ~
2 c/ R3 R6 ?! w' E* V# p) W% D 如何对加密过的asp程序解密呢?首先我们要告诉大家,用组件法加密的asp程序是无法解密的,而screnc加密过的程序则可以解密,方法是:使用解密软件(ZWDECODE.EXE)。
% p1 J0 ]. Y( L) h; i5 y T
8 j7 Y1 ^- \* n' H' x) } ZWDECODE.EXE(下载地址http://www.mydown.com/softdown/45/45183.html)可以对MS Script Encode加密的ASP文件进行解密,还原出源代码。
+ O" ^3 L8 j, `. f3 y1 ~3 S
+ r& ?% o- ~! U (1)解密方法
! C, T {( @8 G$ i9 z) B3 o8 }) U, t$ y8 g. J) Z6 x
单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可恢复原代码:
' Z$ C6 e- o. D
4 ?( ?* T8 ]' T8 e9 O1 g ZWDECODE <已加密asp文件名>4 j2 q/ Y$ O3 y
6 C# Z" o/ }3 ?- Q 其中<已加密asp文件名>必需输入,该文件名可带目录路径;也必需输入,这是要生成的输出文件名,也可以带路径信息。; p! m6 W" h9 w# z0 A! f
8 m% L) ~7 r1 h M (2)举例
2 u5 {' i1 ]/ i0 X5 L: P5 V
9 I! L8 G. i( F0 f' O# q- O 例如F:\22\lacl.asp曾被screnc加密处理过,现在要恢复其中的源代码,你可以在MS-DOS中输入以下命令:
, W: T6 K" b" L
: W5 G6 G6 I# W9 R: z ZWDECODE F:\22\lacl.asp d:\ulacl.asp1 L* w, }% G7 A! u% I
: c7 i! H7 s- r3 v$ ~* N 执行完毕,在D盘上就会生成一个ulacl.asp文件,打开该文件,你就能看到源代码了! 6 R8 Q$ ?: w+ u7 n5 }% E. v$ D0 K: m
|
|
|