JavaScriptの難読化とは何ですか、なぜ脅威なのですか?


回答:


38

難読化は、javascriptコードの本当の意味と意図を「あいまいにする」手段です。一部のサイトでは、コードをコピー/借用したい人の障害として使用しています。他のサイトでは、コードの実際の意図を隠す手段としてこれを使用しています。

オブスキュレーションのいくつかの形式:

  1. 変数の名前を自動的に意味のない短い名前に変更して、コードを読みにくく理解しにくくします。
  2. 余分な空白と改行をすべて削除して、コードが1つの巨大な長い行になるようにします。
  3. コードの最初のパスが実行されて実際のコードが作成され、意図された操作を実行するように実行されるように、コードの一部を自動生成します。
  4. 通常のjavascriptコードではなく、evalと組み合わせた文字コードと文字列操作を使用して、実行される実際のコードを構築します。

隠蔽はそれ自体が悪ではありませんが、悪意を隠そうとするために使用できます。それはおそらくAVGが反対したことです。非常に多くの不明瞭さを検出したため、javascriptが防止しようとしていたことを実行しようとしているかどうかを判断できませんでした。そのため、コードが正常に見えることを確認できないため、デフォルトではコードが安全でないと宣言しました。


それは私が考えていたが、確認したかったものです。説明をありがとう。
-L84

AVGが有名で評判の良いWebサイトへのアクセスをブロックしている場合は、おそらくそれをオーバーライドできます。サイトの担当者がわからない場合はお勧めしません。
-uSlackr

4
一部のサイトではjs圧縮を使用しているため、読み込みが高速になります(ほぼ全員)。コードは難読化されているように見えます。
-jcubic

9
1そして2また、JavaScriptのコンプレッサーによって行われます。コンプレッサーはコードを副作用として難読化しますが、それは主な目的ではありません。主な目的は、帯域幅を減らすために、javascriptを小さくすることです。
BlueRaja -ダニーPflughoeft

5. JSファイルを圧縮してダウンロードを高速化するためにも使用されます。ヤフーはWeb上に存在していたので、これを実行しました。Webアプリケーションを作成するためのGoogleのツール(GMailやカレンダーなど)も実行します。
クロエ

13

難読化とは、意図した意味を隠すことです。

この場合、次のような明確に読みやすいJavaScriptスニペット

window.onload = function() { alert("Hello " + username) };

で置き換えることができます

var _0xc5b2=["\x6F\x6E\x6C\x6F\x61\x64",
        "\x48\x65\x6C\x6C\x6F\x20"];window[_0xc5b2[0]]=
    function (){alert(_0xc5b2[1]+username);} ;

あるいは

eval(unescape("var%20_0xc5b2%3D%5B%22onload%22%2C%22Hello%20%22%5D%3Bwindow"+
  "%5B_0xc5b2%5B0%5D%5D%3Dfunction%20%28%29%7Balert%28_0xc5b2%5B1%5D+username"+
  "%29%3B%7D%20%3B"));

3つのコードスニペットはすべてまったく同じことを行いますが、最初のコードを読むだけでその意図を簡単に理解できます。

どうやら、AVGは実行を許可する前にJavaScriptコードの目的を理解しようとします。コードが難読化されると、AVGはおそらく失敗します。したがって、警告。

そうは言っても、一部のWebサイトはJavaScriptを難読化するのは悪意ではなく、作品を盗むことを困難にするためです。難読化は通常、この目的で使用する場合は役に立ちませんが、重要なことは、難読化は必ずしも悪意を意味するものではないということです。


3
私がよく見つけたように、コードを難読化解除すると、盗む価値のない悪意を持ってコーディングされたjavascriptが隠されていることがよくわかりました。これは、プログラマーが適切なプログラミング手法よりも盗難を心配することに多くの時間を費やし、難読化さえ正しくできないため、簡単に解読される兆候です。コードの難読化を非常に困難にすることに時間を費やしたのはマルウェアプログラマーだけです。そのため、AVGはサイトを回避するための本当に良い理由としてフラグを立てています。
Fiasco Labs

2
AVGは機械であり、人間ではありません。明らかに、マシンはコードを理解できます。これは、コードが同じことを行う方法です。さらに、人々は通常、サーフィンするときにJavascriptを参照しません。これは、単に「組合による罪悪感」の場合です。危険なJavascriptは、特定の難読化パターンを使用しています。したがって、同様のパターンを持つ他のJavascriptは疑わしいです。
カズ

@Kaz:これは単なる例でしたが、JavaScriptエンジンを理解する必要がある難読化のより洗練された方法があります。マルウェアスキャナーは通常、パフォーマンス上の理由から、スクリプトを実行する代わりに特定のパターンを検索します。
デニス

理論的に価値のないものと実質的に価値のないものは異なります-理論的には、コードを難読化しても意味がありません。ただし、難読化を解除するコストが新しいコードを作成するコストと同じ場合(または、怠laな泥棒を阻止するのに十分なコストになった場合)、不当な盗難を防ぐための難読化は有益です。
ロナルド

まさにそのため、問題になっているのは難読化そのものではなく、既知の悪意のあるコードに対するコードの類似性です。
カズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.