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