JavaScript難読化処理
 のためのヒント

▼▽ Instant Access Menu ▽▼




6.URLエンコードを利用する

5-1のソースを元に、更なる難読化の方法を考えてみたいと思います。URLエンコードを利用すると、すべての文字が「%82」など「%」と英数字・アンダーバーなどになります。これを元に戻すには、unescapeメソッドでデコードするだけですから、それほど難しいわけではありませんが、初心者・中級者に猫だましのごとく効果的です。

例を出して考えてみましょう。非常に単純なJavascript「if(a>5){alert("abc");}」という文字列をescapeしてみます。下記のフォームにコピー&ペーストしてみてください。

変換したい文字列を入力してください。

  
↓ escapeされた変換結果が表示されます。

「if%28a%3E5%29%7Balert%28%22abc%22%29%3B%7D」になりましたね。もちろん、このまま、元のソースと差し替えても動きません。「unescape("if%28a%3E5%29%7Balert%28%22abc%22%29%3B%7D");」とします。しかし、これでも動きません。この文字列をJavaScriptとして評価するには、evalメソッドを使用する必要があります。「eval(unescape("if%28a%3E5%29%7Balert%28%22abc%22%29%3B%7D"));」で動きます。即ち、非常に単純なJavascript「if(a>5){alert("abc");}」は「eval(unescape("if%28a%3E5%29%7Balert%28%22abc%22%29%3B%7D"));」に書き換えることが可能なのです。

ただ、ここまで読んできて疑問に思われた方もおられるかもしれません。escapeメソッドですと、日本語をエンコードした際に、ブラウザによって結果が変わってしまうことは、比較的よく知られた問題です。たとえば、「あいうえお」をescapeメソッドでエンコードしますと、IE6やFirefox 1.5.0.7では「%u3042%u3044%u3046%u3048%u304A」になりますが、Netscape 7.1では「%82%A0%82%A2%82%A4%82%A6%82%A8」になります。Netscape 7.1の方が文字通りのURLエンコード(このページは、Shift_JISのページなので、%82%A0・・・となっています。)であり、IE6やFirefoxのそれはunicodeベースのものであり、異なります。

IE6やFirefox 1.5.0.7でも、もちろんencodeURIメソッドで、いわゆるURLエンコードは可能ですが、これはIE5.5以上となっています。IE5.0や5.01(Windows)や、Mac版IEでは対応していません。また、ページ本体の文字コードにかかわらず、UTF-8でURLエンコードしてしまいます。

ですから、日本語が混じるとescapeメソッドは困ったことになります。しかし、逆にいえば、英数字だけなら問題が発生しません。

私たちは、既に、「日本語メッセージを英数字だけの文字列に変換する」の章で英数字だけのJavaScriptにすることに成功しています。ですから問題がありません。ソース5-1を元にescapeメソッドでエンコードし、それをunescapeとevalで動くようにしてみましょう。その結果が下記です。

ソース6-1

どうですか?

この難読化したソースを実際に外部ファイル化して、下記の入力フォーム・サンプルで入力チェックができるようにしています。難読化しても問題なく動作することを確認してください。

▼ よくある入力フォームとJavaScriptによるチェック(検証用サンプル)
名前:
フリガナ:
メールアドレス:
  

 このフォームで使われているJavaScript
この方法を使った場合のデメリットは、まず、ファイルサイズが増えることです。このサンプルでは、5-1に比べて、約1.4倍にもなりました。しかし、パフォーマンスを考えた場合、URLエンコードしない方が早く処理されるに違いありませんが、それは体感できるほどではありません。サーバの転送量は増えるでしょうが、数キロバイトの差であり、今日用範囲かなとも思います。

ただ、問題なのは、初心者・中級者を騙せても、上級者には通用しません。よく見ると、「charCodeAt」や「length」「return」「false」などはそのままです。これさえも消し去る方法を考えてみます。escapeメソッドでエンコードする前に、もう少し複雑にする方法を次のページでは考えてみます。いよいよ暗号化の領域に入っていきます。

  目次:

連絡先:info@broadband-xp.com
【PR】 HTML・JavaScript暗号化ソフト「SHTML」

(免責事項)このホームページの内容に起因する如何なるトラブルに対しても責任を持ちえません。必ず自己責任でご利用ください。