diablo_iv_loader.dllBlizzardのクラッシュハンドラは、エラーSummary: BREAKPOINTを出力してプロセスを強制終了する。ユーザーには、クラッシュダイアログ内でKernel32.dllを参照するエラーコード127として表示される。
重要な点は、クラッシュがグラフィックレイヤーの初期化よりも前に発生していることだ——D3D12、VKD3D、Vulkanデバイスの生成は一切行われていない。これにより、GPUドライバやDXVKの問題ではないことが決定的に示された。
パッチ3.1.0では、diablo_iv_loader.dllに適用されるパッカーとアンチタンパー暗号化が更新された。新しいパッカーは、アンチデバッグ/リバースエンジニアリング対策として意図的にINT3ブレークポイントを挿入する難読化手法を用いている。Windowsでは例外ディスパッチャがこれを透過的に処理するが、Wine/Protonでは失敗する。
PROTON_HIDE_NVIDIA_GPU=1、DRI_PRIME=1、DXVK設定の調整など)は無効。GPUコードが実行される前にクラッシュするためである。dstorage.dllの削除やリネーム**も、今回の問題には効果がない。唯一の修正方法は、(a) BlizzardがWineの例外処理と互換性のある方法でローダーを再パッケージすることか、(b) Wine/Protonレベルで特定のブレークポイントをインターセプトして処理するパッチを作成することである。ただしローダーは難読化されアンチタンパーが適用されているため、そのようなパッチの作成は困難で脆弱性も高い。
diablo_iv_loader.dllブレークポイントを修正するための別途緊急パッチを準備中であると発表した。7月2日時点では修正プログラムは未リリースで、バグ報告スレッドは655件の返信に達し、フォーラムのトラフィックは増加し続けている。今回の一件は、PCゲーミングにおける繰り返し発生する問題を浮き彫りにしている。開発者は互換性レイヤー(Wine/Protonなど)でのテストを行わずに、アンチタンパーやパッカーシステムを頻繁に更新する。アンチタンパーソフトウェアは非標準環境では異なる動作をするように設計されており、新しいパッカーバージョンやINT3チェックの追加といった小さな変更でも、ゲーム自体にコード変更がなくてもProtonの互換性を静かに壊してしまうのだ。
同様のパターンは、Protonバージョンを頻繁に変更した結果Denuvoのアクティベーション制限に引っかかりLinuxユーザーが締め出されるケースでも発生している。そのたびに、修正はValveが反応的にProtonにパッチを当てるか、ゲーム開発者がバイナリアップデートを提供するのを待つことになるが、どちらもユーザーが問題を発見して報告するまでは行われない。今回のDiablo IVのケースは、以前は完全に互換性があった商業的にサポートされているプラットフォームであるSteam Deckが影響を受けた点で特に顕著である。
diablo_iv_loader.dllBlizzardのクラッシュハンドラは、エラーSummary: BREAKPOINTを出力してプロセスを強制終了する。ユーザーには、クラッシュダイアログ内でKernel32.dllを参照するエラーコード127として表示される。
重要な点は、クラッシュがグラフィックレイヤーの初期化よりも前に発生していることだ——D3D12、VKD3D、Vulkanデバイスの生成は一切行われていない。これにより、GPUドライバやDXVKの問題ではないことが決定的に示された。
パッチ3.1.0では、diablo_iv_loader.dllに適用されるパッカーとアンチタンパー暗号化が更新された。新しいパッカーは、アンチデバッグ/リバースエンジニアリング対策として意図的にINT3ブレークポイントを挿入する難読化手法を用いている。Windowsでは例外ディスパッチャがこれを透過的に処理するが、Wine/Protonでは失敗する。
PROTON_HIDE_NVIDIA_GPU=1、DRI_PRIME=1、DXVK設定の調整など)は無効。GPUコードが実行される前にクラッシュするためである。dstorage.dllの削除やリネーム**も、今回の問題には効果がない。唯一の修正方法は、(a) BlizzardがWineの例外処理と互換性のある方法でローダーを再パッケージすることか、(b) Wine/Protonレベルで特定のブレークポイントをインターセプトして処理するパッチを作成することである。ただしローダーは難読化されアンチタンパーが適用されているため、そのようなパッチの作成は困難で脆弱性も高い。
diablo_iv_loader.dllブレークポイントを修正するための別途緊急パッチを準備中であると発表した。7月2日時点では修正プログラムは未リリースで、バグ報告スレッドは655件の返信に達し、フォーラムのトラフィックは増加し続けている。今回の一件は、PCゲーミングにおける繰り返し発生する問題を浮き彫りにしている。開発者は互換性レイヤー(Wine/Protonなど)でのテストを行わずに、アンチタンパーやパッカーシステムを頻繁に更新する。アンチタンパーソフトウェアは非標準環境では異なる動作をするように設計されており、新しいパッカーバージョンやINT3チェックの追加といった小さな変更でも、ゲーム自体にコード変更がなくてもProtonの互換性を静かに壊してしまうのだ。
同様のパターンは、Protonバージョンを頻繁に変更した結果Denuvoのアクティベーション制限に引っかかりLinuxユーザーが締め出されるケースでも発生している。そのたびに、修正はValveが反応的にProtonにパッチを当てるか、ゲーム開発者がバイナリアップデートを提供するのを待つことになるが、どちらもユーザーが問題を発見して報告するまでは行われない。今回のDiablo IVのケースは、以前は完全に互換性があった商業的にサポートされているプラットフォームであるSteam Deckが影響を受けた点で特に顕著である。