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