VM 実行時エラーの診断
以下の手順を順番に進めてください。各手順で一般的な原因を1つずつ除外してから、失敗しているコードの絞り込みに時間をかけるようにします。
1. テストと CI
まず実行時の防御(VM Self Defending、VM Debug Protection、VM Domain Lock)を原因から除外します。テストとCI の上書き設定を使ったテスト用ビルドで失敗を再現してください。テスト用ビルドが動作する場合、防御がコードを壊しているのではなく、ツールや実行環境に反応しています。
2. 実行環境の互換性
target、ビルドパイプライン、および環境に関する宣言が、コードが実際に実行される場所と一致していることを確認してください。
VM による保護は対象となりうる関数に適用されます。root モードでは、vmWrapTopLevelInitializers によって対象となりうる初期化式もラップして仮想化できます。現在の VM プリセットではこれが有効になっています。VMNoFunctionsToVirtualize などのカバレッジに関する警告を確認し、機密性の高い関数を明示的に選択するには comment モードを使用してください。
失敗するケースを、まだ再現する最小の関数と呼び出し箇所まで絞り込みます。どの関数を仮想化するかを絞り込むには comment モードを使用してください。
vmBytecodeArrayEncoding を vmBytecodeArrayEncodingKeyGetter と組み合わせて使う場合、ゲッターはビルド時に使用したキーとまったく同じキーを返す必要があり、難読化されたコードが実行される時点でそのキーがすでに設定されていなければなりません。そうでないとバイトコードをデコードできません。
実行環境の互換性 · Bytecode Array Encoding Key
3. バグレポートを送る
support@obfuscator.io にメールしてください。次の情報を多く含めていただくほど、早く修正できます。
- 完全なエラースタックトレース。言い換えずに、コンソールに表示されたとおりに記載してください。
- JSON 形式の難読化オプション。使用したオプションオブジェクト全体(またはプリセット名と上書きしたオプション)をコピーしてください。 オプション同士の微妙な相互作用はよくあるため、正確な組み合わせが必要です。
- ビルド時の警告(ある場合)。それぞれの
type、message、functionName。 - 難読化ツールのバージョン。ダッシュボードでは、エディターの下にあるバージョンセレクターに表示されています。API と npm パッケージでのビルドでは、 API の
resultまたはchunk_endメッセージのversionフィールドです。 - 実行環境。ブラウザーとそのバージョン、Node.js のバージョン、OS、実行環境で通常と異なる点(拡張機能、ポリフィル、 カスタムの組み込み関数)。
- 最小限の再現コード。理想的には、セクション 2 で絞り込んだ単一の関数と、エラーを発生させるのに必要な呼び出し箇所です。
- 元の(難読化前の)ソースコード(可能な場合)。難読化された出力は私たちにとっても読み解けないものです。入力がなければ、 自分たちのバイトコードをリバースエンジニアリングすることになります。
ソースコードが非公開の場合は、メールでその旨をお知らせください。共有していただく前に NDA を締結できます。壊れたバイトコードを生成した入力パターンを見なければ VM のバグを確実に診断できないため、このやり取りには手間をかける価値があります。
