لقد قمت بتنزيل الكود المصدري لـ ASP من الإنترنت باهتمام كبير عندما كنت أستعد للدراسة والبحث، عندما فتحت الملف، رأيت الكود المشفر مثل كتاب في الجنة.
لقد وجدت طريقة فك التشفير على الإنترنت، ولا بد لي من فتح الملفات واحدًا تلو الآخر، ونسخها، ولصقها، وفك تشفيرها، ثم نسخها مرة أخرى، ولصقها مرة أخرى، وحفظها...
ماذا لو كان برنامج ASP يحتوي على مئات الملفات؟؟؟
هنا يأتي الحل..
decode.asp
<% @Language="JavaScript" %>
<%
/*
*--------------decode.asp ---------------
* الوظيفة: اجتياز كافة الملفات الموجودة في دليل معين وملفات asp المشفرة
* فك التشفير والكتابة إلى الملف المصدر.
* مثال: فك تشفير ملف واحد
* Response.Write(DncodeFile(Server.MapPath("conn.asp")));
* مثال: فك تشفير كافة الملفات الموجودة في الدليل.
* DncodeFolderFiles(Server.MapPath("xml"))
* المؤلف:wanghr100 (Gray Bean Baby.net)
* التحديث:2004-5-17 11:31
*--------------decode.asp ---------------
*/
الدالة DncodeFile(sFilePath)
{
/*
*-------------- DncodeFile(sFilePath) -----------------
* دنكوديفيلي (سفيليباث)
* الوظيفة: فتح الملف sFilePath، وتشفيره لفك تشفيره، وإعادة كتابته.
* المعلمات: sFilePath، سلسلة، مسار الملف.
* العودة: sFilePath، مسار الملف.
* مثال: Response.Write(DncodeFile(Server.MapPath("conn.asp")));
* المؤلف:wanghr100 (Gray Bean Baby.net)
* التحديث:2004-5-17 0:58
*-------------- DncodeFile(sFilePath) -----------------
*/
فار 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 = سترديك (sFileText)
var f = fso.OpenTextFile(sFilePath,ForWriting,true);
f.Write(sDncodeText);
f.Close();
// إرجاع sDncodeText؛
إرجاع sFilePath؛
}
الدالة GetFilesPath(sFolderPath)
{
/*
*-------------- GetFilesPath(sFolderPath) --------------
* GetFilesPath (sFolderPath)
* الوظيفة: اجتياز جميع الملفات الموجودة في دليل sFolderPath.
* المعلمات: sFolderPath، سلسلة، المسار المطلق للدليل.
* مثال: Response.Write(GetFilesPath(Server.MapPath("xml")))
* التحديث:2004-5-12 8:33
* المؤلف:wanghr100 (Gray Bean 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 Enumerator(oFiles);
for(;!enmFiles.atEnd();enmFiles.moveNext())
{
sFilePath[sFilePath.length] = enmFiles.item().Path
}
var enmFolders = new Enumerator(oSubFolders);
for(;!enmFolders.atEnd();enmFolders.moveNext())
{
/* المصفوفة القديمة متعددة الأبعاد */
//sFilePath[sFilePath. length]=GetFilesPath(enmFolders.item().Path);
/* إضافة 17-5-2004 11:09 مصفوفة أحادية البعد فقط*/
sFilePath=sFilePath.concat(GetFilesPath(enmFolders.item().Path));
}
إرجاع sFilePath
}
وظيفة GetFileType(sFileName)
{
/*
*---------------- GetFileType(sFileName) ------------------
* GetFileType (sFileName)
* الوظيفة: احصل على نوع ملف sFileName من خلال اللاحقة.
* المعلمات: sFileName، سلسلة، اسم الملف.
* مثال: Response.Write(GetFileType("decode.asp"))
* التحديث:2004-5-13 8:33
* المؤلف:wanghr100 (Gray Bean Baby.net)
*---------------- GetFileType(sFileName) ------------------
*/
sFileName = String(sFileName);
return sFileName.split(".")[sFileName.split(".").length-1];
}
/* بدء تنفيذ فك التشفير: بدء Li Huihuang*/
رمز شاشة الوظيفة (الرموز، 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
)
فار البيانات الخام = صفيف جديد (
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 i=0; i<3; i++) تحولت[i] = new Array()
for (var i=31; i<=126; i++) for (var j=0; j<3; j++) تحولت[j][rawData[(i-31) * 3 + j]] = (i== 31)؟9:ط
أرقام فار = صفيف جديد ()
لـ (var i=0; i<26; i++)
{
digits["A".charCodeAt(0)+i] = 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
وظيفة unscape(char)
{
فار يهرب = "#&!*$"
var escaped = "rn<>@"
إذا (char.charCodeAt(0) > 126) قم بإرجاع الحرف
إذا (esscapes.indexOf(char) != -1) قم بإرجاع escaped.substr(escapes.indexOf(char), 1)
يعود "؟"
}
وظيفة decodeBase64 (سلسلة)
{
فارفال=0
فال += (أرقام[string.substr(0,1).charCodeAt(0)] << 2)
val += (digits[string.substr(1,1).charCodeAt(0)] >> 4)
فال += (أرقام[string.substr(1,1).charCodeAt(0)] & 0xf) << 12
val += ((digits[string.substr(2,1).charCodeAt(0)] >> 2) << 8)
فال += ((digits[string.substr(2,1).charCodeAt(0)] & 0x3) << 22)
فال += (أرقام[string.substr(3,1).charCodeAt(0)] << 16)
عودة فال
}
الدالة strdec(encodingString)
{
علامة فار = "#@~^"
فار سلسلة فهرس = 0
فار scriptIndex = -1
فار unEncodingIndex = 0
فار شار = فارغ
فار encodingLength = unEncodinglength = 0
حالة فار = STATE_COPY_INPUT
فار unEncodingString = ""
فار إعادة، آر
بينما (الحالة)
{
التبديل (الحالة)
{
الحالة (STATE_COPY_INPUT):
scriptIndex = encodingString.indexOf(marker, stringIndex)
إذا (scriptIndex! = -1)
{
unEncodingString += encodingString.substring(stringIndex, scriptIndex)
scriptIndex += Marker.length
الحالة = STATE_READLEN
}
آخر
{
stringIndex = stringIndex==0 ?
unEncodingString += encodingString.substr(stringIndex, encodingString.length)
الدولة = 0
}
استراحة
الحالة (STATE_READLEN):
encodingLength = encodingString.substr(scriptIndex, 6)
unEncodinglength = decodeBase64(encodingLength)
scriptIndex += (6 + "===.الطول)
الحالة = STATE_DECODE
استراحة
الحالة (STATE_DECODE):
إذا (!unEncodinglength)
{
stringIndex = scriptIndex + " DQgAAA==^#~@".length
مؤشر الترميز = 0
الحالة = STATE_COPY_INPUT
استراحة
}
شار = encodingString.substr(scriptIndex, 1)
إذا (شار == "@") الحالة = STATE_UNESCAPE
آخر
{
إذا (char.charCodeAt(0) <0xFF)
{
unEncodingString += String.fromCharCode(transformed[pick_encoding[unEncodingIndex%64]][char.charCodeAt(0)])
unEncodingIndex++
}
آخر
{
unEncodingString += char
}
scriptIndex++
طول التشفير--
استراحة
}
الحالة STATE_UNESCAPE:
unEncodingString += unescape(encodingString.substr(++scriptIndex, 1))
scriptIndex++; unEncodinglength -=2
unEncodingIndex++
الحالة = STATE_DECODE
استراحة
}
}
إعادة = جديد 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 (Gray Bean Baby.net)
* التحديث:2004-5-17 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")))
%>