从网上兴致冲冲地下载了ASP源代码,准备学习研究的时候.一打开文件,天书般的加密代码.很让人郁闷吧 :(
在网上是找到了解密的方法,得一个文件挨一个文件地打开,复制,粘贴,解密,再复制,再粘贴,再保存......
如果一个ASP程序有几百个文件???
解决办法来了..
decode.asp
1 @Language="JavaScript"
1
2
3/*
4*--------------- decode.asp -----------------
5* 功能:遍历某个目录下的所有文件,对加密过的.asp文件
6* 进行解密,并写入源文件中.
7* 实例:单个文件解密
8* Response.Write(DncodeFile(Server.MapPath("conn.asp")));
9* 实例:目录下所有文件解密.
10* DncodeFolderFiles(Server.MapPath("xml"))
11* author:wanghr100(灰豆宝宝.net)
12* update:2004-5-17 11:31
13*--------------- decode.asp -----------------
14*/
15
16function DncodeFile(sFilePath)
17{
18/*
19*--------------- DncodeFile(sFilePath) -----------------
20* DncodeFile(sFilePath)
21* 功能:打开文件sFilePath,Encode解密,重写该文件.
22* 参数:sFilePath,字符串,文件的路径.
23* 返回:sFilePath,文件的路径.
24* 实例:Response.Write(DncodeFile(Server.MapPath("conn.asp")));
25* author:wanghr100(灰豆宝宝.net)
26* update:2004-5-17 0:58
27*--------------- DncodeFile(sFilePath) -----------------
28*/
29var ForReading = 1, ForWriting =2, ForAppending =8;
30var fso = Server.CreateObject("Scripting.FileSystemObject");
31var f = fso.OpenTextFile(sFilePath,ForReading,true);
32sFileText = f.ReadAll();
33f.Close();
34sDncodeText = strdec(sFileText)
35var f = fso.OpenTextFile(sFilePath,ForWriting,true);
36f.Write(sDncodeText);
37f.Close();
38//return sDncodeText;
39return sFilePath;
40}
41
42function GetFilesPath(sFolderPath)
43{
44/*
45*--------------- GetFilesPath(sFolderPath) -----------------
46* GetFilesPath(sFolderPath)
47* 功能:遍历sFolderPath目录下的所有文件.返回数组.存储文件路径.
48* 参数:sFolderPath,字符串,目录绝对路径.
49* 实例:Response.Write(GetFilesPath(Server.MapPath("xml")))
50* update:2004-5-12 8:33
51* author:wanghr100(灰豆宝宝.net)
52*--------------- GetFilesPath(sFolderPath) -----------------
53*/
54var sFilePath = new Array();
55var fso = Server.CreateObject("Scripting.FileSystemObject");
56var oFolder = fso.GetFolder(sFolderPath);
57var oSubFolders = oFolder.SubFolders;
58var oFiles = oFolder.Files;
59icount = oFiles.Count;
60
61var enmFiles = new Enumerator(oFiles);
62for(;!enmFiles.atEnd();enmFiles.moveNext())
63{
64sFilePath[sFilePath.length] = enmFiles.item().Path
65}
66
67var enmFolders = new Enumerator(oSubFolders);
68for(;!enmFolders.atEnd();enmFolders.moveNext())
69{
70/* Old 数组成了多维. */
71//sFilePath[sFilePath.length]=GetFilesPath(enmFolders.item().Path);
72/* Add 2004-5-17 11:09 只为一维数组 */
73sFilePath=sFilePath.concat(GetFilesPath(enmFolders.item().Path));
74}
75
76return sFilePath;
77
78}
79
80function GetFileType(sFileName)
81{
82/*
83*--------------- GetFileType(sFileName) -----------------
84* GetFileType(sFileName)
85* 功能:通过后缀,取得sFileName的文件类型.
86* 参数:sFileName,字符串,文件名.
87* 实例:Response.Write(GetFileType("decode.asp"))
88* update:2004-5-13 8:33
89* author:wanghr100(灰豆宝宝.net)
90*--------------- GetFileType(sFileName) -----------------
91*/
92sFileName = String(sFileName);
93return sFileName.split(".")[sFileName.split(".").length-1];
94}
95
96/* Start 解密实现:李辉煌 Start*/
97function screncode(s,l)
98{enc=new ActiveXObject("Scripting.Encoder");
99return enc.EncodeScriptFile("."+l,s,0,l+"cript");
100}
101
102
103var STATE_COPY_INPUT = 100
104var STATE_READLEN = 101
105var STATE_DECODE = 102
106var STATE_UNESCAPE = 103
107
108var pick_encoding = new Array(
1091, 2, 0, 1, 2, 0, 2, 0, 0, 2, 0, 2, 1, 0, 2, 0,
1101, 0, 2, 0, 1, 1, 2, 0, 0, 2, 1, 0, 2, 0, 0, 2,
1111, 1, 0, 2, 0, 2, 0, 1, 0, 1, 1, 2, 0, 1, 0, 2,
1121, 0, 2, 0, 1, 1, 2, 0, 0, 1, 1, 2, 0, 1, 0, 2
113)
114
115var rawData = new Array(
1160x64,0x37,0x69, 0x50,0x7E,0x2C, 0x22,0x5A,0x65, 0x4A,0x45,0x72,
1170x61,0x3A,0x5B, 0x5E,0x79,0x66, 0x5D,0x59,0x75, 0x5B,0x27,0x4C,
1180x42,0x76,0x45, 0x60,0x63,0x76, 0x23,0x62,0x2A, 0x65,0x4D,0x43,
1190x5F,0x51,0x33, 0x7E,0x53,0x42, 0x4F,0x52,0x20, 0x52,0x20,0x63,
1200x7A,0x26,0x4A, 0x21,0x54,0x5A, 0x46,0x71,0x38, 0x20,0x2B,0x79,
1210x26,0x66,0x32, 0x63,0x2A,0x57, 0x2A,0x58,0x6C, 0x76,0x7F,0x2B,
1220x47,0x7B,0x46, 0x25,0x30,0x52, 0x2C,0x31,0x4F, 0x29,0x6C,0x3D,
1230x69,0x49,0x70, 0x3F,0x3F,0x3F, 0x27,0x78,0x7B, 0x3F,0x3F,0x3F,
1240x67,0x5F,0x51, 0x3F,0x3F,0x3F, 0x62,0x29,0x7A, 0x41,0x24,0x7E,
1250x5A,0x2F,0x3B, 0x66,0x39,0x47, 0x32,0x33,0x41, 0x73,0x6F,0x77,
1260x4D,0x21,0x56, 0x43,0x75,0x5F, 0x71,0x28,0x26, 0x39,0x42,0x78,
1270x7C,0x46,0x6E, 0x53,0x4A,0x64, 0x48,0x5C,0x74, 0x31,0x48,0x67,
1280x72,0x36,0x7D, 0x6E,0x4B,0x68, 0x70,0x7D,0x35, 0x49,0x5D,0x22,
1290x3F,0x6A,0x55, 0x4B,0x50,0x3A, 0x6A,0x69,0x60, 0x2E,0x23,0x6A,
1300x7F,0x09,0x71, 0x28,0x70,0x6F, 0x35,0x65,0x49, 0x7D,0x74,0x5C,
1310x24,0x2C,0x5D, 0x2D,0x77,0x27, 0x54,0x44,0x59, 0x37,0x3F,0x25,
1320x7B,0x6D,0x7C, 0x3D,0x7C,0x23, 0x6C,0x43,0x6D, 0x34,0x38,0x28,
1330x6D,0x5E,0x31, 0x4E,0x5B,0x39, 0x2B,0x6E,0x7F, 0x30,0x57,0x36,
1340x6F,0x4C,0x54, 0x74,0x34,0x34, 0x6B,0x72,0x62, 0x4C,0x25,0x4E,
1350x33,0x56,0x30, 0x56,0x73,0x5E, 0x3A,0x68,0x73, 0x78,0x55,0x09,
1360x57,0x47,0x4B, 0x77,0x32,0x61, 0x3B,0x35,0x24, 0x44,0x2E,0x4D,
1370x2F,0x64,0x6B, 0x59,0x4F,0x44, 0x45,0x3B,0x21, 0x5C,0x2D,0x37,
1380x68,0x41,0x53, 0x36,0x61,0x58, 0x58,0x7A,0x48, 0x79,0x22,0x2E,
1390x09,0x60,0x50, 0x75,0x6B,0x2D, 0x38,0x4E,0x29, 0x55,0x3D,0x3F
140)
141
142var transformed = new Array()
143for (var i=0; i<3; i++) transformed[i] = new Array()
144for (var i=31; i<=126; i++) for (var j=0; j<3; j++) transformed[j][rawData[(i-31) * 3 + j]] = (i==31) ? 9 : i
145
146var digits = new Array()
147for (var i=0; i<26; i++)
148{
149digits["A".charCodeAt(0)+i] = i
150digits["a".charCodeAt(0)+i] = i+26
151}
152for (var i=0; i<10; i++) digits["0".charCodeAt(0)+i] = i+52
153digits[0x2b] = 62
154digits[0x2f] = 63
155
156function unescape(char)
157{
158var escapes = "#&!*$"
159var escaped = "\r\n<>@"
160
161if (char.charCodeAt(0) > 126) return char
162if (escapes.indexOf(char) != -1) return escaped.substr(escapes.indexOf(char), 1)
163return "?"
164}
165
166function decodeBase64(string)
167{
168var val = 0
169val += (digits[string.substr(0,1).charCodeAt(0)] << 2)
170val += (digits[string.substr(1,1).charCodeAt(0)] >> 4)
171val += (digits[string.substr(1,1).charCodeAt(0)] & 0xf) << 12
172val += ((digits[string.substr(2,1).charCodeAt(0)] >> 2) << 8)
173val += ((digits[string.substr(2,1).charCodeAt(0)] & 0x3) << 22)
174val += (digits[string.substr(3,1).charCodeAt(0)] << 16)
175return val
176}
177
178function strdec(encodingString)
179{
180
181var marker = "#@~^"
182var stringIndex = 0
183var scriptIndex = -1
184var unEncodingIndex = 0
185var char = null
186var encodingLength = unEncodinglength = 0
187var state = STATE_COPY_INPUT
188var unEncodingString = ""
189var re, arr
190
191while(state)
192{
193switch (state)
194{
195case (STATE_COPY_INPUT) :
196scriptIndex = encodingString.indexOf(marker, stringIndex)
197if (scriptIndex != -1)
198{
199unEncodingString += encodingString.substring(stringIndex, scriptIndex)
200scriptIndex += marker.length
201state = STATE_READLEN
202}
203else
204{
205stringIndex = stringIndex==0 ? 0 : stringIndex
206unEncodingString += encodingString.substr(stringIndex, encodingString.length)
207state = 0
208}
209break
210
211case (STATE_READLEN) :
212encodingLength = encodingString.substr(scriptIndex, 6)
213unEncodinglength = decodeBase64(encodingLength)
214scriptIndex += (6 + "==".length)
215state = STATE_DECODE
216break
217
218case (STATE_DECODE) :
219if (!unEncodinglength)
220{
221stringIndex = scriptIndex + " DQgAAA==^#~@".length
222unEncodingIndex = 0
223state = STATE_COPY_INPUT
224break
225}
226char = encodingString.substr(scriptIndex, 1)
227if (char == "@") state = STATE_UNESCAPE
228else
229{
230if (char.charCodeAt(0) < 0xFF)
231{
232unEncodingString += String.fromCharCode(transformed[pick_encoding[unEncodingIndex%64]][char.charCodeAt(0)])
233unEncodingIndex++
234}
235else
236{
237unEncodingString += char
238}
239scriptIndex++
240unEncodinglength--
241break
242}
243
244case STATE_UNESCAPE:
245unEncodingString += unescape(encodingString.substr(++scriptIndex, 1))
246scriptIndex++; unEncodinglength -=2
247unEncodingIndex++
248state = STATE_DECODE
249break
250}
251}
252
253re = new RegExp("(JScript|VBscript).encode", "gmi")
254while(arr = re.exec(unEncodingString)) unEncodingString = RegExp.leftContext + RegExp.$1 + RegExp.rightContext
255return unEncodingString
256}
257
258/* End 解密实现:李辉煌 End*/
259
260
261function DncodeFolderFiles(sFolderPath)
262{
263/*
264*--------------- DncodeFolderFiles(sFolderPath) -----------------
265* DncodeFolderFiles(sFolderPath)
266* 功能:遍历sFolderPath目录下的所有文件,对加密过的.asp文件
267* 进行解密,并写入源文件中.
268* 实例:DncodeFolderFiles(Server.MapPath("xml"));
269* author:wanghr100(灰豆宝宝.net)
270* update:2004-5-17 8:07
271*--------------- DncodeFolderFiles(sFolderPath) -----------------
272*/
273var arrFiles = GetFilesPath(sFolderPath)
274for(var i=0;i
<arrfiles.length;i++) )="" if(getfiletype(arrfiles[i])="asp" response.write("ok.<br="" response.write(dncodefile(arrfiles[i]))="" {="">")
}
}
}
//取得xml目录下的所有文件.解密.
DncodeFolderFiles(Server.MapPath("xml"))
//取得t.asp.解密.
Response.Write(DncodeFile(Server.MapPath("t.asp")))