解密ASP源代码

从网上兴致冲冲地下载了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")))

Published At
Categories with Web编程
Tagged with
comments powered by Disqus