JavaScript難読化処理
|
4.よく出てくるオブジェクト名などを短くする3-2のソースを使って、さらに難読化を試みてみます。よく出てくるオブジェクト名を短い変数に置き換えます。「document」や「window」は最頻出オブジェクトです。「d = document;」「w = window;」とします。以後、出現する「document」の部分は全部、「d」で代用できます※。(※ ただし、どんなソースでも、単純な一一括変換でOKかといえば、そのようなことはありません。問題が生じることがあります。 一例をあげれば、「var url_r = window.parent.right.document.URL;」というものがあった場合、このdocumentは、このJavaScriptが実行されているページのdocumentではなくて、別のフレームのページのdocumentのことですので、単純な変換が本来はできません。そのため、「d=document;var url=d.URL;var url_r=window.parent.right.d.URL;」としてしまうと、「window.parent.right.d.URL;」のところでエラーになります。) 同様に、「document.myForm」もやたらと出てきますので、checkInput()関数の中で「dm = d.myForm;」としておきます(chekInput()関数の外で定義しても、動かないので注意が必要です。また、「dm = d.myForm;」とした場合、Netscape 4.7xでのみエラーになりましたので、今や化石となったブラウザNetscape 4.7x(ユーザーシェア約0.05%未満。2千人に1人)を考えるならば、「dm = document.myForm;」としてください)。すると下記のようになります。 実際は、これにより、ファイルサイズは実際には49バイトしか減っていませんが、実はこれよりもっと重要な意味が他にあるのです。秀丸では、キーワードを色付きで強調表示できますが、「document」をキーワードとして登録しているユーザーは、 修正前 修正後 のようにみえます。修正後のファイルでは、「document」がこのソース後半部分には出現しませんので、色がついている部分が少なくなっていることが分かります・・・ちょっと分かりにくいですね。でも、減っています。 ハイライトされるキーワードが減れば減るほど、解読が困難になります。 この難読化したソースを実際に外部ファイル化して、下記の入力フォーム・サンプルで入力チェックができるようにしています。難読化しても問題なく動作することを確認してください。
目次: |