既存メソッドのエイリアスを自作する。専用ソフトを使用するこのホームページはJavascriptを多用しているため、javascriptがoffのままでは十分にご利用になれません。接続料無料キャンペーン実施中!(5月31日まで)2.日本語メッセージを英数字だけの文字列に変換する他人が書いたJavaScriptを解析する際に、その取っ掛かりとして、エラーメッセージを中心に見ていくことにより、プログラムの特定個所が、どのあたりの処理にかかわるものであるかを類推する方法があります。先程のページのように改行がないソースに仕上げても、「名前を入力してください。」「フリガナは必須です。」などの日本語メッセージは丸丸残っています。これでは、この日本語メッセージを中心に、どの「{」と「}」が呼応するかなどを読み解かれ、改行・インデントつきの読みやすいソースに「逆戻し」されやすくなります。そこで、これらの日本語をASCII文字(英数字only)にすることを考えます。String.fromCharCode()メソッドを使います。「あいうえお」という文字列は、「String.fromCharCode(12354,12356,12358,12360,12362);」と表すことができます。「alert("あいうえお");」は「msg=String.fromCharCode(12354,12356,12358,12360,12362);alert(msg);」と変換することができます。このような日本語変換は、比較的簡単なJavaScript(charCodeAt()メソッドを使用。)で可能ですが、自分で作るのが面倒な方は、下記のフォームを利用してください。下記に、「名前を入力してください。」を入力して変換してください。「String.fromCharCode(21517,21069,12434,20837,21147,12375,12390,12367,12384,12373,12356,12290);」となりましたね?変換したい文字列を入力してください。変換結果が表示されます。このようにして、他の日本語メッセージも変換できます。ここで、もう一ひねりして、それぞれの日本語エラーメッセージを別の変数名に写しておく際に、単純に連番をふると分かりやすくなりますので、わざとmsg10、msg8、msg11、msg5・・・というふうに数字が前後無茶苦茶になるようにします。日本語メッセージを一個所に集めておき、どのメッセージ(すでに英数字だけになっています。)がどこに入るのか容易には分からないようにします。自分でも分からなくなり、メンテナンスがとても面倒になりますので、プログラムの作成段階では、どの変数がどのエラーメッセージに対応するかをコメントで書いておいて、サーバに公開する前に、先程のページで紹介した方法でコメントを一括削除するのがいいでしょう。順番に気をつけないと大変なことになりそうです。ソース1-2を一旦次のように書き換えます。ソース2-1//メールアドレスの一文字目に@が来るのは変です。//メールアドレス中で「.」が連続するのは変です。//フリガナは必須です。//メールアドレスに、@が二つ以上あります。メールアドレスとして不適切です。//入力チェック・クリアです。//メールアドレスを入力してください。//メールアドレスに、「.」がひとつもありません。メールアドレスとして不適切です。//メールアドレスの中の最後の「.」(ドット)の後に一文字しかないというのは変です。「.jp」「.com」など、最低でも2文字以上存在するはずです。//」は、メールアドレスとして不適切な文字です。//メールアドレスの一文字目に「.」(ドット)が来るのは変です。//メールアドレスの末尾に「.」(ドット)が来るのは変です。//名前を入力してください。//メールアドレス中で、@の直前に「.」が来るメールアドレスはご利用になれません。//メールアドレスに、「.」がひとつもありません。メールアドレスとして不適切です。//メールアドレスに、@がひとつもありません。メールアドレスとして不適切です。//メールアドレスの末尾に@が来るのは変です。false;}alert(msg19);}ここから、コメントを削除し改行を削除(テキストエディターを使った方法はこちらをご参照ください。false;}alert(msg19);}どうですか?この難読化したソースを実際に外部ファイル化して、下記の入力フォーム・サンプルで入力チェックができるようにしています。難読化しても問題なく動作することを確認してください。このフォームで使われているJavaScript(クリックするとダウンロードもしくはソースが表示されます。うまくいかない場合は、右クリック(コンテクストメニュー表示)で、リンク先をファイルに保存してください。)この方法を使った場合のメリットとして、「敵」に分かりにくくなるだけでなく、日本語が一切出現しないので、Shift_JISで保存することができることです。普通、EUC-JPのホームページなら外部ファイルの文字コードもEUC-JPで保存したり、UTF-8のホームページなら外部ファイルの文字コードもUTF-8の文字コードにしたりしますが、バグを抱えたブラウザによっては、外部ファイルの文字コードが特定の文字コード以外だと文字化けしたりとか、ややこしい問題が起こることがあるのですが、それがなくなるのはメリットですね。実は、このString.fromCharCodeメソッドを使った難読化は、Flashのスクリプト言語であるActionScriptの難読化にも利用可能です。swfファイルは、バイナリーファイルですし、JSファイルのように丸見えではないはずなのに、難読化がなぜ必要かと思われます方もおられるでしょうが、難読化は今や必須とも言えます。ActionScriptを解析できるソフトが販売されています。闇でではなく、VectorやAmazonなどでも入手できます。swfファイルだと「(AcitionScriptの)ソースは見えない」と思って、パスワードやデータファイルの場所など大切な情報を書いてしまっている場合がありますので、なおさら気をつけないといけないです。)逆に、この方法を使った場合のデメリットは、まずデバッグ・メンテナンスがしにくくなることです。できるだけ完成していて、しばらくはいじくる必要のないJavaScriptに対して施す必要があります。想定しているエラーパターンを全てチェックするために、想定しているエラーメールアドレスのパターンをまとめておき、すべてのケースで、想定したメッセージが表示されることをチェックするようにします。順番を入れ替えたりしているうちに、自分でも思わぬミスをしている可能性があります。いま一つのデメリットは、ファイルサイズがとても増えることです。このサンプルでは約2倍にもなりました。そこで、ファイルサイズの減量を考えます。目につくのは、String.fromCharCodeが何度も登場するようになりましたので、これをもっと簡単で短い名称に変えられないかを考えます。目次:改行やタブをなくす・コメントを省く日本語メッセージを英数字だけの文字列に変換する既存メソッドのエイリアスを自作する。HTML・JavaScript暗号化ソフト「SHTML」(免責事項)このホームページの内容に起因する如何なるトラブルに対しても責任を持ちえません。自己責任でご利用ください。