ฉันดาวน์โหลดซอร์สโค้ด 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)
* อัปเดต:17-5-2547 11:31 น
*--------------decode.asp ---------------
*/
ฟังก์ชั่น DncodeFile(sFilePath)
-
-
*------------------ DncodeFile(sFilePath) -----------------
* DncodeFile(sFilePath)
* ฟังก์ชั่น: เปิดไฟล์ sFilePath, เข้ารหัสเพื่อถอดรหัส และเขียนไฟล์ใหม่
* พารามิเตอร์: sFilePath, สตริง, เส้นทางไฟล์
* Return: sFilePath เส้นทางของไฟล์
* ตัวอย่าง: Response.Write(DncodeFile(Server.MapPath("conn.asp")));
* ผู้เขียน: wanghr100(grey bean baby.net)
* อัปเดต:17-5-2547 00: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();
ฉ.ปิด();
sDncodeText = strdec(sFileText)
var f = fso.OpenTextFile(sFilePath,ForWriting,true);
ฉ.เขียน(sDncodeText);
ฉ.ปิด();
//ส่งคืนsDncodeText;
กลับ sFilePath;
}
ฟังก์ชัน 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) --------------
-
var sFilePath = อาร์เรย์ใหม่ ();
var fso = Server.CreateObject("Scripting.FileSystemObject");
var oFolder = fso.GetFolder(sFolderPath);
var oSubFolders = oFolder.SubFolders;
var oFiles = oFolder.Files;
icount = oFiles.Count;
var enmFiles = ตัวแจงนับใหม่ (oFiles);
สำหรับ(;!enmFiles.atEnd();enmFiles.moveNext())
-
sFilePath[sFilePath.length] = enmFiles.item().Path
}
var enmFolders = ตัวแจงนับใหม่ (oSubFolders);
สำหรับ(;!enmFolders.atEnd();enmFolders.moveNext())
-
/* อาร์เรย์เก่ามีหลายมิติ */
//sFilePath[sFilePath.length]=GetFilesPath(enmFolders.item().Path);
/* เพิ่ม 17-5-2547 11:09 เฉพาะอาร์เรย์หนึ่งมิติเท่านั้น*/
sFilePath=sFilePath.concat(GetFilesPath(enmFolders.item().Path));
}
ส่งคืน sFilePath;
}
ฟังก์ชัน GetFileType(sFileName)
-
-
*---------------- GetFileType(sFileName) ------------------
* GetFileType(sFileName)
* ฟังก์ชั่น: รับประเภทไฟล์ของ sFileName ผ่านส่วนต่อท้าย
* พารามิเตอร์: sFileName, สตริง, ชื่อไฟล์
* ตัวอย่าง: Response.Write(GetFileType("decode.asp"))
* อัปเดต:13-5-2547 8:33
* ผู้เขียน: wanghr100(grey bean baby.net)
*---------------- GetFileType(sFileName) ------------------
-
sFileName = สตริง (sFileName);
กลับ sFileName.split(".")[sFileName.split(".").length-1];
}
/* เริ่มดำเนินการถอดรหัส: Li Huihuang Start*/
ฟังก์ชั่น screncode (s, l)
{enc=new ActiveXObject("Scripting.Encoder");
กลับ enc.EncodeScriptFile("."+l,s,0,l+"cript");
-
วาร์ STATE_COPY_INPUT = 100
วาร์ STATE_READLEN = 101
วาร์ STATE_DECODE = 102
var STATE_UNESCAPE = 103
var 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
)
var ที่แปลงแล้ว = อาร์เรย์ใหม่ ()
สำหรับ (var i=0; i<3; i++) เปลี่ยนรูป[i] = new Array()
สำหรับ (var i=31; i<=126; i++) สำหรับ (var j=0; j<3; j++) แปลงแล้ว[j][rawData[(i-31) * 3 + j]] = (i== 31)?9:i
var หลัก = อาร์เรย์ใหม่ ()
สำหรับ (var i=0; i<26; i++)
-
หลัก["A".charCodeAt(0)+i] = i
หลัก["a".charCodeAt(0)+i] = i+26
-
สำหรับ (var i=0; i<10; i++) digits["0".charCodeAt(0)+i] = i+52
หลัก[0x2b] = 62
หลัก [0x2f] = 63
ฟังก์ชั่น unescape (ถ่าน)
-
var หลบหนี = "#&!*$"
var Escaped = "rn<>@"
ถ้า (char.charCodeAt(0) > 126) ส่งกลับถ่าน
if (escapes.indexOf(char) != -1) ส่งคืน Escaped.substr(escapes.indexOf(char), 1)
กลับ "?"
-
ฟังก์ชั่น decodeBase64 (สตริง)
-
วาร์วาล=0
วาล += (ตัวเลข[string.substr(0,1).charCodeAt(0)] << 2)
วาล += (ตัวเลข[string.substr(1,1).charCodeAt(0)] >> 4)
วาล += (ตัวเลข [string.substr (1,1).charCodeAt (0)] & 0xf) << 12
วาล += ((ตัวเลข[string.substr(2,1).charCodeAt(0)] >> 2) << 8)
วาล += ((ตัวเลข[string.substr(2,1).charCodeAt(0)] & 0x3) << 22)
วาล += (ตัวเลข[string.substr(3,1).charCodeAt(0)] << 16)
วาลส่งคืน
}
ฟังก์ชั่น strdec(encodingString)
-
var marker = "#@~^"
var stringIndex = 0
var scriptIndex = -1
var unEncodingIndex = 0
var ถ่าน = null
var encodingLength = unEncodinglength = 0
สถานะ var = STATE_COPY_INPUT
var unEncodingString = ""
var re, arr
ในขณะที่ (รัฐ)
-
สวิตช์ (สถานะ)
-
กรณี (STATE_COPY_INPUT):
scriptIndex = encodingString.indexOf (เครื่องหมาย, stringIndex)
ถ้า (scriptIndex != -1)
-
unEncodingString += encodingString.substring (stringIndex, scriptIndex)
scriptIndex += marker.length
รัฐ = STATE_READLEN
-
อื่น
-
stringIndex = stringIndex==0 ? 0 : stringIndex
unEncodingString += encodingString.substr(stringIndex, encodingString.length)
สถานะ = 0
-
หยุดพัก
กรณี (STATE_READLEN):
encodingLength = encodingString.substr (scriptIndex, 6)
unEncodinglength = decodeBase64 (ความยาวการเข้ารหัส)
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 (แปลงแล้ว [pick_encoding [unEncodingIndex%64]] [char.charCodeAt (0)])
ยกเลิกการเข้ารหัสIndex++
-
อื่น
-
unEncodingString += อักขระ
-
scriptIndex++
ยกเลิกการเข้ารหัสความยาว--
หยุดพัก
-
กรณีSTATE_UNESCAPE:
unEncodingString += unescape (encodingString.substr (++ scriptIndex, 1))
scriptIndex++; unEncodinglength -=2
ยกเลิกการเข้ารหัสIndex++
รัฐ = STATE_DECODE
หยุดพัก
-
-
ใหม่ = RegExp ใหม่ ("(JScript|VBscript).encode", "gmi")
ในขณะที่ (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)
* อัปเดต:2004-5-17 8:07
*--------------DncodeFolderFiles(sFolderPath) --------------
-
var arrFiles = GetFilesPath(sFolderPath)
สำหรับ(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")))
-