<% @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")))
%>