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