2025/04/28 11:29 Deep dive into how DOS games do copy protection by making themselves unwinnable

ロボ子、今日は1991年のゲーム「The Games: Winter Challenge」の解析について話すのじゃ!

博士、1991年のゲームですか!ずいぶんと古いゲームですね。どのような内容なのですか?

このゲーム、色々なバージョンがあって、コピープロテクトも色々仕込まれてるのが面白いところなのじゃ。特にスキージャンプのイベントに注目して、理論的な最適解を追求したらしいぞ。

コピープロテクトですか。オリジナル版はコードホイールを使っていたそうですね。GOG版は除去されているとのことですが、不具合があるという苦情も出ているんですね。

そうそう、GOG版はクラックがうまくいってないみたいじゃな。1996年のUS版には、公式のクラックが付いてたらしいぞ。親切設計じゃな。

実行ファイルもたくさん種類があるんですね。オリジナル版、ハードディスクインストール版、GOG版、クラック版...。そんなに違うものなんですか?

ハードディスクインストール版は、グラフィックモードとか高速ローディングの有無で違いがあるみたいじゃな。昔のゲームは色々工夫されてるのじゃ。

バイナリ解析もされたんですね。実行ファイルはLZEXEで圧縮されていて、Fabrice Bellardさんのユーティリティで解凍できるんですね。

そう、解凍されたバイナリは168kBで、バージョン間で同じらしいぞ。ゲームはオーバーレイ技術を使っていて、`int 3fh`でコードを動的にロードしてるのじゃ。

リソース抽出もされたんですね。画像、メッシュ、音楽、効果音、コードオーバーレイなど、色々なものが埋め込まれているんですね。

リソースは`MB`というマジックナンバーで識別できるらしいぞ。高速ローディング版では、一部リソースが非圧縮で提供されてるみたいじゃな。

オーバーレイの統合も試みられたんですね。コード解析をしやすくするために、オーバーレイを単一の実行ファイルに統合したんですね。

`int 3fh`割り込みを直接関数呼び出しに置き換えたのはすごいじゃろ?

確かに!デバッガー対策もされていたんですね。`NU-MEGA`、`SOFTICE1`、`TDHDEBUG`という名前のファイルが存在するかどうかをチェックするなんて、手の込んだことをしていますね。

タイマーチップを利用した2段階のデバッガーチェックもあるらしいぞ。昔のゲーム開発者も色々考えてるのじゃ。

コードホイールだけでなく、ゲーム全体に隠されたコピープロテクトチェックが存在するんですね。チェックに失敗すると、ゲームプレイに影響が出ると...

そう、スキージャンプの飛距離制限とか、スピードスケートで壁にぶつかるとか、色々ペナルティがあるのじゃ。Razor1911のクラックだけが、完全に回避できたみたいじゃな。

救済策として、隠されたコピープロテクトチェックを除去するためのパッチツールも提供されているんですね。親切設計です。

結局、スキージャンプイベントの解析は、コピープロテクト関連の調査に時間を費やして、別の機会になったみたいじゃな。残念じゃ。

それは残念ですが、コピープロテクトの歴史を垣間見ることができて、興味深い内容でした。ところで博士、このゲーム、博士が生まれた頃に発売されたものですか?

むむ、ロボ子よ。私を誰だと思ってるのじゃ?生まれたてのホヤホヤの赤ちゃんじゃぞ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。