ドキュメント
/

実行環境の互換性

実行環境の互換性

target は実際の実行環境に合わせて選んでください。Browser と Node のビルドでは含まれる防御が異なる場合があり、Browser ターゲットは Node の代用にはなりません。

target

  • browser:Chrome、Firefox、Safari、Edge。
  • browser-no-eval:browser と同じですが、出力で eval() を使用しません。対象ページの Content Security Policy が eval/unsafe-eval を禁止している場合に使用します。
  • node:Node.js 環境。ブラウザー固有のオプションは無効になります(window/document を必要とし、Node では何もしないかエラーを投げるためです)。ブラウザー専用 API に依存する一部の vmSelfDefending の防御(ヘッドレスブラウザーの検知、iframe を使ったクリーンな realm の復元、インスペクター対策 / DOM のチェック)は、このターゲットでは出力されません。
  • service-worker:Service Worker のコンテキスト。window も document もなく、self グローバルも異なります。
  • userscript:ユーザースクリプトマネージャー(Tampermonkey など)のサンドボックス。vmSelfDefending の防御はそれに合わせて調整されます。VM 難読化(または Parse HTML)と難読化ツール v6.9.0 以降が必要です。
  • bytenode:bytenode で .jsc にコンパイルするコード向けです。VM 難読化(または Parse HTML)と難読化ツール v6.13.0 以降が必要です。

ブラウザー環境とドメイン

コードが実行される場所に関する宣言は、実際のデプロイ環境と一致している必要があります。browserEnvironment はビルドが実際にどのように配信されるかを記述していなければならず(Browser Environment を参照)、VM Domain Lock にはビルドを配信するすべてのドメインを列挙する必要があります(VM Domain Lock を参照)。自動化ツールやデバッガーは高度な防御を作動させることがあります。テストと CI を参照してください。

JavaScript

関数名と関数のソーステキストは、難読化によって変わる可能性があります。.name や .toString() を安定したアプリケーションデータとして使わず、明示的な識別子を使用してください。設定によって必要な場合、公開グローバルは見えるまま残ることがあります。

strictMode

strictMode: null と strictMode: false でも、明示的なディレクティブ、ES モジュール、クラスメソッドは strict として認識されます。strictMode: true はすべての入力を strict として扱います。最終的な実行コンテキストに合わせてください。難読化の後でバンドラーが strict モードを追加すると、動作が変わる可能性があります。

ビルドパイプライン

最終的な難読化の前に、TypeScript や JSX をコンパイルし、アプリケーションをバンドルしてください。comment モードがコメントを見つけられるよう、/* javascript-obfuscator:vm */ コメントはそのビルドを通して残しておいてください。Self Defending や VM Self Defending の出力を後からミニファイ、整形、その他の方法で書き換えないでください。VM 難読化と HTML 難読化ではソースマップを利用できません。