WebサイトのJavaScriptは丸裸です。Webブラウザーには、JavaScriptのコードを見たり、実行を止めて一行ずつ実行するステップ実行の機能が付いています。そのため、容易に何がどのように実行されるのかを調べることができてしまいます。そこで、JavaScriptの処理を隠すために、難読化が行われます。

 前回は、難読化について、また、シーザー暗号を利用して難読化するプログラムを紹介しました。この難読化の方法では、JavaScriptのプログラム自体を文字列として扱い、暗号化することで難読化しました。しかし、この方法には欠点があります。暗号化を解除したタイミングで、実行するプログラムをログに出力することで、プログラムを読むことが出来てしまうからです。そこで、今回は、プログラム自体に細工を施してプログラムを読みにくくする方法を紹介します。

変数名や文字列を工夫した難読化

 プログラムを作るとき、関数名や変数名には、できるだけ分かりやすい名前を付けるものです。コメントがほとんどないプログラムであったとしても、関数名や変数名を見ることで、だいたい何をしているものなのかプログラムの処理を理解できます。そこで、関数名や変数名を機械的に置き換えてしまうことで、プログラムの可読性を極端に下げることができます。

 例えば、以下のようなプログラムがあったとします。このプログラムは、名前を見ただけで、ゲームのスコアをサーバーに送信するものであると分かることでしょう。


function sendScoreToServer(score) { ... }
var gameScore = 10;
sendScoreToServer(gameScore);

 そこで、これを難読化するために、関数名と変数名を適当なものに置き換えます。置き換えたついでに改行も削除すると、以下のようになります。


function a(b) { ... }; var c = 10; a(c);

 変数・関数の名前に意味がないので、何をしている処理なのか分からなくなりました。また、プログラムが読みにくくなっただけでなく、プログラムを圧縮することもできました。