J'ai téléchargé le code source ASP sur Internet avec beaucoup d'intérêt. Alors que je me préparais à étudier et à faire des recherches, lorsque j'ai ouvert le fichier, j'ai vu le code crypté comme un livre au paradis :(
J'ai trouvé la méthode de décryptage sur Internet. Je dois ouvrir les fichiers un par un, copier, coller, décrypter, copier à nouveau, coller à nouveau et enregistrer...
Et si un programme ASP contient des centaines de fichiers ???
Voici la solution...
decode.asp
<% @Language="JavaScript" %>
<%
/*
*--------------decode.asp ---------------
* Fonction : parcourir tous les fichiers d'un certain répertoire et les fichiers .asp cryptés
* Décrypter et écrire dans le fichier source.
* Exemple : décryptage d'un seul fichier
* Response.Write(DncodeFile(Server.MapPath("conn.asp")));
* Exemple : Décryptez tous les fichiers du répertoire.
* DncodeFolderFiles(Server.MapPath("xml"))
* auteur : wanghr100 (haricot gris baby.net)
* mise à jour : 2004-5-17 11:31
*--------------decode.asp ---------------
*/
fonction DncodeFile(sFilePath)
{
/*
*-------------- DncodeFile(sFilePath) -----------------
* DncodeFile(sFilePath)
* Fonction : ouvrez le fichier sFilePath, encodez pour décrypter et réécrivez le fichier.
* Paramètres : sFilePath, chaîne, chemin du fichier.
* Retour : sFilePath, le chemin du fichier.
* Exemple : Response.Write(DncodeFile(Server.MapPath("conn.asp")));
* auteur : wanghr100 (haricot gris baby.net)
* mise à jour : 2004-5-17 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.Close();
sDncodeText = strdec(sFileText)
var f = fso.OpenTextFile(sFilePath,ForWriting,true);
f.Write(sDncodeText);
f.Close();
//retourne sDncodeText ;
retourner sFilePath ;
}
fonction GetFilesPath(sFolderPath)
{
/*
*------------- GetFilesPath(sFolderPath) --------------
* GetFilesPath(sFolderPath)
* Fonction : parcourez tous les fichiers du répertoire sFolderPath. Renvoie un tableau.
* Paramètres : sFolderPath, chaîne, chemin absolu du répertoire.
* Exemple : Response.Write(GetFilesPath(Server.MapPath("xml")))
* mise à jour : 2004-5-12 8:33
* auteur : wanghr100 (haricot gris 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 = nouvel énumérateur (oFiles);
pour(;!enmFiles.atEnd();enmFiles.moveNext())
{
sFilePath[sFilePath.length] = enmFiles.item().Path
}
var enmFolders = new Enumerator(oSubFolders);
pour(;!enmFolders.atEnd();enmFolders.moveNext())
{
/* L'ancien tableau est multidimensionnel.
//sFilePath[sFilePath.length]=GetFilesPath(enmFolders.item().Path);
/* Ajout du 17/05/2004 11:09 Tableau unidimensionnel uniquement*/
sFilePath=sFilePath.concat(GetFilesPath(enmFolders.item().Path));
}
renvoie sFilePath ;
}
fonction GetFileType(sFileName)
{
/*
*---------------- GetFileType(sFileName) ------------------
* GetFileType(sFileName)
* Fonction : obtenez le type de fichier de sFileName via le suffixe.
* Paramètres : sFileName, chaîne, nom de fichier.
* Exemple : Response.Write(GetFileType("decode.asp"))
* mise à jour : 2004-5-13 8:33
* auteur : wanghr100 (haricot gris baby.net)
*---------------- GetFileType(sFileName) ------------------
*/
sFileName = String(sFileName);
return sFileName.split(".")[sFileName.split(".").length-1];
}
/* Démarrer l'implémentation du décryptage : Li Huihuang Start*/
code d'écran de fonction (s, l)
{enc=new ActiveXObject("Scripting.Encoder");
return enc.EncodeScriptFile("."+l,s,0,l+"cript");
}
variable STATE_COPY_INPUT = 100
variable STATE_READLEN = 101
varÉTAT_DECODE = 102
var STATE_UNESCAPE = 103
var pick_encoding = nouveau tableau (
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 = nouveau tableau (
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 transformé = nouveau tableau()
pour (var i=0; i<3; i++) transformé[i] = new Array()
pour (var i=31; i<=126; i++) pour (var j=0; j<3; j++) transformé[j][rawData[(i-31) * 3 + j]] = (i== 31)?9:je
var chiffres = nouveau tableau()
pour (var i=0; i<26; i++)
{
chiffres["A".charCodeAt(0)+i] = i
chiffres["a".charCodeAt(0)+i] = i+26
}
pour (var i=0; i<10; i++) chiffres["0".charCodeAt(0)+i] = i+52
chiffres[0x2b] = 62
chiffres[0x2f] = 63
fonction unescape(char)
{
var échappe = "#&!*$"
var escaped = "rn<>@"
si (char.charCodeAt(0) > 126) renvoie un caractère
if (escapes.indexOf(char) != -1) return escaped.substr(escapes.indexOf(char), 1)
retour "?"
}
fonction decodeBase64 (chaîne)
{
varval=0
val += (digits[string.substr(0,1).charCodeAt(0)] << 2)
val += (digits[string.substr(1,1).charCodeAt(0)] >> 4)
val += (digits[string.substr(1,1).charCodeAt(0)] & 0xf) << 12
val += ((digits[string.substr(2,1).charCodeAt(0)] >> 2) << 8)
val += ((digits[string.substr(2,1).charCodeAt(0)] & 0x3) << 22)
val += (digits[string.substr(3,1).charCodeAt(0)] << 16)
valeur de retour
}
fonction strdec(encodingString)
{
var marqueur = "#@~^"
var chaîneIndex = 0
varscriptIndex = -1
var unEncodingIndex = 0
var char = nul
var encodingLength = unEncodinglength = 0
état var = STATE_COPY_INPUT
var unEncodingString = ""
var ré, arr
pendant que (état)
{
commutateur (état)
{
cas (STATE_COPY_INPUT) :
scriptIndex = encodingString.indexOf (marqueur, stringIndex)
si (scriptIndex != -1)
{
unEncodingString += encodingString.substring(stringIndex, scriptIndex)
scriptIndex += marqueur.longueur
état = STATE_READLEN
}
autre
{
stringIndex = stringIndex==0 ?
unEncodingString += encodingString.substr(stringIndex, encodingString.length)
état = 0
}
casser
cas (STATE_READLEN) :
encodingLength = encodingString.substr (scriptIndex, 6)
unEncodinglength = decodeBase64 (encodingLength)
scriptIndex += (6 + "==".longueur)
état = STATE_DECODE
casser
cas (STATE_DECODE) :
si (!unEncodinglength)
{
stringIndex = scriptIndex + " DQgAAA==^#~@".longueur
unEncodingIndex = 0
état = STATE_COPY_INPUT
casser
}
char = encodingString.substr(scriptIndex, 1)
si (char == "@") état = STATE_UNESCAPE
autre
{
si (char.charCodeAt(0) < 0xFF)
{
unEncodingString += String.fromCharCode(transformed[pick_encoding[unEncodingIndex%64]][char.charCodeAt(0)])
unEncodingIndex++
}
autre
{
unEncodingString += char
}
scriptIndex++
unEncodinglength--
casser
}
cas STATE_UNESCAPE :
unEncodingString += unescape(encodingString.substr(++scriptIndex, 1))
scriptIndex++ ; unEncodinglength -=2
unEncodingIndex++
état = STATE_DECODE
casser
}
}
re = new RegExp("(JScript|VBscript).encode", "gmi")
while(arr = re.exec(unEncodingString)) unEncodingString = RegExp.leftContext + RegExp.$1 + RegExp.rightContext
retourner unEncodingString
}
/* Fin de l'implémentation du décryptage : Li HuihuangEnd*/
fonction DncodeFolderFiles(sFolderPath)
{
/*
*-------------DncodeFolderFiles(sFolderPath) --------------
* DncodeFolderFiles(sFolderPath)
* Fonction : Parcourez tous les fichiers du répertoire sFolderPath et les fichiers .asp cryptés
* Décrypter et écrire dans le fichier source.
* Exemple : DncodeFolderFiles(Server.MapPath("xml"));
* auteur : wanghr100 (haricot gris baby.net)
* mise à jour : 2004-5-17 8:07
*-------------DncodeFolderFiles(sFolderPath) --------------
*/
var arrFiles = GetFilesPath(sFolderPath)
pour(var i=0;i<arrFiles.length;i++)
{
si(GetFileType(arrFiles[i])=="asp")
{
Réponse.Write(DncodeFile(arrFiles[i]))
Réponse.Write("OK.<br>")
}
}
}
//Récupère tous les fichiers du répertoire XML et décrypte.
DncodeFolderFiles(Server.MapPath("xml"))
//Obtenir t.asp.decryption.
Réponse.Write(DncodeFile(Server.MapPath("t.asp")))
%>