VM 実行時エラーの診断
VM 難読化されたコードが実行時に例外を投げます。それは RangeError: Invalid array length かもしれませんが、難読化後にのみ
現れるその他の予期しないエラーにも、同じチェックリストが適用されます。以下のステップを順番に進めてください。最初の
ステップが圧倒的に多い原因を捕らえ、残りは本物の不具合を絞り込みます。
ステップ 1 - target オプションと実行環境を照らし合わせる
Invalid array length や類似のエラーの最も多い原因は、target オプションとコードが実際に実行される環境との不一致が、
vmSelfDefending: true と組み合わさっていることです。
これが発動する環境:
- Node.js(
nodeで難読化されたバンドルを直接実行する場合) - ヘッドレスの Chrome / Chromium、PhantomJS
- Puppeteer、Playwright、Cypress、Selenium / ChromeDriver、Nightmare
- jsdom やその他のサーバー側 DOM エミュレーション
- ネイティブのブラウザ組み込み関数がフックまたは置き換えられている環境
実行環境がこのリストに含まれる場合、そのエラーは不具合ではなく、設計どおりに保護が機能しているものです。あなたのケースに 合った解決策を選んでください:
- 意図的に Node.js で実行している場合(サーバー側スクリプト、CLI ツール、Electron のメインプロセス): 難読化時に
target: 'node'を設定します。セルフディフェンディングのレイヤーが、ブラウザではなく Node に合わせて自身を調整します。 - 難読化されたビルドに対して自動テスト / E2E を実行する場合(Cypress、Playwright、Puppeteer、Selenium):
vmSelfDefending: falseの テスト用ビルドを別途作成します。このオプションは自動化を壊すために設計されており、個々のツールを ホワイトリストに登録することはできません。互換性のない環境の完全なリストは VM セルフディフェンディング を 参照してください。 - 本物のブラウザで実行しているのにエラーが出る場合: 拡張機能、devtools スクリプト、ラッパーページがネイティブの 組み込み関数(
Array、Function.prototype、JSONなど)をフックしていないことを確認してください。不具合として扱う前に、 クリーンなプロファイルで再現してください。
ステップ 2 - 単一の関数に絞り込む
ステップ 1 で解決しなかった場合、エラーは変換された特定のコードの中にあります。
vmTargetFunctionsMode: 'comment' に切り替え、エラーが再び現れるまで
一度に 1 つの関数へ /* javascript-obfuscator:vm */ を追加していきます。エラーが戻ってきたときにマークしていた関数が
原因です。それがサポートに送る最小限の再現例になります。
ステップ 3 - バグレポートを送る
target / セルフディフェンディングの不一致でないことを確認し、絞り込んだ関数を手に入れたら、
support@obfuscator.io にメールしてください。以下の情報を多く含めるほど、より早く修正できます:
- エラーの完全なスタックトレース。コンソールに表示されるとおり、正確に。言い換えではなく。
- 難読化オプションを JSON で。 使用したオプションオブジェクト全体(またはプリセット名と上書き設定)をコピーしてください。 オプション間の微妙な相互作用はよくあるため、正確なセットが必要です。
- 難読化ツールのバージョン - エディタの右下隅に表示されます。
- 環境 - ブラウザとそのバージョン、Node.js のバージョン、OS、実行環境で異常な点があれば何でも(拡張機能、ポリフィル、 カスタムの組み込み関数)。
- 最小限の再現 - 理想的にはステップ 2 の単一の関数と、エラーを引き起こすために必要な呼び出し箇所。
- 可能であれば元の(難読化前の)ソース。難読化された出力は私たちの側でも不透明です。入力がなければ、私たちは 自分たちのバイトコードをリバースエンジニアリングすることになります。
