Blizzardのクラッシュハンドラは、エラーSummary: BREAKPOINT。ユーザーには、クラッシュダイアログ内で
Kernel32.dllを参照するエラーコード127として表示される。
重要な点は、クラッシュがグラフィックレイヤーの初期化よりも前に発生していることだ——D3D12、VKD3D、Vulkanデバイスの生成は一切行われていない。これにより、GPUドライバやDXVKの問題ではないことが決定的に示された。
パッチ3.1.0では、diablo_iv_loader.dllに適用されるパッカーとアンチタンパー暗号化が更新された。新しいパッカーは、アンチデバッグ/リバースエンジニアリング対策として意図的にINT3ブレークポイントを挿入する難読化手法を用いている。Windowsでは例外ディスパッチャがこれを透過的に処理するが、Wine/Protonでは失敗する
。
唯一の修正方法は、(a) BlizzardがWineの例外処理と互換性のある方法でローダーを再パッケージすることか、(b) Wine/Protonレベルで特定のブレークポイントをインターセプトして処理するパッチを作成することである。ただしローダーは難読化されアンチタンパーが適用されているため、そのようなパッチの作成は困難で脆弱性も高い。
diablo_iv_loader.dllブレークポイントを修正するための別途緊急パッチを準備中であると発表した今回の一件は、PCゲーミングにおける繰り返し発生する問題を浮き彫りにしている。開発者は互換性レイヤー(Wine/Protonなど)でのテストを行わずに、アンチタンパーやパッカーシステムを頻繁に更新する。アンチタンパーソフトウェアは非標準環境では異なる動作をするように設計されており、新しいパッカーバージョンやINT3チェックの追加といった小さな変更でも、ゲーム自体にコード変更がなくてもProtonの互換性を静かに壊してしまうのだ。