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