アイデアですらない妄想

こんなテクニックがありえるんじゃないか、という思いつきをぐだぐだと並べる 場所です。妄想なので実現可能かどうかはあまり考えてません。

スタック破壊

いわゆる「バッファオーバーフロー攻撃」のようなことをゲーム上でできないか、 という妄想。

FF3の 45階層バグ をデバッガで追ってみると、部屋を出入りするたびにスタックが成長し続けているこ とに気付きました。そして、スタックが溢れそうになるとマップチェンジが発生しな くなり、バグ状態になるようです。この状態からサスーン城の外に出ようとするとフ リーズするのは、スタックが壊れていて正しい戻りアドレスを取得できずに暴走して いるのではないかと思います(さらにデバッガで追うと KIL 命令を実行して死んでるっ ぽい?)。確認してませんが、FF2の45階層バグやロマサガ1のレイディバグあたりも同 様の原理ではないかと推測します。

こうしたバグは大抵は暴走かそれに近い挙動をしますが、もしプレイヤーが事前 工作によって戻りアドレスを適切な値に設定できるならば、暴走させることなく望み の動作を行わせることが可能ではないか、と思います。

さらに、プレイヤーが一定以上の連続したメモリ領域を制御でき(例えば、RPGの アイテム欄など)、しかも戻りアドレスをその領域に設定できるならば、事前にその メモリ領域を操作して「プログラムコード」に相当するものを書き込んでおくことで、 任意のコードが実行できるのではないかと思います。これができれば事実上チート以 上のことができるのでかなり強力そうです。

とはいえ、考えるまでもなく色々と制約条件が多すぎるので、ゲームでこんなこ とができるのは非常に稀だろうとは思いますが…。ただ、NESの場合であればスタッ クは 256Byte と少ない(ゲームによってはより少ししか使えない場合もある)上に、 RAM上にコードを展開してそれを動的に書き換える、などという少々トリッキーなこ とをしているゲームもあるので、もしかしたら部分的にこのアイデアが適用できる例 がある…かも?

また、仮にこれができたとしても、NESの場合はCPU(6502)の非公開命令を実行し てしまう可能性があり、その場合は実機で同じ挙動になるのか怪しくなってくるので 微妙かも(SNESならばほぼ心配ない?)。


Back