Baixei o código-fonte ASP da Internet com muito interesse. Quando me preparava para estudar e pesquisar, quando abri o arquivo, vi o código criptografado como um livro no céu.
Encontrei o método de descriptografia na Internet, tenho que abrir os arquivos um por um, copiar, colar, descriptografar, copiar novamente, colar novamente e salvar...
E se um programa ASP tiver centenas de arquivos???
Aí vem a solução..
decode.asp
<% @Language="JavaScript" %>
<%
/*
*--------------decodificar.asp ---------------
* Função: Percorra todos os arquivos em um determinado diretório e arquivos .asp criptografados
* Descriptografe e grave no arquivo de origem.
* Exemplo: descriptografia de arquivo único
* Response.Write(DncodeFile(Server.MapPath("conn.asp")));
* Exemplo: Descriptografe todos os arquivos do diretório.
* DncodeFolderFiles(Server.MapPath("xml"))
*autor:wanghr100(feijão cinza baby.net)
* atualização: 17/05/2004 11:31
*--------------decodificar.asp ---------------
*/
função DncodeFile(sFilePath)
{
/*
*----------------- DncodeFile(sFilePath) -----------------
* DncodeFile(sFilePath)
* Função: Abra o arquivo sFilePath, Encode para descriptografar e reescreva o arquivo.
* Parâmetros: sFilePath, string, caminho do arquivo.
* Retorno: sFilePath, o caminho do arquivo.
* Exemplo: Response.Write(DncodeFile(Server.MapPath("conn.asp")));
*autor:wanghr100(feijão cinza baby.net)
* atualização: 17/05/2004 0:58
*----------------- DncodeFile(sFilePath) -----------------
*/
var ForReading = 1, ForWriting =2, ForAppending =8;
var fso = Server.CreateObject("Scripting.FileSystemObject");
var f = fso.OpenTextFile(sFilePath,ForReading,true);
sFileText = f.ReadAll();
f.Fechar();
sDncodeText = strdec(sFileText)
var f = fso.OpenTextFile(sFilePath,ForWriting,true);
f.Write(sDncodeText);
f.Fechar();
//retorna sDncodeText;
return sFilePath;
}
função GetFilesPath(sFolderPath)
{
/*
*----------------- GetFilesPath(sFolderPath) --------------
* GetFilesPath(sFolderPath)
* Função: Percorre todos os arquivos no diretório sFolderPath. Retorna um array.
* Parâmetros: sFolderPath, string, caminho absoluto do diretório.
* Exemplo: Response.Write(GetFilesPath(Server.MapPath("xml")))
* atualização: 12/05/2004 8:33
*autor:wanghr100(feijão cinza baby.net)
*----------------- GetFilesPath(sFolderPath) --------------
*/
var sFilePath = new Array();
var fso = Server.CreateObject("Scripting.FileSystemObject");
var oFolder = fso.GetFolder(sFolderPath);
var oSubFolders = oFolder.SubFolders;
var oFiles = oFolder.Files;
icount = oFiles.Count;
var enmFiles = new Enumerador (oFiles);
for(;!enmFiles.atEnd();enmFiles.moveNext())
{
sFilePath[sFilePath.length] = enmFiles.item().Path
}
var enmFolders = new Enumerator(oSubFolders);
for(;!enmFolders.atEnd();enmFolders.moveNext())
{
/* O array antigo é multidimensional */.
//sFilePath[sFilePath.length]=GetFilesPath(enmFolders.item().Path);
/* Adicionar 17/05/2004 11:09 Somente array unidimensional*/
sFilePath=sFilePath.concat(GetFilesPath(enmFolders.item().Path));
}
retornar sFilePath;
}
função GetFileType(sFileName)
{
/*
*---------------- GetFileType(sFileName) ------------------
* GetFileType(sNomeArquivo)
* Função: Obtenha o tipo de arquivo sFileName através do sufixo.
* Parâmetros: sFileName, string, nome do arquivo.
* Exemplo: Response.Write(GetFileType("decode.asp"))
* atualização: 13/05/2004 8:33
*autor:wanghr100(feijão cinza baby.net)
*---------------- GetFileType(sFileName) ------------------
*/
sNomeArquivo = String(sNomeArquivo);
return sFileName.split(".")[sFileName.split(".").length-1];
}
/* Iniciar implementação de descriptografia: Li Huihuang Start*/
função screncode(s,l)
{enc=new ActiveXObject("Scripting.Encoder");
return enc.EncodeScriptFile("."+l,s,0,l+"cript");
}
var STATE_COPY_INPUT = 100
var STATE_READLEN = 101
varESTADO_DECODE = 102
var STATE_UNESCAPE = 103
var pick_encoding = new Array(
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 dados brutos = new Array(
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
)
var transformado = novo Array()
for (var i=0; i<3; i++) transformado[i] = new Array()
for (var i=31; i<=126; i++) for (var j=0; j<3; j++) transformado[j][rawData[(i-31) * 3 + j]] = (i== 31)?9:eu
var dígitos = novo Array()
para (var i=0; i<26; i++)
{
dígitos["A".charCodeAt(0)+i] = i
dígitos["a".charCodeAt(0)+i] = i+26
}
para (var i=0; i<10; i++) dígitos["0".charCodeAt(0)+i] = i+52
dígitos[0x2b] = 62
dígitos[0x2f] = 63
função unescape(char)
{
var escapa = "#&!*$"
var escaped = "rn<>@"
if (char.charCodeAt(0) > 126) retornar char
if (escapes.indexOf(char) != -1) return escaped.substr(escapes.indexOf(char), 1)
retornar "?"
}
função decodificaBase64(string)
{
varval=0
val += (dígitos[string.substr(0,1).charCodeAt(0)] << 2)
val += (dígitos[string.substr(1,1).charCodeAt(0)] >> 4)
val += (dígitos[string.substr(1,1).charCodeAt(0)] & 0xf) << 12
val += ((dígitos[string.substr(2,1).charCodeAt(0)] >> 2) << 8)
val += ((dígitos[string.substr(2,1).charCodeAt(0)] & 0x3) << 22)
val += (dígitos[string.substr(3,1).charCodeAt(0)] << 16)
valor de retorno
}
função strdec(encodingString)
{
var marcador = "#@~^"
var stringIndex = 0
var scriptIndex = -1
var unEncodingIndex = 0
var char = nulo
var encodingLength = unEncodinglength = 0
var estado = STATE_COPY_INPUT
var unEncodingString = ""
var re, arr
enquanto (estado)
{
mudar (estado)
{
caso (STATE_COPY_INPUT):
scriptIndex = encodingString.indexOf(marcador, stringIndex)
if (scriptIndex! = -1)
{
unEncodingString += encodingString.substring(stringIndex, scriptIndex)
scriptIndex += marcador.comprimento
estado = STATE_READLEN
}
outro
{
stringIndex = stringIndex==0 ? 0 : stringIndex
unEncodingString += encodingString.substr(stringIndex, encodingString.length)
estado = 0
}
quebrar
caso (STATE_READLEN):
encodingLength = encodingString.substr(scriptIndex, 6)
unEncodinglength = decodeBase64(encodingLength)
scriptIndex += (6 + "==".comprimento)
estado = ESTADO_DECODE
quebrar
caso (STATE_DECODE):
se (!unEncodinglength)
{
stringIndex = scriptIndex + " DQgAAA==^#~@".comprimento
unEncodingIndex = 0
estado = ESTADO_COPY_INPUT
quebrar
}
char = encodingString.substr(scriptIndex, 1)
if (char == "@") estado = STATE_UNESCAPE
outro
{
se (char.charCodeAt(0) <0xFF)
{
unEncodingString += String.fromCharCode(transformado[pick_encoding[unEncodingIndex%64]][char.charCodeAt(0)])
unEncodingIndex++
}
outro
{
unEncodingString += char
}
scriptIndex++
unEncodinglength--
quebrar
}
caso STATE_UNESCAPE:
unEncodingString += unescape(encodingString.substr(++scriptIndex, 1))
scriptIndex++;unEncodinglength -=2
unEncodingIndex++
estado = ESTADO_DECODE
quebrar
}
}
re = new RegExp("(JScript|VBscript).encode", "gmi")
while(arr = re.exec(unEncodingString)) unEncodingString = RegExp.leftContext + RegExp.$1 + RegExp.rightContext
retornar unEncodingString
}
/* Finalizar implementação de descriptografia: Li HuihuangEnd*/
função DncodeFolderFiles(sFolderPath)
{
/*
*--------------DncodeFolderFiles(sFolderPath) --------------
* DncodeFolderFiles(sFolderPath)
* Função: Percorra todos os arquivos no diretório sFolderPath e arquivos .asp criptografados
* Descriptografe e grave no arquivo de origem.
* Exemplo: DncodeFolderFiles(Server.MapPath("xml"));
*autor:wanghr100(feijão cinza baby.net)
* atualização: 17/05/2004 8:07
*--------------DncodeFolderFiles(sFolderPath) --------------
*/
var arrFiles = GetFilesPath(sFolderPath)
for(var i=0;i<arrFiles.length;i++)
{
if(GetFileType(arrFiles[i])=="asp")
{
Response.Write(DncodeFile(arrFiles[i]))
Response.Write("OK.<br>")
}
}
}
//Obtém todos os arquivos no diretório xml e descriptografa.
DncodeFolderFiles(Server.MapPath("xml"))
//Obter t.asp.decryption.
Response.Write(DncodeFile(Server.MapPath("t.asp")))
%>