|
ASP程序加密解密方法全面解析
4 ^% `1 `; g! a' G% G# U3 o9 x2007-08-18 16:41
8 c% X( f, J/ g, v1 E( \ 目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法……
2 V* T0 s0 r" q
0 Y: o/ g M4 e; x 如今,用ASP技术构建的网站随处可见。由于ASP脚本是在服务器上解释执行的(无法编译),因此你辛苦开发出来的ASP代码,很容易被人拷去任意修改,如何保护ASP源代码呢?这是每个ASP站长都会遇到的难题,网上求解这类问题的帖子非常多,下面我们就来谈谈ASP程序的加密方法。
9 A, y, Y- A9 B4 s( Z' }( l& O2 b! N/ j
一、如何加密ASP程序?8 Q$ Y8 u7 q) Y+ G0 {* L
, b8 Q& C! x5 e, g, M 目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法。' n1 k& H9 e' y- z n: o
" }* ?- l- C8 o0 ?$ h6 v C2 y
1、使用微软的MS Script Encode进行加密
: ?+ B2 c# ~2 Y2 L4 K, y) X6 g6 ~$ ?! c0 T( ~
微软提供了脚本编码器MS Script Encode(下载地址http://www.itgene.cn/itgene/download/download.aspID=232),可以对ASP程序进行加密。这是一个简单的命令行工具,其执行文件是SRCENC.EXE,需要在DOS下运行。它只加密页面中嵌入的脚本代码,把网页中之间的ASP代码转换成不可读的乱码,其他部分则保持原样不变。加密后的程序,必须使用Internet Explorer 5.0以上版本才能正常浏览。$ y) ~+ J g, L) a' y
4 I |* [& i5 } 用SRCENC加密之后,文件中被加密过的部分将变成只读类型,假如你修改了加密部分(哪怕只改动一个字),就会导致整个文件不能使用。对于 VBScript,加密后在源文件的第一行会显示:<SCRIPT LANGUAGE="VBScript.Encode">;而JScript(或 JavaScript)则会显示:<SCRIPT LANGUAGE="JScript.Encode">2 H5 }+ }# Z& ?+ \- S& Z1 ~
+ ^2 I9 d$ I9 l) `3 s0 c$ C3 h8 _+ o
(1)加密方法
$ \0 L$ ~ Y T+ o: a1 j6 t1 Q- y; `* l- N
单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可对某个asp文件加密:% H( b. l" x( A
n( e; @" |6 l+ J SRCENC [switches] <要加密asp文件名> <加密后的文件名>- @; _7 H& `: [* I
+ g: z: i4 e3 S
其中[switches]项目可以选以下5个参数
6 z3 O7 g+ O2 r/ s+ m# Z* r5 V, l& x- }4 ` _5 [
[switches] 含义 举例' i# h$ e" @- @+ y* U
9 R# e9 T0 L4 [- g /s 可选。命令中带了该参数,加密过程中屏幕上就不会有输出。 screnc /s lacl.sct ulacl.sct
; @; f; m9 l) o, H6 v' U6 N! W' t* |4 V& {& I! ?" S
对当前目录中的脚本小程序lacl.sct加密,加密过程中屏幕不显示任何信息
% K. i# [) A; N
) P* m& Q% K: _; A! [# a4 Q7 _ /f 可选。指定输出文件是否覆盖同名输入文件。忽略,将不执行覆盖。 screnc /f lacl.asp0 Y' y$ \+ E N( X9 D
2 _( p+ }' D+ u, ~9 y 对文件 lacl.asp加密,并用编码后的同名文件覆盖原文件$ u) @' C" m2 D9 V/ n
, [/ m# }4 `2 Y' L$ V# s% y# L+ b! Y /xl 可选。是否在.asp文件的顶部添加@Language指令。忽略,将添加。
+ {8 F% i) o6 q- @7 A) W% ?5 l8 D
/l defLanguage 可选。指定Script Encoder加密中选择的缺省脚本语言。文件中不包含这种脚本语言特性的脚本将被Script Encoder 忽略。
& n. d& S/ a# G; v- o
: o) M% W% x" m( I; \& w 对于HTML文件,JScript为内置缺省脚本语言;对于ASP文件,VBScript为缺省脚本语言;对于扩展名为.vbs或.js的文件,Script Encoder也有自适应能力。 screnc /l vbscript lacl.htm ulacl.htm# ^9 R2 C5 T, G; l
5 U! S3 c5 p* e5 X. s1 ? 对文件 lacl.htm加密,并生成输出文件 ulacl.htm,确保没有指定语言属性的脚本块使用 VBScript$ a2 i) \5 ~- @1 ?2 L
+ r% ~5 u% f4 ~8 v* [
/e defExtension 可选。指定待加密文件的文件扩展名。缺省状态下,Script Encoder能识别asa,asp,cdx,htm,html,js,sct和vbs文件。 screnc /e asp 11\*.* f:\labxw-jm
, `; b" t* I4 L
) ?- B; X4 E. J% m! n 对11目录中的所有.ASP 文件进行加密,并把编码后的输出文件放在f:\labxw-jm目录中4 N* `; r- M; N8 T% v& g3 _
7 [. Q/ F. L" ^( Y2 K
(2)操作举例3 f8 D# I" {% [' p( v2 v
$ _7 r3 c1 J$ `& m0 r 例如要加密当前目录中的lacl.asp文件,生成加密文件ulacl.asp,则在DOS下输入命令:
; I% p* \. N. Y/ ~: T$ o; G4 b# ^/ y( x1 z* P( a4 X3 {" L
screnc lacl.asp ulacl.asp
7 K& O/ F/ b! n: d) q) t c5 I$ v- Q9 ^
对当前目录中的所有 .ASP 文件进行加密,并把编码后的输出文件放在f:\labxw中,则使用命令:
. s1 O1 v2 ^ \' A" y; _+ R( o' z) S* Y
screnc *.asp f:\labxw
0 w ~: i1 M" l/ I Y! @4 Z: B. ~& F( f8 m% ~7 t
2、使用组件加密asp4 S& s7 s% L& _
; @2 @) o8 Y9 D
以上被screnc加密过的程序,是可以解密的(解密方法下文有介绍),如果你想彻底保护自己的asp代码,可以通过开发activex dll组件的方法进行保护。2 i& t1 p9 K& W9 z1 B* V- Y
1 s$ ?# j! L- K$ O% e
Dll文件是被编译过的机器代码,如果没有源项目文件,是不可能被反编译的,所以组件加密这种方法最安全,也不可能被破解。下面我们来举例说明操作过程,例如你要保护以下asp代码:: Y+ ?% U# J- g$ c+ X
6 d! O: z2 i$ I& b _& y+ r% p
set rs=server.createobject("adodb.recordset") 5 C- l: `7 @, I/ S9 O
sql="select * from gq where xs=1 order by date asc" % ]9 M( m( o5 ^1 p; o n
rs.open sql,conn,1,1 P4 x" [ K0 {7 A8 V+ t* P' o4 g
if rs.eof and rs.bof then / o2 Z0 t( z/ V. {" H* ~
response.write"<A HREF=new0.asp?lbid=gqx ><%= gqx %></A>"
, H/ z) F) \' L1 \$ i1 P else 6 l- O' `7 K( G `1 _8 P, ^/ A7 q0 K' f& @
Response.Write "" : j; O3 A) v8 g, Q8 z
end if 2 f7 Z" |; k& E; @8 F: p2 y, [
set rs=nothing ( G3 @5 k2 f6 t0 i9 t3 N8 B) V6 [ R; U# j
conn.close
5 B/ }, {; I* e2 N set conn=nothing ( l, } H6 c! R5 y# H
& d& N K: i H% } 可以把它们改写成VB组件,然后在ASP文件中调用组件即可。操作步骤如下:5 }9 _3 N& `' c( g# z
+ G4 M$ U1 I# n. p% g
(1)新建一个vb6的activex dll项目
a; v1 `: z% O7 ?* m7 a) y, _1 W* j5 d$ k3 T2 j- F
在属性窗口中,命名你的库模块和项目文件(例如项目名lacl,模块名disp),以后在asp文件中,调用的对象名将为lacl_disp
5 y/ t+ \% g6 J, j' B2 R# p2 Y# Y f6 X% ?1 [
选择vb6中的项目菜单中的references ,选中microsoft activex data objects 2.0 library
) F2 p- `' y3 q! X* g) ?0 Y
1 B% p) t8 B0 w (2)编写VB组件% X7 p; w+ g* e
+ m. C" |- O- V s( g
接下来把<欲保护的asp代码>改写成VB组件,代码如下:, [0 [4 p" `$ U* ~4 Y
; ?8 {/ ~) p; o: k( X
public function html_combo(disp_table as string) as string
# I/ Y* f5 H/ ^+ v, G" Y$ B/ Q) r dim outstring as string
; U/ L* g. `$ u F% }9 E dim conn as adodb.connection
5 @ ?# B, Q: {; s dim rst as adodb.recordset
/ u4 N% O# p6 d; p dim sqlstring as string
7 _" }7 O6 U+ y& i# o set conn = createobject("adodb.connection")
" f O! Q+ z* E% `' g) S set rst = createobject("adodb.recordset") 4 I* q1 j1 Z' p9 K& b
sqlstring = "select * from " & disp_table & " where xs=1 order by date asc"
! o- A- c/ r1 t9 V' s+ \ '以上是在VB中打开数据库操作,数据库中的表名、字段名,你可以根据自己的需要修改
# Y8 I( l2 n! G9 ]5 A! \2 u conn.open "dsn=sumnet"
8 c" h6 U; y! s# @, ]) C& q rst.open sqlstring, conn, 3, 3
; K/ S2 ]( J) h7 `7 _: |, Y if rst.eof and rst.bof then
0 h8 f# k: L; Z1 Z$ i4 R& C) p outstring = "还没有这类单位信息" 5 i' v u2 Z4 I/ ^" h" L# ` i
else
7 r; o- O1 u9 G rst.movefirst 0 \" U4 X3 U: {9 I% E
outstring = "<A HREF=new0.asp?lbid="&request("lbid") & "></A>" 2 j2 @' o6 g9 P; V+ s3 s. q9 I
end if
' ]# U( C# k' F# y- p html_combo = outstring 9 Q0 v! M3 d1 l/ A C7 m
rst.close
. [$ s9 D- s" |- z& _7 l conn.close
1 v2 P# Y& t7 C4 M6 M$ c end function , ?3 S$ r X6 i0 W, m
?2 O/ S( N8 s9 B2 h- D1 ]
写好以上VB代码后,保存项目并开始编译。
( C7 F# }5 Z G+ Q) I3 w6 r' o: z6 u9 u3 h: N- v/ b
(3)生成安装文件8 D1 E0 N$ T4 N/ v
; A; x$ P; j3 b, ~4 m5 p
打开visual studio 6中附带的package deployment wizard程序,选择刚才建立的activex项目文件lacl;选择package,选择要打包的脚本或使用默认脚本,选择标准安装,为生成的安装文件选择一个存放目录,选择single cab. 其他均默认;然后单击下一步,安装文件就自动生成了!$ |: m# E( o; m! s6 p
; x- H# M8 ~0 ^+ ]
(4)在IIS服务器上安装组件
; ~& x3 L3 ~& F" A) o6 H3 n/ q( _7 c7 g5 e
在IIS服务器上运行这个安装文件,把组件安装到服务器上。; q! Z7 c9 `3 R/ Y' K
# {9 o/ p S0 n& ?5 _4 s/ l0 Q
(5)在网页中调用组件/ T6 r% u0 x4 I- n; M: X' ]) }: ^
% o [) T( U; O1 x: o: g$ a
以后在ASP文件中,通过调用该组件完成原来的功能。在网页中调用你制作的组件,方法如下:! C! v7 Z, `& Y% d
/ H5 f9 T& o @) P
<%@ language="vbscript" %> 2 m9 e9 K" f |; [* B9 w
<% / t5 R7 v3 q d9 h7 ^( `( u
set diaoyong = server.createobject("lacl_disp.disp") ) B3 ?! n" O- }6 r# \! m! J
%>
0 Z7 q" v) N, E8 g <html>
) ~( ^* Q% n9 ]% S2 W2 X <body>
3 F; n7 \' M6 P9 B5 F <%= diaoyong.html_combo("gq")%>
+ {7 `8 L: ^; e d# M% D6 t4 Y <br>
?$ W) y8 H9 L, Y; c </body> ; r. x i* b9 z" N+ a
</html>
# ^' H T, W( b! T
5 G/ j: D6 ~/ @$ P: x/ [
& {% S) w$ `6 U! @, [+ L9 [ 你看,现在Asp文件中的内容只是组件的调用(与以前完全不同),别人即使得到该文件,也无法编辑修改源代码,因为代码都被封装在VB组件中了,对于组件中的代码,外人是无法看到、也不能反编译的!
_4 M; F: S! C; U4 I% u8 U+ I2 Z5 w& \( o+ o6 `, [
3、自己编写加密程序; ?( h3 u9 V7 q* G' U, A$ T
) b/ M6 J( H* j$ b! \: K: r. G9 T6 `6 D' h 组件加密方法虽然不可破解,但是要求你熟悉VB编程,需要把ASP代码改写成VB组件,工作量很大,所以建议大家自己编程来保护asp代码,其基本思路是:写一个加密函数base64Encode和解密函数base64Decode,先用加密函数处理<要保护的asp代码>,得到对应的密文hu;然后再用execute(base64Decode(hu))替换<欲保护的asp代码>。
! w+ R' ]$ z/ I; Z% D4 T' [/ O# |
' o) H$ C3 O* R: o' u% u% }( i 例如我们要保护上面那段asp代码,可以这样操作:3 [! e$ k: v+ w, q, m* [1 U" i) L
# W' p2 d. s! \2 ]$ x/ k" q (1)用WORD处理<要保护的ASP代码>
# }* y+ Y* E9 q$ F* z3 K- L! J
, ^! X1 ]+ L1 b+ S 将<要保护的ASP代码>拷到WORD中;在WORD中,把代码里的段落标记(回车换行)全部替换成“水”这个汉字,方法是:点击“编辑”/替换,光标移到“查找内容”栏,点“高级”/特殊字符,选择“段落标记”;光标移到“替换为”栏,输入“水”,最后点“全部替换”。同法,把代码中的单引号也全部替换成“加”这个汉字。1 W4 \$ P) C6 w/ P: E
) O; h3 V8 _& [. i
(2)编写、运行加密程序
3 E, Q0 S: f. W/ f. v
( X6 m1 q3 r. Y s 在FrontPage中编写加密程序,该程序中有初始化函数initCodecs、加密函数base64Encode(代码如下),把WORD处理后的代码,copy粘贴在inp = ""这句中,最后以test1.asp名存盘;在IE中输入http://127.0.0.1/test1.asp本地运行该文件;屏幕上会显示一大段乱码(例如c2V0IHJzPXNlcnZlci5jcmVhd...),这就是《要保护的asp代码》对应的密文!
3 G- M+ j! T8 p$ ], T) l, Q# l0 L* G2 P+ w$ j
OPTION EXPLICIT
" L' m5 d6 d; j2 E! \' \$ k const BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
z9 y, ?5 Y- D5 z9 i! v+ v4 d dim newline . n1 Y9 k# ~ R+ ~! ~1 h- y, T
dim Base64EncMap(63)
3 k; Q" Q* x/ G5 f% {: P1 |8 O dim Base64DecMap(127)
% f4 I( ?6 u$ n9 f7 g dim inp,hu,encode
6 t! g; @! A* \: M, L/ x call initCodecs '初始化
% _3 \$ C8 Q. T) R* C+ \6 U inp = "<WORD处理后的asp代码>" '将要保护的asp代码用WORD处理,然后填在此处
1 D( j! q9 ^) A' J7 R hu= base64Encode(inp) '调用函数base64Encode进行加密,得到密文hu ( Y8 u$ p1 K# U
Response.Write(hu) '显示密文 " p/ a* x* U' q& F K
PUBLIC SUB initCodecs() '初始化函数initCodecs
% G- h; w9 O+ h. K L: ` newline = "<P>" & chr(13) & chr(10)
# U9 ?$ r! a+ ^ dim max, idx 7 a8 q& j0 z) w+ N- B5 X" v
max = len(BASE_64_MAP_INIT)
* a( L$ N) x$ M O0 X for idx = 0 to max - 1
7 m0 |* X: M1 k Base64EncMap(idx) = mid(BASE_64_MAP_INIT, idx + 1, 1)
$ M8 u. P$ A, i) q next - @6 U: K% l; |' K5 r
for idx = 0 to max - 1 0 c8 e* j' R! L: t* q
Base64DecMap(ASC(Base64EncMap(idx))) = idx
( k, {) t0 K! S! N( j6 y: P next " X- I/ D. N8 U$ v6 F7 A1 ?
END SUB
& O' k+ |+ ?5 j9 W* S5 e PUBLIC FUNCTION base64Encode(plain) '加密函数base64Encode 9 Y& w+ d( G) c; Y1 K- f
if len(plain) = 0 then . `. R1 _( K! \1 \ y$ f8 v+ U
base64Encode = ""
* T3 k D {2 ?- M( [. z exit function
1 N7 x0 W7 D8 n. U! v5 C end if ) @9 r8 I7 S V% v" N
dim ret, ndx, by3, first, second, third 8 ]0 \. p( O( S7 e/ n
by3 = (len(plain) \ 3) * 3
8 ]( }1 }+ g( J) M G ndx = 1
3 O8 l3 P" v2 S( \7 M; Q. @! J do while ndx <= by3
5 H/ @: T1 x% ~3 @ `; O* P first = asc(mid(plain, ndx+0, 1))
/ ~" M, G) n2 b; p1 @ second = asc(mid(plain, ndx+1, 1)) $ `" R; N2 V9 m$ J2 \
third = asc(mid(plain, ndx+2, 1)) [' F. h) H& N/ T, L
ret = ret & Base64EncMap( (first \ 4) AND 63 ) ! \* h: f9 e3 h3 n- H5 G
ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
: b+ x# Z; `- G) v k# V& s; t ret = ret & Base64EncMap( ((second * 4) AND 60) + ((third \ 64) AND 3 ) )
0 S% Q# f' d) r6 Z% @/ } ret = ret & Base64EncMap( third AND 63)
% z& g2 K- E" B( a9 b" R ndx = ndx + 3 7 M U5 w0 @7 X! \
loop ; j. e- f# M6 y g/ e9 `% |/ k
if by3 < len(plain) then
& B6 H3 p3 [! y* X( o2 ` first = asc(mid(plain, ndx+0, 1)) ; V' L f) k3 u/ m
ret = ret & Base64EncMap( (first \ 4) AND 63 )
' t! s9 y7 j: f) d6 z if (len(plain) MOD 3 ) = 2 then
4 o8 }# K; E1 m4 W second = asc(mid(plain, ndx+1, 1))
4 ^1 l6 Z& t- {! v1 K ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
9 o. z6 b( e% A8 p: y( c ret = ret & Base64EncMap( ((second * 4) AND 60) ) X6 g/ ^7 }3 @- _& M
else 2 k2 F) i' B* @; P5 q$ F; F
ret = ret & Base64EncMap( (first * 16) AND 48) ( ]9 G; Z4 Y' j' ~; `, j+ J2 r& m) ^
ret = ret '& "="
/ m$ h& J* o) I `* P5 \' J/ q0 U end if
9 m1 V% [( j7 s$ z; l! V; [; |; B ret = ret '& "="
0 _ I, M1 w9 `! u end if
% x' E* p/ d: }& z- r1 C base64Encode = ret
% O6 Z$ D2 V1 T5 F' c c7 i END FUNCTION
; g2 y+ P# h+ G% V, d7 q* p+ m# ^5 Z
(3)重新改写要保护的asp文件
0 e: S7 i4 r0 W) U& {# g. H' j9 |# Y( E* z' V. m: p
改写原来的asp文件,在文件中增加UnEncode 和base64Decode函数,全部代码如下:+ X+ H9 ^ O5 x7 v Z/ e
" T+ F, `% o8 z! z& b, O Dim Hu,Hu2 g- }4 ^* M$ o; p+ s5 Y7 |
'拷贝“欲保护asp代码”的密文 将之存放到Hu变量中 $ O1 h2 T: Q" ]) ^
Hu=”c2V0IHJzPXNlcnZlci5jcmVhdGVvYmplY3Qo12Fkb2RiLnJlY29yZHNldOMpICAgICDuc3FsPeNzZWxlY3QgKiBmcm9tIGdxICB3aGVyZSB4cz0xIG9yZGVyIGJ5IGRhdGUgYXNj1yAgICAgsnJzLm9wZW4gc3FsLGNvbm4sMSwxICAgICDuaWYgcnMuZW9mIGFuZCBycy5ib2YgdGhlbiDucmVzcG9uc2Uud3JpdGUTvSD7INAg5iAgILUgvyAFILITsmVsc2UgsiAgICAgUmVzcG9uc2UuV3JpdGUg1zxBIEhSRUY9bmV3MC5hc3A/bGJpZD0TJnJlcXVlc3Qo12xiaWQTKSAmIOM+PC9BPuPuZW5kIGlmICAgIL5zZXQgcnM9bm90aGluZyAgICAgICAgsmNvbm4uY2xvc2UgICAgICDuc2V0IGNvbm49bm90aGluZyAgIL4”
" m( V* H& Z- H! Y9 h Hu2= base64Decode(hu) '还原要保护的ASP代码
: ?, T* T' M6 x9 K! O) ^# j9 Z* C) p execute(UnEncode(Hu2)) '还原单引号、回车换行,并执行原代码 8 Q; j& B8 P5 C( u' ?) U
’解密函数base64Decode ! E8 m ]9 t# i8 P' e
FUNCTION base64Decode(scrambled)
$ R) P; B) x: c+ x if len(scrambled) = 0 then
0 S7 v* k: j& n8 K& o3 z base64Decode = ""
/ n( l% p# f) A9 @% u, X( @9 P exit function % Z5 _* M) n! s; B, G. c; g
end if - m0 E5 z2 v8 m3 _9 {5 c* [
dim realLen
- w5 c& H5 b6 o1 f realLen = len(scrambled)
. P* K- `( D* v do while mid(scrambled, realLen, 1) = "=" 3 A! z8 s( t: g
realLen = realLen - 1 8 S' q1 h+ w; m( `3 Q9 C, a- L
loop
( ?4 }+ j5 W* _' i6 ?' d, w dim ret, ndx, by4, first, second, third, fourth
% ]' \" D8 d4 s4 ]6 O% W ret = ""
+ E Q; m7 A" X by4 = (realLen \ 4) * 4
& M6 P! z6 q; w4 ?5 U8 d ndx = 1 % I8 I9 N- H3 U$ n: c
do while ndx <= by4
& a& k6 m2 E5 V0 H7 V0 C' {; K first = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
* p- D' ?1 b( w) [+ ^ second = Base64DecMap(asc(mid(scrambled, ndx+1, 1))) 4 `+ I D6 y( y) j0 y* T
third = Base64DecMap(asc(mid(scrambled, ndx+2, 1)))
6 Z. ?; r K' @' _1 t% y7 ?! U fourth = Base64DecMap(asc(mid(scrambled, ndx+3, 1))) ; p$ ~7 }1 m8 l
ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3))
9 e3 I3 U5 y( z+ h g/ l3 |, D ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15)) ( X% X1 b; i" `4 |* G
ret = ret & chr( ((third * 64) AND 255) + (fourth AND 63))
, H! N1 c: o# t$ B+ i0 D/ i$ O ndx = ndx + 4
' h. I( j6 Y* C9 R: H/ j loop
y3 X$ }5 {' b& P if ndx < realLen then ! _/ n7 g2 y$ j8 m2 a
first = Base64DecMap(asc(mid(scrambled, ndx+0, 1))) / o1 ] w& I, N& R
second = Base64DecMap(asc(mid(scrambled, ndx+1, 1))) # s5 a4 j. b w/ H' I
ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3)) ! D0 t6 I# J7 w% c) W9 t1 F
if realLen MOD 4 = 3 then , d0 G, P6 P5 d8 a" {. N8 p5 R
third = Base64DecMap(asc(mid(scrambled,ndx+2,1))) / i5 Z) D. t' X
ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15)) ( `' ~- s+ ?1 E
end if % n! s0 g% \0 u6 S8 q! w
end if
1 S& O3 U Y7 U7 h7 \ base64Decode = ret
* r7 ^% Z& O+ e: C4 |6 v END FUNCTION
, G* E' B" \# S, A '还原单引号、回车换行函数UnEncode
6 {* Z3 S/ ~( \1 Q% q" d function UnEncode(cc) & n. z: o+ m% r' L( |2 Y3 D
for i = 1 to len(cc)
: L7 Y. E4 ^1 ] ~ if mid(cc,i,1)<> "水" then % i% L! k5 F+ L1 K0 f6 R
if mid(cc,i,1)="加" then
% a6 R. r* p- R% O: {! y% X% s7 n temp = """" & temp 8 C/ M; t3 d" ^/ X4 ~
else
. t$ Q( w9 D: r9 d temp = Mid(cc, i, 1) + temp
& S# P7 X. T6 i; m end if
% I2 T2 f) B: ~6 m% C/ W else
& T o3 Q2 @5 h# i5 N temp=newline&temp 1 i; N H+ ~1 O F8 m' a% J
end if
7 ~7 c- v. h: Q& U j5 p next : b, F4 d8 q4 j
UnEncode=temp $ T, v7 w' Y8 j
end function
/ ]" v$ s9 o8 `, }3 j5 f* B) p1 O2 _/ B$ J3 p& n% @
, u* m0 U+ s8 V6 o* J8 K, D$ }9 D
将以上代码以test2.asp名存盘。) I" z' S; I0 b2 A/ L, J+ P
9 G! j* G( f9 Y- |6 [; a
(4)用SRCENC加密test2.asp
% ~7 A3 d7 q( s. w" m, K0 `+ r" j) d
+ ?9 n/ I$ g* X& @ 用SRCENC加密test2.asp,然后把它发布到服务器上,这样别人即使得到该文件、破解了SRCENC加密,也无法看到原代码,因为原代码在test2.asp中是密文(Hu=”c2V0IHJzPXNlcnZlc...),所以ASP代码就被保护起来了!
; x, i3 I2 L4 U
2 y& U9 E$ o. W% C, V* n/ T4 c3 J 二、加密过的asp程序如何解密?$ ]6 N; Y# [3 B# |4 I6 T
/ {5 }- w$ C" P. g 如何对加密过的asp程序解密呢?首先我们要告诉大家,用组件法加密的asp程序是无法解密的,而screnc加密过的程序则可以解密,方法是:使用解密软件(ZWDECODE.EXE)。
% ~! O: h$ }0 r& x9 v5 e1 C+ o ^! B c/ A* S. R% m
ZWDECODE.EXE(下载地址http://www.mydown.com/softdown/45/45183.html)可以对MS Script Encode加密的ASP文件进行解密,还原出源代码。
$ h. Y( r& E0 h2 X" j m0 B' ]. |* A6 k* }0 T
(1)解密方法
8 D l8 ]! c i) ?+ A0 {6 ?# K; e" J% ?2 A+ I* X6 e" ^/ Y
单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可恢复原代码: Y; [, h u# G
3 m0 q V9 G J ZWDECODE <已加密asp文件名>
$ E' Y U9 O5 e/ g+ n3 d! e$ f: k" T# A. I7 C9 n0 ~
其中<已加密asp文件名>必需输入,该文件名可带目录路径;也必需输入,这是要生成的输出文件名,也可以带路径信息。
+ y. {6 @! j3 K1 K! u: X7 e4 i4 a6 r1 o& r! A v2 o0 U
(2)举例4 ?) ^4 T9 L* e5 O8 D5 U
; V" x# O7 I) P3 e- B! x
例如F:\22\lacl.asp曾被screnc加密处理过,现在要恢复其中的源代码,你可以在MS-DOS中输入以下命令:; `/ Q0 y- K, p! i; r0 d8 y" p5 ?4 `
! w2 e* O* s% K* d% K9 V0 r' b
ZWDECODE F:\22\lacl.asp d:\ulacl.asp
% r [1 @2 \! V! o6 D l' F' \7 k# `$ h, T$ {
执行完毕,在D盘上就会生成一个ulacl.asp文件,打开该文件,你就能看到源代码了! 3 E. X: \. z7 x$ }, I' l
|
|
|