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