Я с большим интересом скачал исходный код ASP из Интернета. Когда я готовился к изучению и исследованию, когда я открыл файл, я увидел зашифрованный код, как книгу на небесах. Это было очень удручающе.
Я нашел способ расшифровки в Интернете. Мне приходится открывать файлы один за другим, копировать, вставлять, расшифровывать, снова копировать, снова вставлять и сохранять...
Что делать, если программа ASP имеет сотни файлов???
Вот решение.
decode.asp
<% @Language="JavaScript" %>
<%
/*
*--------------decode.asp ---------------
* Функция: просмотр всех файлов в определенном каталоге и зашифрованных файлов .asp.
* Расшифровать и записать в исходный файл.
* Пример: расшифровка одного файла.
* Response.Write(DncodeFile(Server.MapPath("conn.asp")));
* Пример: Расшифруйте все файлы в каталоге.
* DncodeFolderFiles(Server.MapPath("xml"))
* автор:wanghr100(grey bean baby.net)
* обновление: 2004-5-17 11:31
*--------------decode.asp ---------------
*/
функция DncodeFile(sFilePath)
{
/*
*-------------- DncodeFile(sFilePath) ------------------
* DncodeFile(sFilePath)
* Функция: откройте файл sFilePath, закодируйте его для расшифровки и перепишите файл.
* Параметры: sFilePath, строка, путь к файлу.
* Возврат: sFilePath, путь к файлу.
* Пример: Response.Write(DncodeFile(Server.MapPath("conn.asp")));
* автор:wanghr100(grey bean baby.net)
* обновление: 2004-5-17 0:58
*-------------- DncodeFile(sFilePath) ------------------
*/
вар ForReading = 1, ForWriting = 2, ForAppending = 8;
var fso = Server.CreateObject("Scripting.FileSystemObject");
вар f = fso.OpenTextFile(sFilePath,ForReading,true);
sFileText = f.ReadAll();
е.Закрыть();
sDncodeText = strdec(sFileText)
вар f = fso.OpenTextFile(sFilePath,ForWriting,true);
f.Write(sDncodeText);
е.Закрыть();
// возвращаем sDncodeText;
вернуть сФайлеПат;
}
Функция GetFilesPath(sFolderPath)
{
/*
*-------------- GetFilesPath(sFolderPath) --------------
* GetFilesPath(sFolderPath)
* Функция: просмотреть все файлы в каталоге sFolderPath. Возвращает массив.
* Параметры: sFolderPath, строка, абсолютный путь к каталогу.
* Пример: Response.Write(GetFilesPath(Server.MapPath("xml")))
* обновление: 2004-5-12 8:33
* автор:wanghr100(grey bean baby.net)
*-------------- GetFilesPath(sFolderPath) --------------
*/
вар sFilePath = новый массив ();
var fso = Server.CreateObject("Scripting.FileSystemObject");
вар oFolder = fso.GetFolder(sFolderPath);
вар oSubFolders = oFolder.SubFolders;
вар oFiles = oFolder.Files;
icount = oFiles.Count
вар enmFiles = новый перечислитель (oFiles);
for(;!enmFiles.atEnd();enmFiles.moveNext())
{
sFilePath[sFilePath.length] = enmFiles.item().Path
}
Вар enmFolders = новый Enumerator (oSubFolders);
for(;!enmFolders.atEnd();enmFolders.moveNext())
{
/* Старый массив многомерен */
//sFilePath[sFilePath.length]=GetFilesPath(enmFolders.item().Path);
/* Добавить 17.05.2004 11:09 Только одномерный массив*/
sFilePath=sFilePath.concat(GetFilesPath(enmFolders.item().Path));
}
вернуть sFilePath
}
функция GetFileType(sFileName);
{
/*
*---------------- GetFileType(sFileName) ------------------
* GetFileType(sFileName)
* Функция: Получите тип файла sFileName через суффикс.
* Параметры: sFileName, строка, имя файла.
* Пример: Response.Write(GetFileType("decode.asp"))
* обновление: 13 мая 2004 г., 8:33
* автор:wanghr100(grey bean baby.net)
*---------------- GetFileType(sFileName) ------------------
*/
ИмяФайла = Строка(ИмяФайла);
return sFileName.split(".")[sFileName.split(".").length-1];
}
/* Начать реализацию дешифрования: Ли Хуэйхуан Старт*/
функция screncode(s,l)
{enc=new ActiveXObject("Scripting.Encoder");
return enc.EncodeScriptFile("."+l,s,0,l+"cript");
}
вар STATE_COPY_INPUT = 100
вар STATE_READLEN = 101
вар STATE_DECODE = 102
вар STATE_UNESCAPE = 103
вар Pick_encoding = новый массив (
1, 2, 0, 1, 2, 0, 2, 0, 0, 2, 0, 2, 1, 0, 2, 0,
1, 0, 2, 0, 1, 1, 2, 0, 0, 2, 1, 0, 2, 0, 0, 2,
1, 1, 0, 2, 0, 2, 0, 1, 0, 1, 1, 2, 0, 1, 0, 2,
1, 0, 2, 0, 1, 1, 2, 0, 0, 1, 1, 2, 0, 1, 0, 2
)
var rawData = новый массив(
0x64,0x37,0x69, 0x50,0x7E,0x2C, 0x22,0x5A,0x65, 0x4A,0x45,0x72,
0x61,0x3A,0x5B, 0x5E,0x79,0x66, 0x5D,0x59,0x75, 0x5B,0x27,0x4C,
0x42,0x76,0x45, 0x60,0x63,0x76, 0x23,0x62,0x2A, 0x65,0x4D,0x43,
0x5F,0x51,0x33, 0x7E,0x53,0x42, 0x4F,0x52,0x20, 0x52,0x20,0x63,
0x7A, 0x26, 0x4A, 0x21, 0x54, 0x5A, 0x46, 0x71, 0x38, 0x20, 0x2B, 0x79,
0x26,0x66,0x32, 0x63,0x2A,0x57, 0x2A,0x58,0x6C, 0x76,0x7F,0x2B,
0x47,0x7B,0x46, 0x25,0x30,0x52, 0x2C,0x31,0x4F, 0x29,0x6C,0x3D,
0x69,0x49,0x70, 0x3F,0x3F,0x3F, 0x27,0x78,0x7B, 0x3F,0x3F,0x3F,
0x67,0x5F,0x51, 0x3F,0x3F,0x3F, 0x62,0x29,0x7A, 0x41,0x24,0x7E,
0x5A, 0x2F, 0x3B, 0x66, 0x39, 0x47, 0x32, 0x33, 0x41, 0x73, 0x6F, 0x77,
0x4D,0x21,0x56, 0x43,0x75,0x5F, 0x71,0x28,0x26, 0x39,0x42,0x78,
0x7C,0x46,0x6E, 0x53,0x4A,0x64, 0x48,0x5C,0x74, 0x31,0x48,0x67,
0x72,0x36,0x7D, 0x6E,0x4B,0x68, 0x70,0x7D,0x35, 0x49,0x5D,0x22,
0x3F,0x6A,0x55, 0x4B,0x50,0x3A, 0x6A,0x69,0x60, 0x2E,0x23,0x6A,
0x7F,0x09,0x71, 0x28,0x70,0x6F, 0x35,0x65,0x49, 0x7D,0x74,0x5C,
0x24,0x2C,0x5D, 0x2D,0x77,0x27, 0x54,0x44,0x59, 0x37,0x3F,0x25,
0x7B,0x6D,0x7C, 0x3D,0x7C,0x23, 0x6C,0x43,0x6D, 0x34,0x38,0x28,
0x6D, 0x5E, 0x31, 0x4E, 0x5B, 0x39, 0x2B, 0x6E, 0x7F, 0x30, 0x57, 0x36,
0x6F,0x4C,0x54, 0x74,0x34,0x34, 0x6B,0x72,0x62, 0x4C,0x25,0x4E,
0x33,0x56,0x30, 0x56,0x73,0x5E, 0x3A,0x68,0x73, 0x78,0x55,0x09,
0x57,0x47,0x4B, 0x77,0x32,0x61, 0x3B,0x35,0x24, 0x44,0x2E,0x4D,
0x2F,0x64,0x6B, 0x59,0x4F,0x44, 0x45,0x3B,0x21, 0x5C,0x2D,0x37,
0x68,0x41,0x53, 0x36,0x61,0x58, 0x58,0x7A,0x48, 0x79,0x22,0x2E,
0x09,0x60,0x50, 0x75,0x6B,0x2D, 0x38,0x4E,0x29, 0x55,0x3D,0x3F
)
вар преобразован = новый массив()
for (var i=0; i<3; i++) Transform[i] = new Array()
for (var i=31; i<=126; i++) for (var j=0; j<3; j++) Transformed[j][rawData[(i-31) * 3 + j]] = (i== 31)?9:я
вар цифры = новый массив()
для (вар я=0; я<26; я++)
{
цифры["A".charCodeAt(0)+i] = я
цифры["a".charCodeAt(0)+i] = i+26
}
for (var i=0; i<10; i++) digits["0".charCodeAt(0)+i] = i+52
цифры[0x2b] = 62
цифры[0x2f] = 63
функция unescape(char)
{
var escape = "#&!*$"
var escape = "rn<>@"
if (char.charCodeAt(0) > 126) возвращает символ
if (escapes.indexOf(char) != -1) return escaped.substr(escapes.indexOf(char), 1)
возвращаться "?"
}
функция decodeBase64 (строка)
{
варвал=0
val += (цифры[string.substr(0,1).charCodeAt(0)] << 2)
val += (цифры[string.substr(1,1).charCodeAt(0)] >> 4)
val += (цифры[string.substr(1,1).charCodeAt(0)] & 0xf) << 12
val += ((цифры[string.substr(2,1).charCodeAt(0)] >> 2) << 8)
val += ((цифры[string.substr(2,1).charCodeAt(0)] & 0x3) << 22)
val += (цифры[string.substr(3,1).charCodeAt(0)] << 16)
возвращаемое значение
}
функция strdec(encodingString)
{
вар маркер = "#@~^"
вар stringIndex = 0
вар scriptIndex = -1
вар unEncodingIndex = 0
вар символ = ноль
варcodingLength = unEncodinglength = 0
состояние вар = STATE_COPY_INPUT
вар unEncodingString = ""
вар ре, обр.
пока (состояние)
{
переключатель (состояние)
{
случай (STATE_COPY_INPUT):
scriptIndex =codingString.indexOf(маркер, stringIndex)
если (индекс сценария != -1)
{
unEncodingString +=codingString.substring(stringIndex, scriptIndex)
scriptIndex += маркер.длина
состояние = STATE_READLEN
}
еще
{
stringIndex = stringIndex==0 0: stringIndex
unEncodingString +=codingString.substr(stringIndex,codingString.length)
состояние = 0
}
перерыв
случай (STATE_READLEN):
codingLength =codingString.substr(scriptIndex, 6)
unEncodinglength = decodeBase64(encodingLength)
scriptIndex += (6 + "==".длина)
состояние = STATE_DECODE
перерыв
случай (STATE_DECODE):
если (!unEncodinglength)
{
stringIndex = scriptIndex + " DQgAAA==^#~@".length
унэнкодингиндекс = 0
состояние = STATE_COPY_INPUT
перерыв
}
символ = кодировкаString.substr(scriptIndex, 1)
if (char == "@") состояние = STATE_UNESCAPE
еще
{
если (char.charCodeAt(0) <0xFF)
{
unEncodingString += String.fromCharCode(transformed[pick_encoding[unEncodingIndex%64]][char.charCodeAt(0)])
unEncodingIndex++
}
еще
{
unEncodingString += символ
}
скриптиндекс++
unEncodinglength--
перерыв
}
случай STATE_UNESCAPE:
unEncodingString += unescape(encodingString.substr(++scriptIndex, 1))
scriptIndex++; unEncodinglength -=2
unEncodingIndex++
состояние = STATE_DECODE
перерыв
}
}
re = новый RegExp("(JScript|VBscript).encode", "gmi")
while(arr = re.exec(unEncodingString)) unEncodingString = RegExp.leftContext + RegExp.$1 + RegExp.rightContext
вернуть unEncodingString
}
/* Завершение реализации дешифрования: Li HuihuangEnd*/
функция DncodeFolderFiles(sFolderPath)
{
/*
*--------------DncodeFolderFiles(sFolderPath) --------------
* DncodeFolderFiles(sFolderPath)
* Функция: просмотр всех файлов в каталоге sFolderPath и зашифрованных файлов .asp.
* Расшифровать и записать в исходный файл.
* Пример: DncodeFolderFiles(Server.MapPath("xml"));
* автор:wanghr100(grey bean baby.net)
* обновление: 17 мая 2004 г., 8:07
*--------------DncodeFolderFiles(sFolderPath) --------------
*/
вар arrFiles = GetFilesPath(sFolderPath)
for(var i=0;i<arrFiles.length;i++)
{
если (GetFileType(arrFiles[i])=="asp")
{
Response.Write(DncodeFile(arrFiles[i]))
Response.Write("ОК.<br>")
}
}
}
//Получаем все файлы в каталоге xml и расшифровываем.
DncodeFolderFiles(Server.MapPath("xml"))
//Получаем t.asp.decryption.
Response.Write(DncodeFile(Server.MapPath("t.asp")))
%>