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