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