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://^//.*\nEmEditor\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」


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

ラトゥール代官山