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