VM 難読化
VM 難読化は JavaScript の関数を、出力に埋め込まれた仮想マシン上で動作する独自のバイトコードに変換します。そのため、保護されたロジックが読める JavaScript のまま配布されることはありません。
VM による保護は、対象となりうる関数に適用されます。root モードでは、vmWrapTopLevelInitializers により、対象となりうる初期化式もラップして仮想化できます。現在の VM プリセットではこのオプションが有効です。VMNoFunctionsToVirtualize などのカバレッジに関する警告を確認し、機密性の高い関数を明示的に選ぶには comment モードを使ってください。
難読化はリバースエンジニアリングのコストを引き上げますが、不可能にするわけではありません。そのため、秘密情報や、最終的な判断を下すセキュリティ上の処理はサーバーに置いてください。難読化が保証できることとできないことについては、ベストプラクティスを参照してください。
お困りですか? VM 難読化が正しく動作しない場合は、VM 実行時エラーの診断で、問題を絞り込んでバグレポートを送る方法を確認してください。
このセクションの内容
実行環境の互換性
ビルドを実行場所に合わせます。Target オプション、実行時の防御、ビルドパイプラインで保持すべきものについて説明します。
VM がコードを変換する仕組み
VM が何を残し何を隠すのか、そして関数名を保護する方法です。
特定の関数を対象にする
機密性の高い関数だけを選択的に VM 難読化し、パフォーマンスを最適化します。
Register-Based VM
VM をレジスタベースの実行モデルに切り替えます。バンドルがやや大きくなる代わりに、実行時が高速になります。
Async Executor
VM を非同期で実行し、バイトコードの復号キーをバンドルに同梱せず実行時に取得できるようにします。
strict モードの互換性
VM が正しいバイトコードを生成できるよう strict モードを宣言します。
直接 eval の挙動
直接 eval() が VM 難読化を無効にする理由と、その落とし穴を避ける方法です。
VM Self Defending
VM ランタイムのための改ざん検知、コードの整合性チェック、フック対策です。
VM Debug Protection
VM で保護されたコードのためのデバッグ対策です。
VM Domain Lock
難読化した VM コードを特定のドメインおよびサブドメインに限定します。
Browser Environment
本番ビルドがどのように配信されるかを宣言し、保護されたコードがその完全性を結び付けられるようにします。
