ドキュメント
/

VM 難読化

VM 難読化

Highest Security

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

本番ビルドがどのように配信されるかを宣言し、保護されたコードがその完全性を結び付けられるようにします。