関連記事
FF6に任意のコードを実行できる脆弱性が発見される
insiderman 曰く、 スーパーファミコンの人気RPG、ファイナルファンタジー6(FF6)にて、任意のコードを実行できる脆弱性が発見された(ニコニコ動画で公開されているデモ動画)。
FF6には、本来キャラクターが装備できないアイテムを武器として装備できてしまうバグがあるのだが、この際に特定のアイテムを装備させて戦闘中に攻撃すると、メモリ内の$000Fおよび$0010部分に格納されているデータをアドレスとして参照し、対応するデータをコードとして実行してしまうという。$000Fは「戦闘開始からの経過時間をカウントするカウンターの2バイト目」で、$0010は戦闘中いくつかに変化する値が格納されているとのことだが、これだけでは任意のコードを実行できない。しかし、$000Fが0xC7、$0010が0xCEという値になっていた場合、「シャドウ」というキャラクターの名前データが格納されているメモリ領域のコードが実行されてしまうという。シャドウの名前はプレイヤーが自由に設定できるため、ここに実行したいコードを用意することで任意のコードを実行できる仕組みだ。
ただし、名前は最大6文字までという制限があるので、名前の最後に他のキャラの名前データのアドレスにジャンプする命令を入れることで長いコードを実行させるというテクニックが必要だそうだ。公開されているデモでは、戦闘終了後に適切にエンディングイベントに飛ぶような処理を行っているとのことで、10人のキャラクターを利用して任意コードを実行させているという。これらはすべてゲーム内で普通に入力可能な文字を使っているため、実機での再現が可能なようだ。
動画の最後では実行したコードが紹介されているが、エンディングイベントを呼び出すにはただイベント管理用のデータを書き換えるだけではダメで、いくつか回避処理を行う必要があるとのこと。よくもまあこのような手法を編み出したものだと感動せざるを得ない。
スラッシュドットのコメントを読む | ITセクション | バグ | ゲーム | IT
関連ストーリー:
近年注目される「任意コード実行を使ったゲームの高速クリア」 2014年05月15日
ゲームは本題から外れた楽しみ方こそ面白い? 2009年08月11日
ゼルダの伝説のROMにソースコード 2007年11月27日
※この記事はスラドから提供を受けて配信しています。
スポンサードリンク