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

▼▽ Instant Access Menu ▽▼



So-net ADSL 12M 月額1,974円〜・月額料金3ヶ月無料(5月31日まで。)

0.序文

▼ よくある入力フォームとJavaScriptによるチェック(サンプル)
名前:
フリガナ:
メールアドレス:
  
※ ただのサンプルですので、実際には、データがサーバに送信されることはありませんが、JavaScriptによる入力チェックはなされます。

↑上のフォームは、よく見かける入力フォームです。JavaScriptによるチェックを入れています。下記のようなソースになりますが、これを題材に難読化処理のためのヒントをいくつかご紹介していきたいと思います。

 なお、本題とはずれますが、JavaScriptによる入力チェックはあくまでもユーザーに便宜を与えるものであり、ここでOKになったからといって、サーバ側のプログラム(Perl/PHP/JSP/ASPなど)での入力チェックが必須であることは言うまでもありません。

 また、実際には、JavaScriptでlengthチェックを行ったり、「フリガナ」に使用できる文字を限定させたりする処理を追加することは可能ですが、冗長になり、サンプルとしては不適なため、カットしてあります。RFCの定義上では実にさまざまな文字がメールアドレスとして使用可能ですが、ここでは半角英数字と半角ハイフン・アンダーバーのみ許可する仕様にしてあります。)


▼ 入力チェック用JavaScript・サンプルソース(難読化前)を下記に表示する(ソース1-1)

以下のヒント集では、すべて、このサンプルを題材に説明を進めていきます。

1.改行やタブをなくす・コメントを省く

プログラマーがJavaScriptを作成中には、読みやすいようにタブでインデントしたり、要所要所では改行を入れます。しかし、これは、あなたのJavaScriptを盗み出そうとする人たちにも読みやすいことを意味します。

改行している場合は、JavaScriptでは、行末のセミコロン「;」は必須ではありませんが、しかし、逆にいえば、セミコロンを使っている場合は改行を取り除くことができます。これで可読性は一気に下がります。

ただし、コメント行の改行を取り除いてしまうと、そのコメント以下のJavaScriptが全てコメント化しますので注意が必要です。コメントも同時に全てカットすれば、何十行もあったJavaScriptが文字通り1行のJavaScriptになり、とても読みにくくなります。それでも、JavaScriptは動きます。

▼ ソース1-2
どうですか? これで一気に読みにくくなりましたね。手作業で、改行を取り除いたりするのは間違いの元ですから、EmEditorや秀丸エディタなどテキストエディタの「正規表現による置換」機能を行うことをお勧めいたします。

▼ EmEditorの正規表現による置換

EmEditorでファイルを開き、以下の順番で作業していきます。順番も重要です。もちろん、万が一のためにバックアップは必ず行ってください。

1.まず、タブ(\t)を削除します。


メニューの「検索」→「置換」で行います。「\t」を「」(=何もなし)に置換します。

2.コメントを削除します。


「//.*\n」を「」(=何にもなし)に置換します(ソース中に「http://〜」などがあると、これも置換対象になってしまうため、適用には注意してください。コメントを行の先頭から書く習慣を徹底させているならば、「^//.*\n」を「」に置換するようにすれば安全です)。EmEditorの改行コードは「\r\n」ではなく、「\n」であることに注意。あくまでも「//」によるコメントだけが対象であり、「/* 〜 */」形式のコメントを消すには別の正規表現が必要です。

3.改行(\n)を削除します。


「\n」を「」に置換します。「\r\n」で検索してもヒットしません。

▼ 秀丸エディタの正規表現による置換

以下の順番で作業していきます。順番も重要です。もちろん、万が一のためにバックアップは必ず行ってください。

また、秀丸エディタの正規表現の詳細については、「秀丸エディタ徹底活用ガイド―マクロと正規表現で秀丸をパワーアップ! Ver.5対応 」などをご参照ください。

1.まず、タブ(\t)を削除します。


メニューの「検索」→「置換」で行います。「\t」を「」(=何もなし)に置換します。

2.コメントを削除します。


「//.*\n」を「」(=何にもなし)に置換します(ソース中に「http://〜」などがあると、これも置換対象になってしまうため、適用には注意してください。コメントを行の先頭から書く習慣を徹底させているならば、「^//.*\n」を「」に置換するようにすれば安全です)。秀丸の改行コードは「\r\n」ではなく、「\n」であることに注意。あくまでも「//」によるコメントだけが対象であり、「/* 〜 */」形式のコメントを消すには別の正規表現が必要です。

3.改行(\n)を削除します。


「\n」を「」に置換します。「\r\n」で検索してもヒットしません。

また、このように、タブや改行・コメントを取り除くことで、今一つのメリットがあります。それはファイルサイズの縮小です。このページを執筆している段階のプログラムで、オリジナルが2,818バイト(約2.75Kb)だったものが、この難読化処理の後、2,219バイト(2.17Kb)になりました。約21%もファイルサイズを縮小できました。

 ごくたまに、セミコロン「;」を使っている書式なのに、すべての改行を一括削除すると、JavaScriptが動かなくなるケースがあります。発生パターンは解明できていませんが、そのような時、「}」の後ろに「;」を入れると動いたことがあります。このようなこともありますので、くれぐれもバックアップは忘れないようにしてください。

なお、HTML・JavaScript暗号化ソフト「SHTML」の体験版に付属しているおまけソフト「HTMLダイエット」でも、余分な改行などを機械的に削除することができます。おまけソフトには、体験版でも制限事項は一切ありません。

  目次:

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

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

ラトゥール代官山