勉強や研究の準備をしていたときに、とても興味深くインターネットから ASP のソース コードをダウンロードしましたが、そのファイルを開いたとき、天国の本のように暗号化されたコードが表示されていました。
インターネットで復号化方法を見つけました。ファイルを 1 つずつ開いて、コピーして貼り付け、復号化し、再度コピーし、再度貼り付けて保存する必要があります。
ASP プログラムに何百ものファイルがある場合はどうすればよいでしょうか
。これが解決策です
。decode.asp
<% @Language="JavaScript" %>
<%
/*
*--------------decode.asp ---------------
* 機能: 特定のディレクトリ内のすべてのファイルと暗号化された .asp ファイルをスキャンします。
* 復号化してソースファイルに書き込みます。
* 例: 単一ファイルの復号化
* Response.Write(DncodeFile(Server.MapPath("conn.asp")));
* 例: ディレクトリ内のすべてのファイルを復号化します。
* DncodeFolderFiles(Server.MapPath("xml"))
* 著者:wanghr100(灰色豆赤ちゃん.net)
*更新:2004-5-17 11:31
*--------------decode.asp ---------------
*/
関数 DncodeFile(sFilePath)
{
/*
*-------------- DncodeFile(sFilePath) ---------------
* DncodeFile(sFilePath)
* 機能: ファイル sFilePath を開き、エンコードして復号し、ファイルを書き換えます。
* パラメータ: sFilePath、文字列、ファイル パス。
* 戻り値: sFilePath、ファイルのパス。
* 例: Response.Write(DncodeFile(Server.MapPath("conn.asp")));
* 著者:wanghr100(灰色豆赤ちゃん.net)
*更新: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();
// sDncodeText を返します。
sFilePathを返します。
関数
GetFilesPath(sFolderPath)
{
/*
*-------------- GetFilesPath(sFolderPath) --------------
* GetFilesPath(sFolderPath)
* 機能: sFolderPath ディレクトリ内のすべてのファイルをスキャンし、ファイル パスを格納します。
* パラメータ: sFolderPath、文字列、ディレクトリの絶対パス。
* 例: Response.Write(GetFilesPath(Server.MapPath("xml")))
*更新:2004-5-12 8:33
* 著者:wanghr100(灰色豆赤ちゃん.net)
*-------------- GetFilesPath(sFolderPath) --------------
*/
var sFilePath = 新しい 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 = 新しい列挙子(oFiles);
for(;!enmFiles.atEnd();enmFiles.moveNext())
{
sFilePath[sFilePath.length] = enmFiles.item().Path
enmFolders
= 新しい列挙子(oSubFolders);
for(;!enmFolders.atEnd();enmFolders.moveNext())
{
/* 古い配列は多次元です */
//sFilePath[sFilePath.length]=GetFilesPath(enmFolders.item().Path);
/* 2004-5-17 11:09 追加 1 次元配列のみ*/
sFilePath=sFilePath.concat(GetFilesPath(enmFolders.item().Path));
関数
GetFileType(sFileName)
を返します
。
{
/*
*---------------- GetFileType(sFileName) ------------------
* GetFileType(sFileName)
* 機能: sFileName のファイル タイプをサフィックスから取得します。
* パラメータ: sFileName、文字列、ファイル名。
* 例: Response.Write(GetFileType("decode.asp"))
*更新:2004-5-13 8:33
* 著者:wanghr100(灰色豆赤ちゃん.net)
*---------------- GetFileType(sFileName) ------------------
*/
sFileName = 文字列(sFileName);
return sFileName.split(".")[sFileName.split(".").length-1];
}
/* 復号化実装の開始: Li Huihuang Start*/
関数スクリーンコード(s,l)
{enc=new ActiveXObject("Scripting.Encoder");
return enc.EncodeScriptFile("."+l,s,0,l+"cript");
}
var STATE_COPY_INPUT = 100
var STATE_READLEN = 101
var 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 変換 = new Array()
for (var i=0; i<3; i++)transformed[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:i
var 数字 = 新しい Array()
for (var i=0; i<26; i++)
{
数字["A".charCodeAt(0)+i] = i
数字["a".charCodeAt(0)+i] = i+26
}
for (var i=0; i<10; i++) 数字["0".charCodeAt(0)+i] = i+52
桁[0x2b] = 62
数字[0x2f] = 63
関数 unescape(char)
{
var エスケープ = "#&!*$"
var エスケープ = "rn<>@"
if (char.charCodeAt(0) > 126) char を返す
if (escapes.indexOf(char) != -1) エスケープされた.substr(escaps.indexOf(char), 1) を返す
戻る "?"
}
関数decodeBase64(文字列)
{
varval=0
val += (数字[文字列.substr(0,1).charCodeAt(0)] << 2)
val += (数字[文字列.substr(1,1).charCodeAt(0)] >> 4)
val += (数字[string.substr(1,1).charCodeAt(0)] & 0xf) << 12
val += ((数字[文字列.substr(2,1).charCodeAt(0)] >> 2) << 8)
val += ((数字[文字列.substr(2,1).charCodeAt(0)] & 0x3) << 22)
val += (数字[文字列.substr(3,1).charCodeAt(0)] << 16)
戻り値
関数
strdec(encodingString)
{
var マーカー = "#@~^"
var stringIndex = 0
var scriptIndex = -1
var unEncodingIndex = 0
var char = null
varcodingLength = unEncodinglength = 0
var state = STATE_COPY_INPUT
var unEncodingString = ""
ヴァーレ、アーラ
while(状態)
{
スイッチ(状態)
{
ケース (STATE_COPY_INPUT):
scriptIndex = encodingString.indexOf(マーカー, stringIndex)
if (scriptIndex != -1)
{
unEncodingString += encodingString.substring(stringIndex, scriptIndex)
scriptIndex += マーカー.長さ
状態 = STATE_READLEN
}
それ以外
{
文字列インデックス = 文字列インデックス==0 ? 0 : 文字列インデックス
unEncodingString += encodingString.substr(stringIndex, encodingString.length)
状態 = 0
}
壊す
ケース (STATE_READLEN):
エンコード長 = エンコード文字列.substr(scriptIndex, 6)
unEncodinglength = decodeBase64(encodingLength)
scriptIndex += (6 + "==".length)
状態 = STATE_DECODE
壊す
ケース (STATE_DECODE):
if (!unEncodinglength)
{
stringIndex = scriptIndex + " DQgAAA==^#~@".length
unEncodingIndex = 0
状態 = STATE_COPY_INPUT
壊す
}
char = encodingString.substr(scriptIndex, 1)
if (char == "@") state = STATE_UNESCAPE
それ以外
{
if (char.charCodeAt(0) < 0xFF)
{
unEncodingString += String.fromCharCode(transformed[pick_encoding[unEncodingIndex%64]][char.charCodeAt(0)])
unEncodingIndex++
}
それ以外
{
unEncodingString += 文字
}
スクリプトインデックス++
unEncodinglength--
壊す
}
ケースSTATE_UNESCAPE:
unEncodingString += unescape(encodingString.substr(++scriptIndex, 1))
scriptIndex++; unEncodinglength -=2
unEncodingIndex++
状態 = STATE_DECODE
壊す
}
}
re = new 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(灰色豆赤ちゃん.net)
*更新:2004-5-17 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>")
}
}
}
//xml ディレクトリ内のすべてのファイルを取得し、復号化します。
DncodeFolderFiles(Server.MapPath("xml"))
//t.asp.decryption を取得します。
Response.Write(DncodeFile(Server.MapPath("t.asp")))
%>