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