JavaScript難読化処理
|
無線ブロードバンドならイー・モバイル 7.アルファベットを一文字ずつずらす+evalメソッド(疑似暗号化)6-1のソースはURLエンコードされており、一目では分かりませんが、上級者に通用するかは分かりません。「charCodeAt」や「length」など、JavaScriptでキーワードとなる文字列がそのまま残っています。そこで、簡単な暗号化を考えてみます。「暗号」というととても難しく考えがちですが、簡単なレベルのものでも十分実用的です。あまり複雑にしすぎても処理能力に影響が出る可能性すらあり、あまりお勧めできません。 シーザー暗号というのをご存じでしょうか? 「原文のaをdに、cをfにする。暗号化された文章では、逆にd→a、f→cにする」。いかにも単純だ。しかし、3個ずらしているという法則が漏れなければ、なかなか復号はできません。 ここでは、「難読化処理のためのヒント 」というタイトル通り、ヒントをご紹介することに重点を置いているため、1個ずつずらすことを考えます(本当はもう少し複雑な方がいいですが、あくまでも『アイデアの提供』ということで・・・)。下記のフォームに「abc」を入力すれば「bcd」と表示されます。同様にして、第5章の5-1のソース(6-1ではないことに注意してください。URLエンコードする前のソースが必要です。)を変換してみます。ずらした変換結果をもとに戻す関数は後で考えます。 こうして、一文字ずつずらした上でURLエンコードしておいたものをさらに復元するためのコードが必ず必要になってきます。暗号化するときには、一文字ずつつcharcodeをプラスして、それをさらにURLエンコードしたのだから、復号するときは逆に、URLでコード(unescapeメソッドを使用)して、さらに、一文字ずつcharcodeをマイナスさせればOKのはずです。 この「J="hogehoge";」の部分は実際には、上のフォームで第5章のソース5-1を変換した結果を使う必要があります。上の7-1は、あくまでも元に戻すアルゴリズムが見えやすいようにするためのものです。ですから、実際には、 が求める結果となります。 (※ 本当は、「J="******";(改行)J+="******";」と分割する必要はないのですが、ホームページ上に改行のないソースをテキストエリア内に表示させる時に、一定文字数以上だとMac版FirefoxやMac版Netscapeで正しく表示できない不具合があるため、このようにしています。あくまでもこの講座の目的としてソースを表示させる上で必要な便宜上の処理であり、実際には分割しなくてもMac版FirefoxやNetscapeでもJavaScriptは動きます。) ファイルサイズも単にURLエンコードを施したサンプル6-1に比べて、約7%も減らすことができました。 1個ずつずれていることを、出だしの「t%3ETusjoh」で検証してみますと、「t」の前は「s」、「%3E」をデコードすれば「>」であり、その一つ前は「=」、「T」の前は「S」、「u」の前は「t」、「s」の前は「r」、「j」の前は「i」、「o」の前は「n」、「h」の前は「g」。「s=String・・・」となります。 この難読化したソースを実際に外部ファイル化して、下記の入力フォーム・サンプルで入力チェックができるようにしています。難読化しても問題なく動作することを確認してください。
目次: |