Descargué el código fuente ASP de Internet con gran interés. Cuando me estaba preparando para estudiar e investigar, cuando abrí el archivo, vi el código cifrado como un libro en el cielo.
Encontré el método de descifrado en Internet. Tengo que abrir los archivos uno por uno, copiarlos, pegarlos, descifrarlos, copiarlos nuevamente, pegarlos nuevamente y guardarlos...
¿Qué pasa si un programa ASP tiene cientos de archivos?
Aquí viene la solución...
decode.asp
<% @Language="JavaScript" %>
<%
/*
*--------------decodificar.asp ---------------
* Función: recorrer todos los archivos en un determinado directorio y archivos .asp cifrados
* Descifrar y escribir en el archivo fuente.
* Ejemplo: descifrado de un solo archivo
* Response.Write(DncodeFile(Server.MapPath("conn.asp")));
* Ejemplo: Descifre todos los archivos del directorio.
* DncodeFolderFiles(Servidor.MapPath("xml"))
* autor:wanghr100 (gris frijol baby.net)
* actualización: 2004-5-17 11:31
*--------------decodificar.asp ---------------
*/
función DncodeFile(sFilePath)
{
/*
*-------------- DncodeFile(sFilePath) -----------------
* DncodeFile(sFilePath)
* Función: abra el archivo sFilePath, codifique para descifrarlo y vuelva a escribir el archivo.
* Parámetros: sFilePath, cadena, ruta del archivo.
* Retorno: sFilePath, la ruta del archivo.
* Ejemplo: Response.Write(DncodeFile(Server.MapPath("conn.asp")));
* autor:wanghr100 (gris frijol baby.net)
* actualización: 2004-5-17 0:58
*-------------- DncodeFile(sFilePath) -----------------
*/
var Para leer = 1, Para escribir = 2, Para agregar = 8;
var fso = Server.CreateObject("Scripting.FileSystemObject");
var f = fso.OpenTextFile(sFilePath,ForReading,true);
sFileText = f.ReadAll();
f.Cerrar();
sDncodeText = strdec(sFileText)
var f = fso.OpenTextFile(sFilePath,ForWriting,true);
f.Escribir(sDncodeText);
f.Cerrar();
//devuelve sDncodeText;
devolver sFilePath;
}
función GetFilesPath(sFolderPath)
{
/*
*-------------- GetFilesPath(sFolderPath) --------------
* GetFilesPath(sFolderPath)
* Función: recorre todos los archivos en el directorio sFolderPath. Devuelve una matriz y almacena la ruta del archivo.
* Parámetros: sFolderPath, cadena, ruta absoluta del directorio.
* Ejemplo: Response.Write(GetFilesPath(Server.MapPath("xml")))
* actualización: 2004-5-12 8:33
* autor:wanghr100 (gris frijol baby.net)
*-------------- GetFilesPath(sFolderPath) --------------
*/
var sFilePath = nueva matriz();
var fso = Server.CreateObject("Scripting.FileSystemObject");
var oFolder = fso.GetFolder(sFolderPath);
var oSubFolders = oFolder.SubFolders;
var oFiles = oFolder.Files;
icount = oFiles.Count;
var enmFiles = nuevo enumerador(oFiles);
for(;!enmFiles.atEnd();enmFiles.moveNext())
{
sFilePath[sFilePath.length] = enmFiles.item().Path
}
var enmFolders = nuevo enumerador(oSubFolders);
for(;!enmFolders.atEnd();enmFolders.moveNext())
{
/* La matriz antigua es multidimensional */
//sFilePath[sFilePath.length]=GetFilesPath(enmFolders.item().Path);
/* Añadir 2004-5-17 11:09 Sólo matriz unidimensional*/
sFilePath=sFilePath.concat(GetFilesPath(enmFolders.item().Path));
}
devolver sFilePath;
}
función GetFileType(sFileName)
{
/*
*---------------- GetFileType(sFileName) ------------------
* GetFileType(sNombreDeArchivo)
* Función: Obtenga el tipo de archivo sFileName a través del sufijo.
* Parámetros: sFileName, cadena, nombre de archivo.
* Ejemplo: Respuesta.Write(GetFileType("decode.asp"))
* actualización: 2004-5-13 8:33
* autor:wanghr100 (gris frijol baby.net)
*---------------- GetFileType(sFileName) ------------------
*/
sFileName = String(sFileName);
return sFileName.split(".")[sFileName.split(".").length-1];
}
/* Iniciar implementación de descifrado: Li Huihuang Inicio*/
código de pantalla de función(s,l)
{enc=nuevo ActiveXObject("Scripting.Encoder");
return enc.EncodeScriptFile("."+l,s,0,l+"cript");
}
varESTADO_COPY_INPUT = 100
varESTADO_READLEN = 101
varESTADO_DECODE = 102
var STATE_UNESCAPE = 103
var pick_encoding = nueva matriz (
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 = nueva matriz (
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 transformada = nueva matriz()
para (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:yo
var dígitos = nueva matriz()
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
función unescape(char)
{
var escapa = "#&!*$"
var escapó = "rn<>@"
si (char.charCodeAt(0) > 126) devuelve carácter
si (escapes.indexOf(char)! = -1) devuelve escaped.substr(escapes.indexOf(char), 1)
devolver "?"
}
función decodificarBase64 (cadena)
{
varval=0
val += (dígitos[string.substr(0,1).charCodeAt(0)] << 2)
val += (dígitos[cadena.substr(1,1).charCodeAt(0)] >> 4)
val += (dígitos[string.substr(1,1).charCodeAt(0)] & 0xf) << 12
val += ((dígitos[cadena.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
}
función strdec(cadenacodificación)
{
marcador var = "#@~^"
var índice de cadena = 0
var scriptIndex = -1
var unEncodingIndex = 0
var char = nulo
var codificaciónLongitud = unEncodinglength = 0
estado var = STATE_COPY_INPUT
var unEncodingString = ""
var re, arr
mientras (estado)
{
interruptor (estado)
{
caso (STATE_COPY_INPUT):
scriptIndex = codificaciónString.indexOf(marcador, stringIndex)
si (scriptIndex! = -1)
{
unEncodingString += codificaciónString.substring(stringIndex, scriptIndex)
scriptIndex += marcador.longitud
estado = STATE_READLEN
}
demás
{
índice de cadena = índice de cadena == 0 ?
unEncodingString += codificaciónString.substr(stringIndex, codificaciónString.length)
estado = 0
}
romper
caso (STATE_READLEN):
codificaciónLongitud = codificaciónString.substr(scriptIndex, 6)
unEncodinglength = decodeBase64(codificaciónLongitud)
scriptIndex += (6 + "==".longitud)
estado = STATE_DECODE
romper
caso (STATE_DECODE):
si (!unEncodinglength)
{
stringIndex = scriptIndex + " DQgAAA==^#~@".longitud
índice sin codificación = 0
estado = STATE_COPY_INPUT
romper
}
char = codificaciónString.substr(scriptIndex, 1)
si (char == "@") estado = STATE_UNESCAPE
demás
{
si (char.charCodeAt(0) < 0xFF)
{
unEncodingString += String.fromCharCode(transformado[pick_encoding[unEncodingIndex%64]][char.charCodeAt(0)])
unEncodingIndex++
}
demás
{
unEncodingString += carácter
}
scriptIndex++
longitud sin codificación--
romper
}
caso STATE_UNESCAPE:
unEncodingString += unescape(encodingString.substr(++scriptIndex, 1))
scriptIndex++; longitud sin codificación -=2
unEncodingIndex++
estado = STATE_DECODE
romper
}
}
re = nueva RegExp("(JScript|VBscript).encode", "gmi")
while(arr = re.exec(unEncodingString)) unEncodingString = RegExp.leftContext + RegExp.$1 + RegExp.rightContext
devolver unEncodingString
}
/* Finalizar la implementación del descifrado: Li HuihuangEnd*/
función DncodeFolderFiles(sFolderPath)
{
/*
*--------------DncodeFolderFiles(sFolderPath) --------------
* DncodeFolderFiles(sFolderPath)
* Función: recorrer todos los archivos en el directorio sFolderPath y los archivos .asp cifrados
* Descifrar y escribir en el archivo fuente.
* Ejemplo: DncodeFolderFiles(Server.MapPath("xml"));
* autor:wanghr100 (gris frijol baby.net)
* actualización: 2004-5-17 8:07
*--------------DncodeFolderFiles(sFolderPath) --------------
*/
var arrFiles = GetFilesPath(sFolderPath)
para(var i=0;i<arrFiles.length;i++)
{
if(GetFileType(arrFiles[i])=="asp")
{
Respuesta.Escribir(DncodeFile(arrFiles[i]))
Respuesta.Escribir("OK.<br>")
}
}
}
//Obtener todos los archivos en el directorio xml y descifrarlos.
DncodeFolderFiles(Servidor.MapPath("xml"))
//Obtener t.asp.decryption.
Respuesta.Write(DncodeFile(Server.MapPath("t.asp")))
%>