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

▼▽ Instant Access Menu ▽▼



【OCN光/ADSL】新規・乗り換え申込み

3.既存メソッドのエイリアスを自作する。自作関数はできるだけ短く、また類推不可能な名称に

先程のページで、JavaScript内の日本語をASCII文字(英数字only)にするために、日本語をString.fromCharCode()メソッドを使って疑似暗号化したのですが、ファイルサイズが増えすぎたことが難点でした。

そこで頻出するString.fromCharCode()メソッドのエイリアス(コピー)を作成して、コンパクトにしてみます。やり方は簡単です。「msg1 = String.fromCharCode(******);msg2 = String.fromCharCode(******);msg3 = String.fromCharCode(******);」とあったとしますと、「s = String.fromCharCode;msg1 = s(******);msg2 = s(******);msg3 = s(******);」とします。

こんな簡単なコピー(代入方法)の仕方で、コピーできてしまうなんて。最初は私もびっくりでしたが、主要なブラウザですべて動きます。チェックしたブラウザは下記の通りです。
Windows
IE7 RC1IE6IE5.5Firefox 1.5.0.7Netscape 7.1Opera 9.02

Windows(古いブラウザ)
IE 4.01IE 5.01IE 5.0Firefox 1.0.1Netscape 4.75Opera 7.23

Mac(主要ブラウザ。Macユーザーの95%近い方は下記のブラウザのうち、いずれかを使用しています。)
Safari 2.04
(Tiger)
Safari 1.32
(Panther)
IE 5.23
(Tiger・Panther)
Firefox 1.5.0.7
(Tiger・Panther)
IE 5.17
(OS 9.2.2)
IE 5.0
(OS 9.2.2)
Netscape 7.1
(Tiger・Panther)

Mac(マイナーブラウザ。Macユーザーの数%は下記のブラウザを使用しています。)
Opera 9.02
(Tiger・Panther)
Firefox 2.0 RC1
(Tiger・Panther)
Firefox 1.07
(Tiger・Panther)
Camino 1.03
(Tiger・Panther)
Netscape 7.02
(OS 9.2.2)
iCab 3.03
(Tiger・Panther)

また、ついでに、「alert」もやたらと出てきますので、「a = alert;」としておきます。
ソース3-1
これにより、ソース2-2に比べてソース3-1は約7%のファイルサイズ縮小に成功しています。

しかし、これでも、ソース1-2に比べれば、1.8倍以上のファイルサイズになっています。そこで、さらにソース3-1を見てみると、「document.myForm.email.focus();return false;」がやたらと多いことに気づかされます。入力ミスがあった場合に、すぐにメールアドレスの修正をしてもらえるように、メールアドレスの入力欄にフォーカスを当てつつ、「return false;」することで、それ以上処理が進まないようにしています。

これを関数化すれば、ファイルサイズは縮小します。ただし、「return false;」まで共通だとして関数化しますと、FirefoxなどMozilla系ブラウザで期待どおりに動かなくなるため注意が必要です。「document.myForm.email.focus();」のみ関数化します。以下のようになります。

ソース3-2
こうするだけで、ファイルサイズは3-1に比べて、3-2は約5%も少なくなりました。関数名はここでは、ai()としましたが、短ければ短いほど分かりにくいです。また、大文字と小文字はJavaScriptでは区別されますので、ai()とAi()は別の関数になりますので、これを応用すれば、より分かりにくくすることが可能です。実際、某大手広告の広告配信用JavaScriptでは、この手法が用いられています。

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

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

 このフォームで使われているJavaScript
次のページでは、よく出てくるオブジェクト名(documentやwindowなど)を短い変数名のオブジェクトにコピーしてしまいます。これによりファイルサイズの縮小だけでなく、難読化が可能です。

  目次:

連絡先:info@broadband-xp.com
【PR】 HTMLソース難読化用Perlライブラリー

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

【広告】 PDF保存対策なら「PDF No Save