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

▼▽ Instant Access Menu ▽▼



マルチドメイン対応、ビジネス仕様 高性能レンタルサーバー 【シックスコア】


9.String.fromCharCodeメソッドを少し変形させる

ソース2-2で日本語の文字列を英数字に置き換え、String.fromCharCodeメソッドで元の文字に戻すやり方を紹介しました。この方法では、ファイルサイズが大きくなり過ぎることが一つの問題だったのですが、ここでひとつの対策法をご紹介します。

ファイルサイズが大きい理由の一つは、原文の日本語1文字(2バイト)に対して数字は5桁(5バイト)になっていることがあります。これを減らすことを考えます。ソース2-2をよく見ると、12300台が多いのが分かります。12354番が「あ」ですから、ひらがながこの辺りの数字であるためにそうなっているのが分かります。

そこで、単純に引数の数字をString.fromCharCodeで元に戻すのではなく、「あらかじめ12350を引いた番号を引数に与える形にしておいて、元に戻す関数が実行される際に12350を加えて元に戻す」という方法を考えてみます。すなわち、

ソース9-1(このままは使用できません。後でドッキングが必要です。)

のようにします。引数の数が一定でないので、「arguments.length」でループさせて処理させています。これで復元させる方の関数は良いですが、本来のcharcodeから12350を引いた引数を準備する必要があります。これは、下記のフォームを利用してください。たとえば、「あいうえお」を変換させると、「s2(4,6,8,10,12);」になります。もちろんs2とは、上のソース9-1で定義した関数のことです。

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

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

これらのことを踏まえて、第1章のソース1-2をいったん下記のように、コメント付きで変換します。

ソース9-2
のようになります。マイナスの数も出てきて、いい感じです。

そこで、このソースをさらにコメントを削除したり(第1章を参照)、余計な半角スペースを削除する(第5章を参照)、よく出てくるオブジェクト(ここではdocumentとalert。)の名称を変更する(第4章を参照)ことにより、難読化を行います。

また、12350という数字を隠したいので、これをビット演算子(第8章を参照)で表してみます。

ソース9-3
のようになります。こうすることで、単純にString.fromCharCodeを別の関数名に変更したソース5-1に比べて、約15%もファイルサイズの縮小に成功しています。

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

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

 このフォームで使われているJavaScript
まだまだ、難読化のためのヒント・アイデアはあります。次のページで、これまで紹介しきれなかったその他のテクニックを一挙ご紹介します。

  目次:

連絡先:info@broadband-xp.com
【PR】 HTMLソース難読化用PHPライブラリ「サーバサイドSHTML」

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