みなさんこんにちは!Kotonoです。
今回はJavaScriptにおける「コードの難読化」について解説していきたいと思います。
この記事では
・コードの難読化とは
・難読化を行うメリット
などといった基本的な内容から
・難読化を行う方法
・主なツールの紹介
など、より発展的な内容に関してもわかりやすく解説していきたいと思います。
コードの難読化とは
みなさんはコードの「難読化」と聞くと何を思い浮かべますか?
難読化とはその名の通り、コードを分かりにくい形に変換し、読み手に理解し辛くする事です。
変換前のコードと同じように作動するので、プログラム自体の機能には変更ありません。
この「難読化」というプロセスは、JavaScriptのみでなく様々なプログラミング言語においても応用されているものなので、知っておくと役に立つかもしれません。
難読化を行うメリット
さて「難読化」が何か理解したところで、難読化を行うメリットを考えてみましょう。
まずは、ソースコードを厳重に管理する必要がある場合などに、難読化を行うと良いでしょう。
例えば、盗難防止のためにソースコードの公開を避けたい場合などに便利です。
コードの目的の隠蔽や、リバースエンジニアリングの阻止にも役に立ちます。
リバースエンジニアリングとは、ソフトウェアを厳密に分析しソースコードなどの情報を明らかにする行為です。
また、難読化は単に娯楽として行われていることもあります。
この場合、復元することでゴールするゲームのような扱いです。
難読化と暗号化の違い
難読化は暗号化と度々混同されますが、難読化は暗号化とは別の意味を持ちます。
難読化は本来のソースコードから読みにくい別のより複雑な形へ変換されることです。
暗号化も本来のソースコードから別の形への変換のことですが、「読みにくい」ものへの変換というよりも「完全に読めない」ものへの変更と認識すると良いでしょう。
実際、暗号とはソースコードを暗号した人のみが所有する鍵で解読可能なのです。
難読化は読みづらい複雑な形に変換しますが、「鍵」という概念は存在しません。
英語では難読化はobfuscation、暗号化はencryptionと呼ばれています。
難読化と圧縮の違い
難読化はコードの圧縮とも違います。
圧縮はその名の通り、コードのボリュームを縮小する事です。
例えば、いらないコメントなどを省いたり、スペースをなくしたり、改行を少なくしたり、変数の名前を工夫したりすることでコードの圧縮が行えます。
圧縮されたコードはオリジナルのコードと同じように作動しますが、より軽く速いコードです。
英語で圧縮はminificationと呼ばれています。
実際、minificationというワードで検索してみると、コードを圧縮化するツールなども多数存在することが確認出来ます。
難読化を行う方法
では、実際に難読化を行う方法をご紹介します。
難読化は主にツールを使用して行います。
今回はオンラインで使用可能なツールを以下のセクションでご紹介します。
主なツールの紹介
オンラインでJavaScriptコードの難読化を行うには、以下のツールを使用するのが一般的です。
・Javascript Obfuscator
初心者にも使いやすく、一番普及しているツールのひとつです。
・jjencode
このツールも普及度が高く、デコーダー(復元)が存在するのも人気の要因の一つです。
・ /packer/
シンプルな作りで、なおかつデコーダーも存在するので使いやすいです。
まとめ
今回はJavaScriptにおける「コードの難読化」について説明しました。
難読化というプロセスはJavaScriptのみならず、様々なプログラミング言語でも普及している概念なので、知っておいて損はありません。
みなさんもこの記事を通して、「難読化」に関する知識をどんどん深めていってくださいね。