VM Self Defending
視聴する
Obfuscator.io Advanced Defenses: Self-Defending, Debug Protection, Domain Lock
vmSelfDefending オプションは、多層的な改ざん検知、コードの整合性チェック、フック対策、リバースエンジニアリング対策を VM ランタイムに追加します。vmDebugProtection と組み合わせると、手作業による解析と AI を活用した解析の両方が大幅に困難になります。
このオプションは vmBytecodeArrayEncoding を強制的に有効にし、VM の実行にオーバーヘッドを加えます。自分のホットパスで測定してください。
各検知がどのように反応するか、また単に動作を壊すだけでなく検知をバックエンドに報告する方法については、VM 防御のテレメトリと反応で説明しています。vmSelfDefending は、automation、debugger、tamper、integrity の反応カテゴリーで検知を発行します。
推奨:最大限の保護を得るには、vmDebugProtection、vmBytecodeArrayEncodingKey、vmBytecodeArrayEncodingKeyGetter と併用してください。
実行環境の互換性
環境の検知に敏感です
このオプションは難読化されたコードを対象の実行環境に結び付け、高度なブラウザーフィンガープリントを使って自動化ツールを検知します。このオプションで保護されたコードは、次の環境で実行すると意図的に動作しなくなります。
- ヘッドレスブラウザー(ヘッドレス Chrome/Chromium、PhantomJS)
- ブラウザー自動化ツール(Puppeteer、Playwright、Cypress、Selenium/ChromeDriver、Nightmare)
- Node.js(
targetがbrowserに設定されている場合) - jsdom などのサーバーサイドの DOM エミュレーション
- ブラウザーのネイティブ組み込み関数がフックまたは置き換えられている環境(
browserEnvironment.hookedBuiltinsで宣言している場合を除く)
通常のブラウザー(Chrome、Firefox、Safari、Edge)では、iframe 内、ブラウザー拡張機能(コンテンツスクリプト)、Web Worker で読み込まれた場合も含め、コードは正しく動作します。
target は実際の実行環境に合わせて選んでください。Browser と Node のビルドでは含まれる防御が異なります。node ターゲットはブラウザー専用 API に依存する防御を省き、Node 上で実行した browser ビルドは上記のとおり動作しなくなります。
browserEnvironment.hookedBuiltins を true に設定すると(v7.15.0 以降)、Self Defending は、正当な理由でネイティブ組み込み関数を JavaScript のラッパーに置き換えているランタイムを、改ざんとして扱わずに許容します。そのため、保護されたコードはそのような環境でも動作します。これは組み込み関数のフック検知を意図的に緩めるもので、VM の仮想化、デバッグ対策、整合性保護には影響しません。同じオプションの transport フィールドは、ビルドを配信に使われるスキームに結び付けます。
Self Defending は自身の出力の整合性をチェックするため、難読化後のコードをミニファイ、整形、その他の方法で書き換えないでください。そうしたツールは、難読化の前にソースコードに対して実行してください。
テストと CI
これらの防御は、自分自身のエージェント、自動化ツール、デバッガーに対しても作動します。実行が停止したり、無関係なエラーが発生したり、誤った結果が生じたりする場合があります。このオプションは自動化された解析を防ぐために設計されており、どの自動化フレームワークとも安全に併用できません。そのため、機能テストは vmSelfDefending を無効にした別のテスト用ビルドに対して実行してください。そのビルドで上書きするオプションの一覧はテストと CI にあります。
