|
|
ASP程序加密解密方法全面解析" ]+ ?; S* K. h/ b4 K8 I
2007-08-18 16:413 L$ ^8 \3 r, x4 r ?' K" B0 G" r9 h
目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法……
- S+ W: P z4 F" V- O2 E o
* F" {5 C7 z; X' Q( P 如今,用ASP技术构建的网站随处可见。由于ASP脚本是在服务器上解释执行的(无法编译),因此你辛苦开发出来的ASP代码,很容易被人拷去任意修改,如何保护ASP源代码呢?这是每个ASP站长都会遇到的难题,网上求解这类问题的帖子非常多,下面我们就来谈谈ASP程序的加密方法。
1 E$ V" W0 _) F* R$ \% Z$ M# W
" ]9 ^9 j! h+ d2 O2 j' X3 o: ? 一、如何加密ASP程序?, f8 ^! L2 }3 K' X4 D8 t# U
: E+ [1 R" `3 O' o3 P$ q9 S3 N7 Y 目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法。3 M% E& `% r c
8 q8 N# T6 x |' D- B 1、使用微软的MS Script Encode进行加密
' [5 Y: K& r0 Z# ~6 D) u
; u( F2 `8 e4 U. n0 { 微软提供了脚本编码器MS Script Encode(下载地址http://www.itgene.cn/itgene/download/download.aspID=232),可以对ASP程序进行加密。这是一个简单的命令行工具,其执行文件是SRCENC.EXE,需要在DOS下运行。它只加密页面中嵌入的脚本代码,把网页中之间的ASP代码转换成不可读的乱码,其他部分则保持原样不变。加密后的程序,必须使用Internet Explorer 5.0以上版本才能正常浏览。6 ?& w, m4 N/ M& g" d" L3 e l
! M q9 {* M/ K H6 U7 x% u 用SRCENC加密之后,文件中被加密过的部分将变成只读类型,假如你修改了加密部分(哪怕只改动一个字),就会导致整个文件不能使用。对于 VBScript,加密后在源文件的第一行会显示:<SCRIPT LANGUAGE="VBScript.Encode">;而JScript(或 JavaScript)则会显示:<SCRIPT LANGUAGE="JScript.Encode">
: `7 r* w& x2 A t3 i) S
+ @2 ]/ F- c% I: p (1)加密方法$ l; r @ v9 J; X- ]' r5 @
3 d, D* t" @( @& C: ]
单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可对某个asp文件加密:
; I7 q8 j/ X$ m. _& v8 ^; k* @
5 x# X3 S: ^# o- R SRCENC [switches] <要加密asp文件名> <加密后的文件名>
7 p! |/ ^8 ?$ H3 t2 M6 q7 m$ H9 e8 b0 O2 O% b4 f2 G
其中[switches]项目可以选以下5个参数
2 E3 ^9 b: _1 s& k) R2 y+ x: @/ Y- |5 Y5 Y
[switches] 含义 举例1 x6 n+ s7 G/ k/ K: n) l3 T5 w
3 D4 J7 I) }3 F# W, i /s 可选。命令中带了该参数,加密过程中屏幕上就不会有输出。 screnc /s lacl.sct ulacl.sct
& ^. X7 _; V& J \7 r& ]9 P. n' x4 `( Q6 D
对当前目录中的脚本小程序lacl.sct加密,加密过程中屏幕不显示任何信息" o* q( |- ^3 d. ]9 h5 ^7 C5 y0 j X" ]
, @- A+ q/ |; u5 W /f 可选。指定输出文件是否覆盖同名输入文件。忽略,将不执行覆盖。 screnc /f lacl.asp1 d9 T% Z& N! V5 U
+ g$ p9 b2 c! M9 G7 v 对文件 lacl.asp加密,并用编码后的同名文件覆盖原文件
. K4 b7 d9 _6 c) i, g( U" v. c$ x' a7 c1 o
/xl 可选。是否在.asp文件的顶部添加@Language指令。忽略,将添加。
5 x' k7 Q" j7 \5 S2 }* ]$ V
4 R: T) o+ z9 t) i" G m /l defLanguage 可选。指定Script Encoder加密中选择的缺省脚本语言。文件中不包含这种脚本语言特性的脚本将被Script Encoder 忽略。
d% L' C3 i! ]( z7 J- o8 {) f x# ^. q4 `7 S# \
对于HTML文件,JScript为内置缺省脚本语言;对于ASP文件,VBScript为缺省脚本语言;对于扩展名为.vbs或.js的文件,Script Encoder也有自适应能力。 screnc /l vbscript lacl.htm ulacl.htm" {, C# f$ j' h/ d) h) {" w
$ Y& P0 l' `+ ~! U* A" U
对文件 lacl.htm加密,并生成输出文件 ulacl.htm,确保没有指定语言属性的脚本块使用 VBScript
4 a& e9 Y* G9 X3 X% A9 q4 y5 }$ G" _% ?3 [
/e defExtension 可选。指定待加密文件的文件扩展名。缺省状态下,Script Encoder能识别asa,asp,cdx,htm,html,js,sct和vbs文件。 screnc /e asp 11\*.* f:\labxw-jm% J* @/ D2 }- M" z
3 R9 s% m6 G( M) t9 ]' L 对11目录中的所有.ASP 文件进行加密,并把编码后的输出文件放在f:\labxw-jm目录中" p( |! I1 Q9 V# o& T
4 ?+ r0 q8 h) \+ X. c (2)操作举例+ Q- N- F, K/ K, w
1 G0 N. R/ E+ G3 ]( U 例如要加密当前目录中的lacl.asp文件,生成加密文件ulacl.asp,则在DOS下输入命令:: W g: U7 j3 q O# j$ N' H
4 u' p( Q9 x1 ~6 _7 M
screnc lacl.asp ulacl.asp) _' j# _0 Y) |6 y
; A" c- \+ f L$ h4 n/ x
对当前目录中的所有 .ASP 文件进行加密,并把编码后的输出文件放在f:\labxw中,则使用命令:" y4 r6 F/ A6 J
; i7 e7 l% ]8 x& D$ ^( H9 j# G; F
screnc *.asp f:\labxw+ b1 C+ e1 ?$ Q- v5 Z
% l( P% P* K$ y
2、使用组件加密asp) B+ a* c2 `& H T7 ^
6 \' t: u9 o; ~* R 以上被screnc加密过的程序,是可以解密的(解密方法下文有介绍),如果你想彻底保护自己的asp代码,可以通过开发activex dll组件的方法进行保护。
* t% y' _! [& l6 I+ `( s( C# s6 u5 g7 B
Dll文件是被编译过的机器代码,如果没有源项目文件,是不可能被反编译的,所以组件加密这种方法最安全,也不可能被破解。下面我们来举例说明操作过程,例如你要保护以下asp代码:
2 z& X9 C, ~/ j( D
3 i+ h% D3 g, o- M+ y# P set rs=server.createobject("adodb.recordset")
* B1 L' l: ^8 N8 u sql="select * from gq where xs=1 order by date asc" . ^( D" }0 h5 |/ _
rs.open sql,conn,1,1 8 S1 F- O% C0 v! P1 J
if rs.eof and rs.bof then
4 [# Q7 D% w1 e response.write"<A HREF=new0.asp?lbid=gqx ><%= gqx %></A>" K+ X7 G% x+ R4 X3 m1 d9 x, H
else * f- V# ^' B" {- U% @+ c
Response.Write "" * Q+ n, H2 h- H; c
end if . g0 p; T5 i' T! m# I& y6 C
set rs=nothing
+ K, N+ q7 ^" }2 P( p0 J$ o: p conn.close z5 _& c }" f! `
set conn=nothing 4 w' Y/ |" O* t1 o: N) x
) \' @1 z$ @1 q( U2 Y. D3 u$ k7 T
可以把它们改写成VB组件,然后在ASP文件中调用组件即可。操作步骤如下:2 B8 w& Z1 w/ ]5 J5 {7 M# r/ _
8 |8 D8 r* M z* P/ p
(1)新建一个vb6的activex dll项目0 n& ^# b+ f: f+ q3 T
0 z y7 k, l) Y- O& ?6 i0 F 在属性窗口中,命名你的库模块和项目文件(例如项目名lacl,模块名disp),以后在asp文件中,调用的对象名将为lacl_disp5 Y* o# U* k& k: d4 m
& l. t9 ]) B( U* v( P+ @% ^# v- ] 选择vb6中的项目菜单中的references ,选中microsoft activex data objects 2.0 library
+ }+ w1 u1 w% K* ]2 ?) f w3 G+ |+ `2 M/ m
(2)编写VB组件4 E. Y5 c" Q8 n) a ?6 f
3 J4 J D" w, f/ t
接下来把<欲保护的asp代码>改写成VB组件,代码如下:
4 D6 C1 D" T0 l, V- A+ f1 |! p* Z& B0 Q8 z0 N# W
public function html_combo(disp_table as string) as string
6 n5 u& r8 C1 w3 j' p% [ dim outstring as string 0 L6 T& W! j1 z$ f# L7 i s3 p# @
dim conn as adodb.connection
2 |5 M! r# E% U' x- G: m dim rst as adodb.recordset
) w8 l5 N2 D. h/ ]0 J' x dim sqlstring as string ( `/ ~# ?5 \$ T5 K. c, X1 w# a6 H
set conn = createobject("adodb.connection") - p4 U* f5 V/ d
set rst = createobject("adodb.recordset") + g/ B% z* W0 Y9 g
sqlstring = "select * from " & disp_table & " where xs=1 order by date asc" 2 X: `6 F' [" u& s; Y6 o! E
'以上是在VB中打开数据库操作,数据库中的表名、字段名,你可以根据自己的需要修改
! H! K. Y, S( C6 D& g& O# H: Z5 [ conn.open "dsn=sumnet"
* G F& u# \$ M( C { rst.open sqlstring, conn, 3, 3 8 [( E. b1 d4 M ^; G
if rst.eof and rst.bof then + Y4 c3 z# T: ]4 m8 _& ^
outstring = "还没有这类单位信息" * A: h0 K8 [9 T5 `8 d* U* d! z b. M
else 0 S, [" `2 @3 j% {: a6 X; _6 O
rst.movefirst
# N' `/ @5 m/ r. M( e, L4 } outstring = "<A HREF=new0.asp?lbid="&request("lbid") & "></A>" % G1 z0 _% N. P, O! D) @, f
end if
: O) H, h$ o. l" m' T- D! a6 C html_combo = outstring # u$ S+ Q3 e* ~- {; D
rst.close 1 x: Q' f) \" e$ e
conn.close
' d5 J$ ^. Y# k( Y+ D0 b end function ( e/ n, `$ S9 I5 \
" `" X* {- Y" h1 H2 X; }
写好以上VB代码后,保存项目并开始编译。3 m. K! K4 s; f4 N: F7 n$ ?
; g+ }, w# j% K! u- u, B1 L' y
(3)生成安装文件) M, O& I. q& n8 R; X" w
$ P" G7 y/ s% v0 T/ L! C. |4 E: q 打开visual studio 6中附带的package deployment wizard程序,选择刚才建立的activex项目文件lacl;选择package,选择要打包的脚本或使用默认脚本,选择标准安装,为生成的安装文件选择一个存放目录,选择single cab. 其他均默认;然后单击下一步,安装文件就自动生成了!& u8 O* L2 ]& g) }- s: G: `$ y
$ y% D+ p" t7 [8 O+ n( E (4)在IIS服务器上安装组件
# H+ M/ ~9 K) C8 z! i& O$ f) o I9 p
$ k8 {% ?: A; a$ p0 U8 s9 P$ u 在IIS服务器上运行这个安装文件,把组件安装到服务器上。$ | T( w. [" N1 a
" Z: P( Z5 y6 f5 g
(5)在网页中调用组件
E+ u# Q% H: M7 `* }2 ^+ H3 L" G$ ^2 F
以后在ASP文件中,通过调用该组件完成原来的功能。在网页中调用你制作的组件,方法如下:
9 B6 q1 i( ?# N9 f4 h) d
& @4 t8 L/ g( n. Y: Q- w! l <%@ language="vbscript" %> * |0 V( ^1 b5 A2 ~
<% + \2 u& s3 \9 m# {7 P
set diaoyong = server.createobject("lacl_disp.disp")
9 o2 e4 x% Q6 E' s" G- g" } %>
+ b! W2 `8 ?! n6 `; q <html>
: ^$ { g) k+ }4 A# z% X' y7 J1 B <body>
9 C, |5 \& v& J1 u/ M$ p: q# D. i <%= diaoyong.html_combo("gq")%>
7 ^4 \6 [" L% v0 L& q- q <br>
4 i: m/ }% P. x8 N7 M( K </body>
. _/ m: z1 R# U r2 n& n2 b% S </html> 4 p% L8 Z# {/ \ N+ d- R: E- [
. M8 o4 G2 f- x: c' z
3 m, g* C1 x# ]) i; g5 D% G# e* C' n 你看,现在Asp文件中的内容只是组件的调用(与以前完全不同),别人即使得到该文件,也无法编辑修改源代码,因为代码都被封装在VB组件中了,对于组件中的代码,外人是无法看到、也不能反编译的!: B) t6 ^$ w" G6 [+ b& g
+ H! k* D; g% @; _ c# q 3、自己编写加密程序
( ^6 L5 Z: a' u3 v. T& D& q* o
1 b" i0 [9 B5 O7 E3 f0 L 组件加密方法虽然不可破解,但是要求你熟悉VB编程,需要把ASP代码改写成VB组件,工作量很大,所以建议大家自己编程来保护asp代码,其基本思路是:写一个加密函数base64Encode和解密函数base64Decode,先用加密函数处理<要保护的asp代码>,得到对应的密文hu;然后再用execute(base64Decode(hu))替换<欲保护的asp代码>。
$ L4 g9 h& w7 W) d8 |
: s' E/ q' h: n% U 例如我们要保护上面那段asp代码,可以这样操作: \1 @4 ?; \3 s& t5 }% ]2 i# i
' {: h% w6 ?. n' p: k
(1)用WORD处理<要保护的ASP代码>% r( B! @/ a7 Z7 ? d: R( ]$ }
4 }1 g3 D) ]* r 将<要保护的ASP代码>拷到WORD中;在WORD中,把代码里的段落标记(回车换行)全部替换成“水”这个汉字,方法是:点击“编辑”/替换,光标移到“查找内容”栏,点“高级”/特殊字符,选择“段落标记”;光标移到“替换为”栏,输入“水”,最后点“全部替换”。同法,把代码中的单引号也全部替换成“加”这个汉字。( q$ |; } D4 {3 Y/ V
}- ~& f6 B; V3 ]/ e2 J
(2)编写、运行加密程序
; l0 B4 V0 u5 a/ M3 a5 ]9 ~( z/ n2 R! Q1 o7 ^8 i" g; C/ f& d
在FrontPage中编写加密程序,该程序中有初始化函数initCodecs、加密函数base64Encode(代码如下),把WORD处理后的代码,copy粘贴在inp = ""这句中,最后以test1.asp名存盘;在IE中输入http://127.0.0.1/test1.asp本地运行该文件;屏幕上会显示一大段乱码(例如c2V0IHJzPXNlcnZlci5jcmVhd...),这就是《要保护的asp代码》对应的密文!
7 B! c' V" O: g5 Y! V E9 H3 ?% e1 o5 x0 v0 W
OPTION EXPLICIT 1 q$ w3 S$ g9 j O9 d2 Z" A
const BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" 1 b0 ?6 s7 B d; o- j* B! m
dim newline
% T! T9 w6 m8 O$ i: u dim Base64EncMap(63)
1 A. t/ U. [: d4 o. J dim Base64DecMap(127) 9 ^4 ` z1 j+ X# \# ^
dim inp,hu,encode ! I+ o" m5 h9 E1 R" ^ l3 U3 q! K% a& I
call initCodecs '初始化
9 I( P6 H# a- H+ V inp = "<WORD处理后的asp代码>" '将要保护的asp代码用WORD处理,然后填在此处 + P. q8 x5 U: t5 C
hu= base64Encode(inp) '调用函数base64Encode进行加密,得到密文hu
& [7 n3 E* f& l- Y; \$ W Response.Write(hu) '显示密文
8 J7 p7 @1 `; d0 a; @: j PUBLIC SUB initCodecs() '初始化函数initCodecs
* y' h/ V9 q# |1 M newline = "<P>" & chr(13) & chr(10)" U" s7 m9 L+ l2 ~
dim max, idx : G4 u& y, V7 Z5 T1 u
max = len(BASE_64_MAP_INIT)
6 s: ~' } c5 S b% B for idx = 0 to max - 1 - z' {% K1 A" Z) ~" \% N6 u
Base64EncMap(idx) = mid(BASE_64_MAP_INIT, idx + 1, 1)
3 i0 }1 E# {- @1 `0 P9 V. f next # B# B; Z1 X( |5 {
for idx = 0 to max - 1
9 i3 s# d9 S( n3 E0 C Base64DecMap(ASC(Base64EncMap(idx))) = idx
* q4 K8 n% L: H* z# o next & u# i h. u, n0 R3 w, q
END SUB 5 ~" s6 G$ u6 h7 Q* P2 v& ?8 c) v/ H
PUBLIC FUNCTION base64Encode(plain) '加密函数base64Encode / K8 ^1 S- m- c8 V% g, S, ?6 `
if len(plain) = 0 then 2 j% b& H; v; S! _2 r
base64Encode = ""
# C. r; L7 Z- q4 _ n" u exit function - P0 {3 T# X+ g2 I6 G) i9 }5 d% I
end if
9 S2 B) k; d& b9 {) ~ Y/ e4 _ dim ret, ndx, by3, first, second, third / c3 W5 ^* ?1 _7 K
by3 = (len(plain) \ 3) * 3 $ \/ {" l. ^ j; h# v
ndx = 1 ( w* g2 W) J# O0 _1 C7 L
do while ndx <= by3
* a! s+ i9 ]; v# J/ W4 Q3 q first = asc(mid(plain, ndx+0, 1))
8 l& m6 _( X1 t& {% c, h. S& b second = asc(mid(plain, ndx+1, 1)) C2 m$ d! N. g+ C1 K+ z
third = asc(mid(plain, ndx+2, 1)) 7 B# Q' F7 J# s9 a, A6 C$ ^
ret = ret & Base64EncMap( (first \ 4) AND 63 )
; ^0 K/ l) s/ H2 Q6 Q [; v ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
) U. ]$ c# E3 ^5 C: P ret = ret & Base64EncMap( ((second * 4) AND 60) + ((third \ 64) AND 3 ) ) * L9 q* U/ K7 d0 k; N3 h; J3 E$ J+ G: s
ret = ret & Base64EncMap( third AND 63)
! [5 i& c) g7 ~/ K M. E7 K ndx = ndx + 3 / j1 d' Y8 O8 s1 y) X6 Z
loop
0 \( ]3 B6 a4 v) y" D0 Z8 K- \ if by3 < len(plain) then & F; Y7 Y0 s. d: H
first = asc(mid(plain, ndx+0, 1)) ' T! r% _3 n8 {+ F
ret = ret & Base64EncMap( (first \ 4) AND 63 ) + }" N1 r P2 }1 D2 B
if (len(plain) MOD 3 ) = 2 then 6 z( C! O3 M& p2 d6 r A
second = asc(mid(plain, ndx+1, 1)) ; t+ p( ?; R" Z g. W# }$ b- I
ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
3 E; w; p, C- s0 O3 Z2 ^ ret = ret & Base64EncMap( ((second * 4) AND 60) )
. f9 N. @6 r/ C; H; G# u+ y, R else
* L( L4 ?. B5 K ret = ret & Base64EncMap( (first * 16) AND 48)
- B0 w& A6 ~0 I; c, s+ _ ret = ret '& "=" ' ~5 L# W/ v" a& h# W
end if
) P. C. {6 q9 [0 M ret = ret '& "=" , q( c- |4 W, \* @. B
end if + y7 Y* C, `! w. D* F9 h
base64Encode = ret
5 ?2 W+ Z$ c$ X# e END FUNCTION 0 r; P/ r8 r/ y# S( U! @
2 n7 J, G. k( N- K; A (3)重新改写要保护的asp文件: n% J. M' J J) i! C% W
( I9 A% e4 f7 R! R+ N6 U: q/ e
改写原来的asp文件,在文件中增加UnEncode 和base64Decode函数,全部代码如下:
f0 U% L* g: V. z. d7 D9 H# z5 P; f+ U' _% ?# G
Dim Hu,Hu2 . R1 \- S' t; o/ H
'拷贝“欲保护asp代码”的密文 将之存放到Hu变量中 - Z" V2 h' ~% v8 b
Hu=”c2V0IHJzPXNlcnZlci5jcmVhdGVvYmplY3Qo12Fkb2RiLnJlY29yZHNldOMpICAgICDuc3FsPeNzZWxlY3QgKiBmcm9tIGdxICB3aGVyZSB4cz0xIG9yZGVyIGJ5IGRhdGUgYXNj1yAgICAgsnJzLm9wZW4gc3FsLGNvbm4sMSwxICAgICDuaWYgcnMuZW9mIGFuZCBycy5ib2YgdGhlbiDucmVzcG9uc2Uud3JpdGUTvSD7INAg5iAgILUgvyAFILITsmVsc2UgsiAgICAgUmVzcG9uc2UuV3JpdGUg1zxBIEhSRUY9bmV3MC5hc3A/bGJpZD0TJnJlcXVlc3Qo12xiaWQTKSAmIOM+PC9BPuPuZW5kIGlmICAgIL5zZXQgcnM9bm90aGluZyAgICAgICAgsmNvbm4uY2xvc2UgICAgICDuc2V0IGNvbm49bm90aGluZyAgIL4” & @, g. j. r5 A& o) u( j0 D8 c
Hu2= base64Decode(hu) '还原要保护的ASP代码
, H6 Z! a! M* z execute(UnEncode(Hu2)) '还原单引号、回车换行,并执行原代码 - f/ ?& m4 M6 N) z K) T
’解密函数base64Decode 0 u! j" r0 b6 ]! z
FUNCTION base64Decode(scrambled) 5 h0 v. A, K' N# s" I+ T8 w; B3 y
if len(scrambled) = 0 then
5 n. C6 x) b; M3 U base64Decode = "" 1 c2 H' [& Y) C. w; m* f7 |! G
exit function
* n0 ?) [' q3 B3 G- } end if
- M9 n8 x0 V: g b P dim realLen
9 H6 j j, [5 U0 e' q* c realLen = len(scrambled) z. u' D' ~3 L( P+ w7 V1 j' h
do while mid(scrambled, realLen, 1) = "="
# {/ U* [3 ?" `, b @: }& ` realLen = realLen - 1
2 K. @$ p6 |, q" v( G loop + Z) w6 p6 }9 o& y6 K% I
dim ret, ndx, by4, first, second, third, fourth 0 R0 Z/ L' r" j( E8 E# V
ret = "" - B# M5 l' t L, p: ^* p. h# o
by4 = (realLen \ 4) * 4 ( W, z9 e9 W( D3 A, [
ndx = 1 ' M$ N4 o j+ a/ C. y0 A* j6 q
do while ndx <= by4 $ N- T! ]3 A5 h1 M3 |
first = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
8 x. M) e3 x5 u( i* U second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
- L: i! J- D3 G5 U* N+ }* w- i third = Base64DecMap(asc(mid(scrambled, ndx+2, 1))) ) ~, s$ s6 _+ {8 Y2 s
fourth = Base64DecMap(asc(mid(scrambled, ndx+3, 1)))
) F6 j" o9 e( l$ D" O( R- F$ h ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3)) * @- N% r Q; n! E4 {
ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15)) . t7 ^, m& y% H S( S/ u
ret = ret & chr( ((third * 64) AND 255) + (fourth AND 63)) 3 O# N& S; ~ D3 X# c; o7 W- G E
ndx = ndx + 4 1 r# [! a- J2 `7 r x
loop 6 n5 E e# u* d7 C) [$ f# W
if ndx < realLen then " x2 r. q! M# \. n
first = Base64DecMap(asc(mid(scrambled, ndx+0, 1))) - A6 F8 [. j0 ^2 v3 w- _
second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
3 b3 x) e% }/ J ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3))
5 ~9 g" G3 Q4 K- \ if realLen MOD 4 = 3 then
/ e4 A$ N( c" E4 o1 ^ third = Base64DecMap(asc(mid(scrambled,ndx+2,1)))
- ]& [$ `8 m' I9 V( H1 s8 y. g# c ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15)) & N/ _0 F; M9 M7 V
end if + d. q3 F4 k6 q1 m, y; V/ E
end if 5 @) w6 w/ X1 v
base64Decode = ret 7 f% }/ W- v5 L
END FUNCTION
3 V- N" k4 l2 s7 U8 F '还原单引号、回车换行函数UnEncode + G3 [5 |* ?7 ]8 ]
function UnEncode(cc) 0 |. ~6 Q4 n8 j. U+ q$ j# n
for i = 1 to len(cc) ( U" e" b: N; {7 H
if mid(cc,i,1)<> "水" then / r3 J. c) x) V. }9 P- z# c
if mid(cc,i,1)="加" then
; u7 X2 p# _" {: K+ a1 f. ^ temp = """" & temp - n# w2 W+ O* S" }4 S( P" z
else
+ b+ m5 g/ G6 h+ ^ temp = Mid(cc, i, 1) + temp 0 i0 @$ f0 S4 p
end if 3 x" n+ t. Z! E$ |9 ^# C
else % Q! P0 L; r" u& q$ ~
temp=newline&temp ( y4 }& u- o! B2 x
end if
* E. P, q( H7 I% w6 E next 3 a+ G6 U: D( p6 q( {
UnEncode=temp $ T9 i) D; B4 l5 E8 F) Z
end function
) j4 K U- z3 f; W$ z; b0 N6 f! s3 p2 ^ f
3 W7 y+ c) e& B# q4 n 将以上代码以test2.asp名存盘。
. u& q. ^. I+ m+ M
7 w9 H; y! S8 _8 h+ v, p (4)用SRCENC加密test2.asp( X5 g; k: \4 L$ c6 B1 J8 O ~! B* }& }! O
, J+ u" v' t' e
用SRCENC加密test2.asp,然后把它发布到服务器上,这样别人即使得到该文件、破解了SRCENC加密,也无法看到原代码,因为原代码在test2.asp中是密文(Hu=”c2V0IHJzPXNlcnZlc...),所以ASP代码就被保护起来了!' q2 a7 X. J% C, ]8 Y9 V
& a! M& N7 `0 U Z
二、加密过的asp程序如何解密?
2 a& Q1 \0 @! A8 \; A0 c8 [4 U( [: p3 m1 R& c
如何对加密过的asp程序解密呢?首先我们要告诉大家,用组件法加密的asp程序是无法解密的,而screnc加密过的程序则可以解密,方法是:使用解密软件(ZWDECODE.EXE)。; X4 v. o; r9 ~7 S2 j
) h( Q" j9 I, s! U4 F- r ZWDECODE.EXE(下载地址http://www.mydown.com/softdown/45/45183.html)可以对MS Script Encode加密的ASP文件进行解密,还原出源代码。8 q! u5 v! r) H; Q- S4 \0 G
- g- T5 m& F N6 r, U (1)解密方法' E" a8 i) A" c! e' p
; W1 g; h/ y' [
单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可恢复原代码:" m/ ~& H% ?4 W x
L. V" b6 b0 J ZWDECODE <已加密asp文件名>0 R3 E# ?! S" W0 q) |
0 V8 i6 Z( r% W. l# f
其中<已加密asp文件名>必需输入,该文件名可带目录路径;也必需输入,这是要生成的输出文件名,也可以带路径信息。
7 u r9 d- L3 }9 x6 a, d$ T: ]& D/ Z: C
(2)举例
, ~5 N' f. F k* L2 w( [7 k
; s* g% s, M& K3 Y. J* ?7 c! _ U7 P 例如F:\22\lacl.asp曾被screnc加密处理过,现在要恢复其中的源代码,你可以在MS-DOS中输入以下命令:
2 ]6 y: r2 B! v. _" Y; n5 J/ ~
$ w: s, U; Y6 h1 ?# Y4 p ZWDECODE F:\22\lacl.asp d:\ulacl.asp
; D5 N9 m8 M+ h7 \4 [( g! m. s0 }8 H. j! V7 ~2 |8 ]
执行完毕,在D盘上就会生成一个ulacl.asp文件,打开该文件,你就能看到源代码了!
2 T+ i+ ^% l3 O% ^ |
|
|