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