|
ASP程序加密解密方法全面解析% G3 J" K' H+ [% I& u0 Y
2007-08-18 16:41/ E6 `3 n! G! V
目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法…… 2 x. |! m5 R$ d) A9 `
) F4 N& ?7 V0 b1 A% X" o 如今,用ASP技术构建的网站随处可见。由于ASP脚本是在服务器上解释执行的(无法编译),因此你辛苦开发出来的ASP代码,很容易被人拷去任意修改,如何保护ASP源代码呢?这是每个ASP站长都会遇到的难题,网上求解这类问题的帖子非常多,下面我们就来谈谈ASP程序的加密方法。
0 ]" I( h) k6 c- v* f8 O
; V J: h5 }: r9 g2 t, S 一、如何加密ASP程序?
- u9 K2 x& H$ C1 v- i# E( t. D- ]* R/ J: h
目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密、组件加密、自编程序加密,下面我们就来展开介绍这三种加密方法。: k3 t* L3 d n! L. `# ]# o s
2 {; \* P( ^! v! Q3 f/ ^# A( y, ]
1、使用微软的MS Script Encode进行加密
! E2 a% n* {, r4 W7 Y% G. C% V' G8 l7 {* w; w
微软提供了脚本编码器MS Script Encode(下载地址http://www.itgene.cn/itgene/download/download.aspID=232),可以对ASP程序进行加密。这是一个简单的命令行工具,其执行文件是SRCENC.EXE,需要在DOS下运行。它只加密页面中嵌入的脚本代码,把网页中之间的ASP代码转换成不可读的乱码,其他部分则保持原样不变。加密后的程序,必须使用Internet Explorer 5.0以上版本才能正常浏览。% d' ~) M p8 A: f, |* p
/ A5 ?# i; p1 Z/ y1 u% {" V: F 用SRCENC加密之后,文件中被加密过的部分将变成只读类型,假如你修改了加密部分(哪怕只改动一个字),就会导致整个文件不能使用。对于 VBScript,加密后在源文件的第一行会显示:<SCRIPT LANGUAGE="VBScript.Encode">;而JScript(或 JavaScript)则会显示:<SCRIPT LANGUAGE="JScript.Encode">
, p- Z2 o- i3 K+ I! C
% Y7 I+ Z3 k/ [7 _& q (1)加密方法" F" h0 \4 L2 ~6 Y6 b- A
K" w6 T9 }9 {9 X# o
单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可对某个asp文件加密:
2 a/ g/ g( e s* x X
+ P: ~6 @2 o0 w( z SRCENC [switches] <要加密asp文件名> <加密后的文件名>
3 Z0 A4 [4 y4 q
3 J( A; }: \/ m0 N7 n! q- S9 f: H 其中[switches]项目可以选以下5个参数
- N' U3 @* G7 K1 E7 ^
. y3 }( S5 i& U7 L) P1 B5 F [switches] 含义 举例
- V9 b/ x. z$ i+ S
# y% D+ ]/ o0 O2 g- o" g5 q /s 可选。命令中带了该参数,加密过程中屏幕上就不会有输出。 screnc /s lacl.sct ulacl.sct- ^ S5 R7 L! Y2 A$ ]7 i) m
; p5 K$ L$ t5 ]* w: A1 I
对当前目录中的脚本小程序lacl.sct加密,加密过程中屏幕不显示任何信息
' C# b, S! A, n9 \( W$ o
. N& i$ O( K! B6 r /f 可选。指定输出文件是否覆盖同名输入文件。忽略,将不执行覆盖。 screnc /f lacl.asp, T4 S! C& a3 S' ~8 k* H% e# ~, Q7 H, D
) W. W$ d3 H- ?$ L7 g
对文件 lacl.asp加密,并用编码后的同名文件覆盖原文件7 q s3 ^6 N. {) S1 o# b
* c4 c2 a6 y7 t. y% G
/xl 可选。是否在.asp文件的顶部添加@Language指令。忽略,将添加。
j) L9 ?9 f( l. W& p2 t5 V9 ]- D: z: O1 a8 ~( k) ^' d& b
/l defLanguage 可选。指定Script Encoder加密中选择的缺省脚本语言。文件中不包含这种脚本语言特性的脚本将被Script Encoder 忽略。
, |6 [% E$ W& z' e
0 F0 y3 y6 k9 l7 _+ T 对于HTML文件,JScript为内置缺省脚本语言;对于ASP文件,VBScript为缺省脚本语言;对于扩展名为.vbs或.js的文件,Script Encoder也有自适应能力。 screnc /l vbscript lacl.htm ulacl.htm+ H/ E2 E) ?9 @: x( h% ^% N
# O" } P) s# n
对文件 lacl.htm加密,并生成输出文件 ulacl.htm,确保没有指定语言属性的脚本块使用 VBScript
/ A4 A: K P8 e( _7 u. U3 g7 T
) b5 y% v2 z7 P; C6 l: y# n1 e) z /e defExtension 可选。指定待加密文件的文件扩展名。缺省状态下,Script Encoder能识别asa,asp,cdx,htm,html,js,sct和vbs文件。 screnc /e asp 11\*.* f:\labxw-jm4 E5 `0 ]5 L" P9 U3 w1 n
% p0 Z7 }1 Y4 h# F
对11目录中的所有.ASP 文件进行加密,并把编码后的输出文件放在f:\labxw-jm目录中" H7 _- ^$ k4 h: ? {
9 Z% R% {2 q. `7 w (2)操作举例5 T/ s, ?% R- j, |$ N5 G
/ n( l, s! L' p5 S% ^ 例如要加密当前目录中的lacl.asp文件,生成加密文件ulacl.asp,则在DOS下输入命令:" v9 |7 A, d% q/ h
# W% y( F' k! `. Q5 G
screnc lacl.asp ulacl.asp+ G( z6 O2 a8 r
, A) C+ u+ b% Y. s0 M* C2 H% [ i
对当前目录中的所有 .ASP 文件进行加密,并把编码后的输出文件放在f:\labxw中,则使用命令:
; o7 B* Y/ m" h3 _' [9 E
j+ B I7 i& \% Y! I' c2 _( a5 X screnc *.asp f:\labxw
1 ]; T. {* w# {: k" V) ?7 {
2 D! N% b; N6 G7 P7 l; P 2、使用组件加密asp
9 _- s- G1 O8 D3 n. x$ f, Q# u7 {! r( D, R e7 b# z
以上被screnc加密过的程序,是可以解密的(解密方法下文有介绍),如果你想彻底保护自己的asp代码,可以通过开发activex dll组件的方法进行保护。
6 U" ]: b4 N0 Z6 j! c+ A" Y# H, H; U& o3 _/ T$ }/ ~
Dll文件是被编译过的机器代码,如果没有源项目文件,是不可能被反编译的,所以组件加密这种方法最安全,也不可能被破解。下面我们来举例说明操作过程,例如你要保护以下asp代码:
& n* x6 n& E8 |" U2 E0 p/ ?
$ A& @+ h7 g' {" U set rs=server.createobject("adodb.recordset") % \0 `( H# x* ]0 b; h' m
sql="select * from gq where xs=1 order by date asc" : W( o3 ]* \/ G. d7 i
rs.open sql,conn,1,1
- v8 Q% l! {" [6 N9 d) M if rs.eof and rs.bof then 5 |! C' f+ r! l! F4 L3 ]
response.write"<A HREF=new0.asp?lbid=gqx ><%= gqx %></A>" & `1 D2 f4 f C6 H$ j5 Y6 |
else 7 k9 m8 X0 z( g0 r2 n6 v0 D2 E
Response.Write ""
. W" g! g. ^+ y, R. s$ F$ W end if
" ]. f5 j1 S/ b* q3 ?3 p( E set rs=nothing . n' a' f+ A, L0 R, P% d
conn.close 6 T% \' `9 n u6 o8 e4 d
set conn=nothing 3 s/ X n& Z8 \2 m5 T, r) ^ A
* m) {# K6 a# I$ K) {/ |
可以把它们改写成VB组件,然后在ASP文件中调用组件即可。操作步骤如下:7 R8 Y4 `# R; G! n7 }: p' ?3 b/ R
- l8 G/ m7 g% b9 M: o
(1)新建一个vb6的activex dll项目
: S+ n. H2 Z, M7 f; S W3 ~; J: V
在属性窗口中,命名你的库模块和项目文件(例如项目名lacl,模块名disp),以后在asp文件中,调用的对象名将为lacl_disp
# m/ ^. l$ s! J3 k& h3 w1 P/ M- e
选择vb6中的项目菜单中的references ,选中microsoft activex data objects 2.0 library
/ a! A5 P U% V/ A+ U7 N9 C2 ^- l8 F
( X6 E, y G& Y k! q4 E: N4 z (2)编写VB组件( T" S9 f& W) R
! n. s4 o8 T: [; F 接下来把<欲保护的asp代码>改写成VB组件,代码如下:
: N. x; U4 J& Z2 o- p) z5 D8 z& B( @) x8 c, ^( C) `4 A
public function html_combo(disp_table as string) as string . Q, s9 r1 s! R* u8 o, d4 R
dim outstring as string
" Q. Q7 p# y& ` dim conn as adodb.connection
: c9 e- c# |2 v/ u! G3 R+ i dim rst as adodb.recordset % N# i2 {! a- v( _4 w
dim sqlstring as string
$ P( O% |) H7 w- L+ D ^+ l set conn = createobject("adodb.connection")
% N# c3 }! U3 i: c d set rst = createobject("adodb.recordset")
) j7 a7 @. {% Z9 E1 a& [2 o sqlstring = "select * from " & disp_table & " where xs=1 order by date asc" & K% w/ N' \* m, x; M2 O6 I
'以上是在VB中打开数据库操作,数据库中的表名、字段名,你可以根据自己的需要修改 9 F9 ], [! u4 Q# A* R
conn.open "dsn=sumnet" & @ y4 e9 F! E( b
rst.open sqlstring, conn, 3, 3
+ T% ~' J8 @9 r8 Y6 Z if rst.eof and rst.bof then " t3 u! q, Y i) |
outstring = "还没有这类单位信息"
5 H& z' r3 }0 u/ k; v else ; f8 G2 q }0 B
rst.movefirst
@4 x# ]; C0 @" m outstring = "<A HREF=new0.asp?lbid="&request("lbid") & "></A>"
* J y4 O& d( q! T end if
- P' Z9 p5 }/ D4 `% Z html_combo = outstring ; O( u9 _( B+ k4 t/ e. Q8 v
rst.close
: g; F4 H5 @( U! S3 `: @ conn.close 2 r5 i _0 T" Y5 o, g/ Q' v, V! Y
end function
: Z2 L, b$ x" S$ Y5 c5 s
' Y% \. x# x, q2 ]$ r" y& _ 写好以上VB代码后,保存项目并开始编译。
/ {' E8 [9 O' Z; |1 ~
: ?/ a7 X8 Q `. H+ x (3)生成安装文件+ b. m7 F2 o, f8 @' s+ V) u, @
# K5 R8 V2 X7 s3 I+ A8 k. q: V 打开visual studio 6中附带的package deployment wizard程序,选择刚才建立的activex项目文件lacl;选择package,选择要打包的脚本或使用默认脚本,选择标准安装,为生成的安装文件选择一个存放目录,选择single cab. 其他均默认;然后单击下一步,安装文件就自动生成了!8 s. ~$ y+ c. i; p1 S& L7 _% {( z
( g# U4 R* z# F (4)在IIS服务器上安装组件
, ]# x9 N2 }( L0 D$ B) T) S8 X# g" A* ^9 j8 W
在IIS服务器上运行这个安装文件,把组件安装到服务器上。) T+ u" d" W& }; Q0 ?# M. O: T
) c2 t( l2 E# X+ b+ |
(5)在网页中调用组件
" `& _1 Z1 \2 V6 v# [7 h9 _( j, J& p% n, r! X5 C
以后在ASP文件中,通过调用该组件完成原来的功能。在网页中调用你制作的组件,方法如下:" i+ ]5 T V2 x# H4 R* Y
6 c" D' ~ Y) t' q4 N
<%@ language="vbscript" %>
2 J& g* k. z" Q8 M" ? ~3 E" z <% + e9 n/ S5 T( |
set diaoyong = server.createobject("lacl_disp.disp")
2 {8 O2 J# p# d) N4 {3 b %> 4 X3 B! |4 S2 M( U5 N
<html>
$ N" c; C; F) ~% l' T3 X5 t; O <body>
, B! b, H4 a+ l/ v) T* j/ f& z. ?% A& e <%= diaoyong.html_combo("gq")%>
; Q% p5 \' j6 b) T5 v <br>
% \ t7 a* W O( j/ A/ \3 Y) h </body>
- J9 C* ?& ^$ X) [ </html>
1 b* O# X0 ^6 I+ O+ o
% D9 o% Q+ ?: O6 z7 s! w9 n# j3 d6 r9 `' L. [2 w$ E7 o
你看,现在Asp文件中的内容只是组件的调用(与以前完全不同),别人即使得到该文件,也无法编辑修改源代码,因为代码都被封装在VB组件中了,对于组件中的代码,外人是无法看到、也不能反编译的!
9 b. s0 x' ^% S3 [+ a M3 E8 r- o
3、自己编写加密程序
/ C( q. e, t. s- m; G; E; Q3 x. J9 \$ Q$ E4 F1 l* ~ b
组件加密方法虽然不可破解,但是要求你熟悉VB编程,需要把ASP代码改写成VB组件,工作量很大,所以建议大家自己编程来保护asp代码,其基本思路是:写一个加密函数base64Encode和解密函数base64Decode,先用加密函数处理<要保护的asp代码>,得到对应的密文hu;然后再用execute(base64Decode(hu))替换<欲保护的asp代码>。) s1 c' w: k+ k
3 S$ a0 t8 J9 I+ E% G- q7 s
例如我们要保护上面那段asp代码,可以这样操作:
2 R8 s1 e8 g5 S) o% A* a) [3 L/ J: F K6 _
(1)用WORD处理<要保护的ASP代码>
% S5 f# P, N& {7 B. {
! ]5 Z4 L0 C( n/ d 将<要保护的ASP代码>拷到WORD中;在WORD中,把代码里的段落标记(回车换行)全部替换成“水”这个汉字,方法是:点击“编辑”/替换,光标移到“查找内容”栏,点“高级”/特殊字符,选择“段落标记”;光标移到“替换为”栏,输入“水”,最后点“全部替换”。同法,把代码中的单引号也全部替换成“加”这个汉字。
# t- S: o* k2 S- y$ x; X% B1 ?) F( M/ V" G! A! q
(2)编写、运行加密程序0 }# w! F: W3 O: Y/ J$ l9 J
1 c2 o8 `* [3 F
在FrontPage中编写加密程序,该程序中有初始化函数initCodecs、加密函数base64Encode(代码如下),把WORD处理后的代码,copy粘贴在inp = ""这句中,最后以test1.asp名存盘;在IE中输入http://127.0.0.1/test1.asp本地运行该文件;屏幕上会显示一大段乱码(例如c2V0IHJzPXNlcnZlci5jcmVhd...),这就是《要保护的asp代码》对应的密文!
. Y$ ~! p7 }0 x) @, k6 J9 e6 g' ]% \) s1 [6 L& U- ~
OPTION EXPLICIT
- P& b- Z3 G) F* a( r4 Q$ Q const BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
' k- m$ X- m" w8 A dim newline
; J: l( y2 I2 X( B5 f dim Base64EncMap(63) 9 ]" e9 r, V7 V @/ n; S
dim Base64DecMap(127)
' a/ L; D1 g' ~9 L. K dim inp,hu,encode
' S0 R/ J! L& M0 P" g call initCodecs '初始化 # K' m- H; L; P
inp = "<WORD处理后的asp代码>" '将要保护的asp代码用WORD处理,然后填在此处 $ }8 d) P0 Y; ^
hu= base64Encode(inp) '调用函数base64Encode进行加密,得到密文hu
6 j7 z1 \) D, q! C Response.Write(hu) '显示密文 0 P0 p! w. U3 n @
PUBLIC SUB initCodecs() '初始化函数initCodecs
) R* u- t# h+ ^4 T* p' _7 \8 Q$ ] newline = "<P>" & chr(13) & chr(10)+ O, j1 W6 b0 } d
dim max, idx
M0 z) r* |' K {2 @, b8 { max = len(BASE_64_MAP_INIT)
% l1 c- u% R' E7 K. N0 } for idx = 0 to max - 1 + `1 J7 u X+ c; _
Base64EncMap(idx) = mid(BASE_64_MAP_INIT, idx + 1, 1) $ A, S" [% E6 M7 W1 {
next 5 o6 K3 }" V* ~6 i3 y' J
for idx = 0 to max - 1 # Q& P, R; N1 i9 c& \
Base64DecMap(ASC(Base64EncMap(idx))) = idx # @; Q- w, K* n4 j; b) ? Y
next + Z' r% {# R# o. m" i0 g4 I9 o
END SUB
! e' Z3 H/ l. t/ L9 F: X( p PUBLIC FUNCTION base64Encode(plain) '加密函数base64Encode
4 u' `& V) ^! a7 n4 I# o6 ~( u" ]" l6 i. E if len(plain) = 0 then
& Q# Z- O, t* J7 w6 R base64Encode = ""
4 i4 T S8 f% w" v exit function : k; s: {) ^/ U1 W
end if
( x7 W) H& Q4 y5 q0 b2 t0 ^4 a dim ret, ndx, by3, first, second, third
) U& ^0 K) A- i6 O# x by3 = (len(plain) \ 3) * 3 & c8 R- x) h0 F6 j
ndx = 1 3 k" `* Q+ h- Q2 D$ s4 E
do while ndx <= by3 $ i& I9 v9 r( Y) Q& f
first = asc(mid(plain, ndx+0, 1)) ! G# L1 d# m' t2 v
second = asc(mid(plain, ndx+1, 1)) $ V5 ]: t2 W* p( k. y# W/ S
third = asc(mid(plain, ndx+2, 1))
9 B3 B8 V. ^9 r" i8 Z- I4 D ret = ret & Base64EncMap( (first \ 4) AND 63 ) ( ?. ^# e4 J" S }
ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
1 F5 _ s1 z8 f+ y ret = ret & Base64EncMap( ((second * 4) AND 60) + ((third \ 64) AND 3 ) ) ; q+ n0 V: x1 v
ret = ret & Base64EncMap( third AND 63)
! A/ c5 Q* y& m! ]8 t ndx = ndx + 3 7 q7 T& e' J* W) E7 C
loop 5 S. |( N7 j, I6 I" k } _ E
if by3 < len(plain) then / H: `! m$ e% o
first = asc(mid(plain, ndx+0, 1))
7 m% ?8 w) q& e2 I ret = ret & Base64EncMap( (first \ 4) AND 63 ) : ?/ F0 O6 d# @4 u
if (len(plain) MOD 3 ) = 2 then
/ \% r f: R6 R. \/ f second = asc(mid(plain, ndx+1, 1))
8 m8 N5 j8 I2 G' j. G, A6 d0 T ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
- V3 f( q; `( T) y$ @; G0 _# H ret = ret & Base64EncMap( ((second * 4) AND 60) ) ; S" z" s: F- L: W7 j" }+ ^
else 5 p) `+ C1 [, d5 A7 A
ret = ret & Base64EncMap( (first * 16) AND 48)
- F' t( o9 a H) B6 c, | ret = ret '& "=" @6 y8 j+ A# v7 m% g# c4 W' P
end if # p; ]5 H" O+ d# R, w' m8 A% x
ret = ret '& "=" % a) ^ @) i7 j* n* I( [3 j
end if
` C' B3 x" Z6 P' H0 d; I base64Encode = ret
6 d+ x+ X8 A8 r) P/ J END FUNCTION
& ?, i. L! [& ^, O9 |: ~. ~$ K1 e" b8 R# d- D9 d
(3)重新改写要保护的asp文件
! k- ~! C% m$ o) l2 c6 Z
d7 |6 c; ]! n! o1 Q. { 改写原来的asp文件,在文件中增加UnEncode 和base64Decode函数,全部代码如下:* J' A" C+ l" v& c* K
/ `: ]/ c8 {' f# T* e" m% X( c
Dim Hu,Hu2 , H* E7 H) \2 I* x- ~ \
'拷贝“欲保护asp代码”的密文 将之存放到Hu变量中 2 P7 }$ x; G% A* B( C
Hu=”c2V0IHJzPXNlcnZlci5jcmVhdGVvYmplY3Qo12Fkb2RiLnJlY29yZHNldOMpICAgICDuc3FsPeNzZWxlY3QgKiBmcm9tIGdxICB3aGVyZSB4cz0xIG9yZGVyIGJ5IGRhdGUgYXNj1yAgICAgsnJzLm9wZW4gc3FsLGNvbm4sMSwxICAgICDuaWYgcnMuZW9mIGFuZCBycy5ib2YgdGhlbiDucmVzcG9uc2Uud3JpdGUTvSD7INAg5iAgILUgvyAFILITsmVsc2UgsiAgICAgUmVzcG9uc2UuV3JpdGUg1zxBIEhSRUY9bmV3MC5hc3A/bGJpZD0TJnJlcXVlc3Qo12xiaWQTKSAmIOM+PC9BPuPuZW5kIGlmICAgIL5zZXQgcnM9bm90aGluZyAgICAgICAgsmNvbm4uY2xvc2UgICAgICDuc2V0IGNvbm49bm90aGluZyAgIL4” 3 f* Y |* X7 C+ `
Hu2= base64Decode(hu) '还原要保护的ASP代码 ' N. g3 E t! ~
execute(UnEncode(Hu2)) '还原单引号、回车换行,并执行原代码
6 n1 B* }3 g- s$ ]7 O ’解密函数base64Decode
" Y" L5 E+ p. } FUNCTION base64Decode(scrambled) 7 e: K% J% i9 V0 G! e2 a: K
if len(scrambled) = 0 then
; Q" n# J8 F5 |$ [, A base64Decode = ""
( F/ C* R! I0 I1 X3 F6 }/ x7 ` exit function 6 c! {2 O* N/ }
end if - [2 c3 e1 Q8 M* r5 \) O; F7 i
dim realLen
; K8 d8 h/ _/ ^" m" r realLen = len(scrambled)
' O \, q" y+ T, w do while mid(scrambled, realLen, 1) = "=" 6 a. ]" j' s2 a+ F+ ~* L. ?
realLen = realLen - 1 ; c( F" E" I8 f( A s, Y _/ E y
loop
7 d! a- S; h0 S8 R dim ret, ndx, by4, first, second, third, fourth ) P8 `3 z R$ E' Z# D* q- q% i
ret = ""
0 z4 W2 `5 l" k( C' h4 `0 V% `/ i! t by4 = (realLen \ 4) * 4 ! p& S5 A7 j& l
ndx = 1 % I! k* X/ n0 Q1 @
do while ndx <= by4 / K) k+ u8 x$ y6 w0 P1 E
first = Base64DecMap(asc(mid(scrambled, ndx+0, 1))) 0 o, K! n* I: U, p. l
second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
! K' D3 w. ^' v* C- E% A third = Base64DecMap(asc(mid(scrambled, ndx+2, 1))) 8 {- X @- `* }- c a f1 L
fourth = Base64DecMap(asc(mid(scrambled, ndx+3, 1)))
0 k7 v& Z6 i) c% T ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3)) 7 P V- A J ]7 e. F% Y
ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15)) % f5 Q; t8 a! l4 }9 e E
ret = ret & chr( ((third * 64) AND 255) + (fourth AND 63)) 1 h" R' r A, `) Q- b( M2 Z
ndx = ndx + 4 $ ~8 G/ L5 _) r5 v
loop
! G& T2 z. d) e& t$ A' y if ndx < realLen then 5 F S; r2 o! u# r+ P
first = Base64DecMap(asc(mid(scrambled, ndx+0, 1))) $ M, w$ z# D0 @( N. z3 o" Q
second = Base64DecMap(asc(mid(scrambled, ndx+1, 1))) 0 O( Z8 A$ ^) i2 \$ `5 X( N
ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3)) - u" B/ [" W2 _7 j
if realLen MOD 4 = 3 then
; F( ^; w8 m/ O& D" J; l third = Base64DecMap(asc(mid(scrambled,ndx+2,1)))
3 T8 \5 `( L o* G. p0 \. g; g ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15)) + P1 P3 U4 e) L& p% j8 Z* p
end if / N6 t. F2 z7 c4 V
end if
V& U# L# D7 J, g' ~! C, X2 I base64Decode = ret 1 w9 J) I3 l) B6 u- T
END FUNCTION ) D6 Y7 G5 `- y! j+ B) `
'还原单引号、回车换行函数UnEncode
/ V. c! [9 ~5 s) L* C function UnEncode(cc)
. c; R$ n- G6 G, D( @9 R" Q3 u for i = 1 to len(cc)
0 z1 J6 h9 d6 X& v9 t) a0 S- p$ S if mid(cc,i,1)<> "水" then
9 G% `% o! C* ]& U! h if mid(cc,i,1)="加" then ; q! B' P" w9 S% d' ^ n( S6 A
temp = """" & temp ( s$ d) r- w: q2 s( E. A7 W: G
else
1 c- W2 h) ]: n' I4 @+ n, l temp = Mid(cc, i, 1) + temp : V6 Q% {# b/ Q. h5 O
end if 8 Q6 l& r; r5 v! C
else
* K8 Q- f" w* y" l temp=newline&temp & g1 a. S* H3 J/ E' G
end if L% r5 V: v& x8 F' _- @
next % U+ b7 t$ s3 u
UnEncode=temp : L" V P2 ` f- f: A$ U C7 J! j ^
end function
, D& O9 b: u4 s+ O3 ]* `. t7 |( B0 k" B
6 q7 u5 ~$ f9 d. E* p 将以上代码以test2.asp名存盘。
2 Z: K8 C1 L5 G% |: E2 w- e m" S
(4)用SRCENC加密test2.asp* U$ Q) p6 S/ e! h
+ y! w( c- u9 E+ x- }9 \; g: m& W2 Y# P 用SRCENC加密test2.asp,然后把它发布到服务器上,这样别人即使得到该文件、破解了SRCENC加密,也无法看到原代码,因为原代码在test2.asp中是密文(Hu=”c2V0IHJzPXNlcnZlc...),所以ASP代码就被保护起来了!+ Q: Q1 L( j. _+ M
# I- L7 D5 p3 X) N3 L
二、加密过的asp程序如何解密?! t& `& w4 L4 S# v! W( R& W( {" Y0 j
/ o; J8 D2 U" ?) o$ Z; r 如何对加密过的asp程序解密呢?首先我们要告诉大家,用组件法加密的asp程序是无法解密的,而screnc加密过的程序则可以解密,方法是:使用解密软件(ZWDECODE.EXE)。
8 o* P R# R6 x/ T }3 M4 J. {7 { l; l
ZWDECODE.EXE(下载地址http://www.mydown.com/softdown/45/45183.html)可以对MS Script Encode加密的ASP文件进行解密,还原出源代码。
+ T9 h6 g/ J+ [1 c% e' x7 @5 X; T5 H& Q7 S, Q0 N. f1 R, J
(1)解密方法4 ?7 F% g! @) i* w
2 J) v c* m) X, J0 w
单击“开始”/程序/附件/命令提示符,在MS-DOS 命令行中输入以下命令,即可恢复原代码:) M: j) K' D4 J! [. i$ b; K
9 ~1 @* V0 G( ~; h3 ?
ZWDECODE <已加密asp文件名>
. N4 d* x' ^; {) V
5 f1 Q% h$ U. p( \. [" D. C- C 其中<已加密asp文件名>必需输入,该文件名可带目录路径;也必需输入,这是要生成的输出文件名,也可以带路径信息。- |; C* X. L/ G- N( N
; q- f( r8 W0 z3 o9 ? Q6 O (2)举例
0 r/ R) ^' X- J/ G0 p! X4 h( g3 s% i
例如F:\22\lacl.asp曾被screnc加密处理过,现在要恢复其中的源代码,你可以在MS-DOS中输入以下命令:
1 K3 h0 w: X0 ?, `8 p: G8 E# _: g
ZWDECODE F:\22\lacl.asp d:\ulacl.asp6 y$ y: o) v; T8 j
5 r9 j4 O+ ^! p& S) |: d* C 执行完毕,在D盘上就会生成一个ulacl.asp文件,打开该文件,你就能看到源代码了!
) B# U' a- S4 w5 E4 U |
|
|