JavaScript の便利な難読化ツール「JavaScript Obfuscator Tool」

JavaScript は各々のローカル環境から実行させる言語のため、ブラウザの開発者ツール等からソースを見られるとリバースエンジニアリング及びコードを改ざんされる危険性があります。
kintoneでもJavaScriptによるカスタマイズが可能なため、同様の危険性をはらんでいます。 

そこでこれらの一般的な対策としてJavaScriptの難読化をする方法を調べてましたところ、JavaScript Obfuscator Toolというものが好評でした。

しかし、全て英語であまり日本語で書かれているものも見つからなかったので、意訳したものを共有します(間違っていたらコメントくださいm(_ _)m)

使い方は簡単で、[Copy & Paste JavaScript Code]にコードを張り付けて[Obfuscate]ボタンをクリックするだけ!

設定値を変更することでより解読が難しいコードにできます。

各設定値の説明は意訳ですが、ざっくり下記になります。

  • _ Compact Code: _ 改行、半角スペース、全角スペース、TABを削除してコンパクトにする。
  • _ Mangle Variable Names:  _
    チェック有:変数をa,bcといった単純な文字列に置き換える
    チェック無:変数を0x123456のようなでらためな文字列に置き換える
  • _ Self Defending: _ チェックするとJavaScript beautifier等のフォーマットを整形するようなツールを使用してもコードが動かないようにしてくれる
  • _ Control Flow Flattening: _ 制御フローの平坦化(?) Control Flow Flattening Thresholdの数値を0~1の範囲で指定でき、数値をあげるほど、単純な構文をif、switch、while、ブロック文などで複雑にしてくれるようです。ただし複雑にしすぎると処理スピードが遅くなるので注意。
  • _ Dead Code Injection _: 無意味なコードをブロックごと追加してリバースエンジニアリングを難しくします。Dead Code Injection Thresholdの数値を0~1の範囲で指定でき、数値をあげるほど、こちらも複雑になるようです。
  • _ String Array _: var m = “Hello World”; のような文字列を全て var m = _0xb0c3(‘0x1’) のような関数から呼び出す形式に変換し、文字列は配列に格納されます。
    _ Rotate String Array _: 文字列を配列に格納する場所をランダムに(?)変えます。
    _ Encode String Literals _: 文字列をエンコードします。
    _ String Array Threshold _: 設定値変えてもあまりコードに変化なかったのでちょっと不明。。コードの量が多いときは数値を減らした方が良い?
  • _ Disable Console Output _: console.log, console.info, console.error, console.warn を空の関数で置換して無効化させる。
  • Debug Protection: コード実行中に開発者ツールを開くとdebugger を繰り返しコールさせ、フリーズさせる。
    _ ** Debug Protection Interva** _l: チェックするとコード実行後に開発者ツールを開いた場合でもdebugger を繰り返しコールさせ、フリーズさせる。
  • _ Domain Lock _:特定のドメインでしかコードを実行できないように設定する。
  • _ Reseverd Names: _ここで指定した変数名は難読化で書き換えさせない。
  • _ Source Map:  _
    _ ** Source Map Base URL:** _
    _ ** Source Map File Name:** _
    難読化したJavaScriptのコードをデバッグするのに便利な項目群。詳細はJavaScript Obfuscator Toolリンク先のSource Map項目参照。
  • _ Seed _: 0を指定すると、変換する度にコードの出力結果が変わる。0以外を指定すると結果が固定になる。

以上です。上記の難読化を行えばリバースエンジニアリングの対策として問題なさそうです:)

加えてソースコードに著作権表記を追加しておけば盤石でしょう。

 

同ツールはnode.jsやwebpackにも対応しているようなので、是非一度お試しください!

 

※2017/09/08 追記:
Web版のhttps://javascriptobfuscator.herokuapp.com/ ですが、キャッシュが残っていると難読化後のファイルがおかしな状態になりました。
Web版のツールを扱う場合、Chromeのシークレットウィンドウ等で扱った方が良さそうです。

 

○参考した外部ページ:

JavaScript Obfuscator 

https://github.com/javascript-obfuscator

 

JavaScript難読化ツールの紹介と比較

http://kagasu.hatenablog.com/entry/2017/03/30/194024

 

Electronと秘匿化・難読化

http://qiita.com/re-fort/items/9c315894d96ee2b664c3