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