ドキュメント
/

トラブルシューティング

/

VM 実行時エラーの診断

VM 実行時エラーの診断

以下の手順を順番に進めてください。各手順で一般的な原因を 1 つずつ除外してから、失敗しているコードの絞り込みに時間をかけるようにします。

1. 高度な防御を原因から除外する

コードの内容と結びつかないエラー、特に RangeError: Invalid array length は、多くの場合、本番用ビルドが本番用ビルドを実行してはいけない場所で動いていることを意味します。VM Self Defending と VM Debug Protection は、テストランナーなどの自動化ツール、ヘッドレスブラウザ、ブラウザ向けビルドを実行する Node.js や jsdom、DevTools を開いたブラウザで、意図的にコードを動かなくします。まず、失敗しているコードがどこで実行されているかを確認してください。

まず高度な防御(VM Self Defending、VM Debug Protection、VM Domain Lock)を原因から除外します。テストと CI の上書き設定を使ったテスト用ビルドで失敗を再現してください。テスト用ビルドが動作する場合、防御がコードを壊しているのではなく、ツールや実行環境に反応しています。

2. 実行環境の互換性を確認し、失敗する関数を絞り込む

target、ビルドパイプライン、および環境に関する宣言が、コードが実際に実行される場所と一致していることを確認してください。

ビルドが VMNoFunctionsToVirtualize などのカバレッジに関する警告を報告する場合は、VM による保護の対象範囲について VM 難読化を参照してください。

失敗するケースを、まだ再現する最小の関数と呼び出し箇所まで絞り込みます。どの関数を仮想化するかを絞り込むには comment モードを使用してください。

vmBytecodeArrayEncoding を vmBytecodeArrayEncodingKeyGetter と組み合わせて使う場合、ゲッターはビルド時に使用したキーとまったく同じキーを返す必要があります。同期的なゲッターの場合は、難読化されたコードが実行される前にキーが設定されている必要があります。Promise を返すゲッターには vmAsyncExecutor が必要です。いずれかが欠けていると、バイトコードをデコードできません。

実行環境の互換性 · Bytecode Array Encoding Key

3. バグレポートを送る

support@obfuscator.io にメールしてください。次の情報を多く含めていただくほど、早く修正できます。

  • 完全なエラースタックトレース。言い換えずに、コンソールに表示されたとおりに記載してください。
  • JSON 形式の難読化オプション。使用したオプションオブジェクト全体(またはプリセット名と上書きしたオプション)をコピーしてください。オプション同士の微妙な相互作用はよくあるため、正確な組み合わせが必要です。
  • ビルド時の警告(ある場合)。それぞれの type、message、functionName。
  • 難読化ツールのバージョン。ダッシュボードでは、エディターの下にあるバージョンセレクターに表示されています。API を直接呼び出す場合は、result または chunk_end メッセージの version フィールドです。javascript-obfuscator パッケージでは、進行状況メッセージ(Obfuscating with VM protection (vX.Y.Z)...)に表示されます。このメッセージは CLI が出力し、obfuscatePro は onProgress コールバックに渡します。
  • 実行環境。ブラウザーとそのバージョン、Node.js のバージョン、OS、実行環境で通常と異なる点(拡張機能、ポリフィル、カスタムの組み込み関数)。
  • 最小限の再現コード。理想的には、セクション 2 で絞り込んだ単一の関数と、エラーを発生させるのに必要な呼び出し箇所です。
  • 元の(難読化前の)ソースコード(可能な場合)。難読化された出力は私たちにとっても読み解けないものです。入力がなければ、自分たちのバイトコードをリバースエンジニアリングすることになります。

ソースコードが非公開の場合は、メールでその旨をお知らせください。共有していただく前に NDA を締結できます。壊れたバイトコードを生成した入力パターンを見なければ VM のバグを確実に診断できないため、このやり取りには手間をかける価値があります。