パスワードを忘れた? アカウント作成
12021944 story
ゲーム

FF6に任意のコードを実行できる脆弱性が発見される 46

ストーリー by hylom
脆弱性と言って良いのかはおいておいて 部門より
insiderman 曰く、

スーパーファミコンの人気RPG、ファイナルファンタジー6(FF6)にて、任意のコードを実行できる脆弱性が発見された(ニコニコ動画で公開されているデモ動画)。

FF6には、本来キャラクターが装備できないアイテムを武器として装備できてしまうバグがあるのだが、この際に特定のアイテムを装備させて戦闘中に攻撃すると、メモリ内の$000Fおよび$0010部分に格納されているデータをアドレスとして参照し、対応するデータをコードとして実行してしまうという。$000Fは「戦闘開始からの経過時間をカウントするカウンターの2バイト目」で、$0010は戦闘中いくつかに変化する値が格納されているとのことだが、これだけでは任意のコードを実行できない。しかし、$000Fが0xC7、$0010が0xCEという値になっていた場合、「シャドウ」というキャラクターの名前データが格納されているメモリ領域のコードが実行されてしまうという。シャドウの名前はプレイヤーが自由に設定できるため、ここに実行したいコードを用意することで任意のコードを実行できる仕組みだ。

ただし、名前は最大6文字までという制限があるので、名前の最後に他のキャラの名前データのアドレスにジャンプする命令を入れることで長いコードを実行させるというテクニックが必要だそうだ。公開されているデモでは、戦闘終了後に適切にエンディングイベントに飛ぶような処理を行っているとのことで、10人のキャラクターを利用して任意コードを実行させているという。これらはすべてゲーム内で普通に入力可能な文字を使っているため、実機での再現が可能なようだ。

動画の最後では実行したコードが紹介されているが、エンディングイベントを呼び出すにはただイベント管理用のデータを書き換えるだけではダメで、いくつか回避処理を行う必要があるとのこと。よくもまあこのような手法を編み出したものだと感動せざるを得ない。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • ファミマガに載ってたら (スコア:3, おもしろおかしい)

    by Anonymous Coward on 2015年04月21日 14時10分 (#2801187)

    誰もがウソ技と疑わないレベル

    • by Anonymous Coward

      でもウソとかしか思えない技が複数あって、悩むんだ。

    • by Anonymous Coward

      アイテムを装備して殴ると暴走することがあるというところまでは当時の雑誌に載っていた記憶がある。

    • by Anonymous Coward

      2バイト目は1バイト目のフレームカウントが埋まるまで動かないから、つまり255/60で4秒強の遊びがあるから、人力でもなんとか再現可能になってるんだよな。これが0.1秒とかのシビアなタイミングなら無理だったと思うけど、実際に投稿されてたら認められただろうね。

    • by Anonymous Coward

      某ゲームで自分が原因のバグが裏技として掲載されていたときは切腹を覚悟しましたわ

      • by Anonymous Coward on 2015年04月22日 14時26分 (#2801929)

         おお、同じ経験の人がいた。
        でかでかと、裏ワザ(しかも調子に乗ってやってるとストップする)として載ったのを読んだ時、意識失いかけましたわ。
        で、検証したらやっぱりというか何というかメモリ破壊してたちゅー、上司に不都合報告書(BUG症状及びその対策届け)書いて出しました。
        当時はパッチ当てなんかなかったので、セカンドロットから修正入りましたが、ユーザーから「裏ワザ使えない!」って電話がお客様相談室に届いて・・・どないしろちゅーねん!!

        親コメント
      • by Anonymous Coward

        水晶の龍を買った口

  • by Anonymous Coward on 2015年04月21日 14時19分 (#2801192)

    FF7にアップグレード?

    • by Anonymous Coward on 2015年04月21日 14時29分 (#2801197)

      PS版以降はアイテム装備のバグが修正されているので、PS版へのアップグレードは回避策になる。

      親コメント
      • by Anonymous Coward on 2015年04月21日 14時38分 (#2801205)

        ハードごと買わせるアップグレードは邪道だ!

        親コメント
      • by Anonymous Coward
        データが引き継げないので、アップグレードで回避というよりは PS版にはこの脆弱性は存在しない みたいな感じですかね。
        • by Anonymous Coward

          このアドレスだとゼロページと呼ばれていた領域な気がするので、アーキテクチャが違うPSではこの手順では起きないのではないかと。
          (SFCエミュレータな作りにしていたらまた別でしょうけれど)

          • by Anonymous Coward

            だから「当時のバグを、頑張って再現しました」とかそーゆー表現になるんだな。

    • by Anonymous Coward

      うちのはFF37ですが、何か?
      # それ別なFF

  • by YO1201 (17300) on 2015年04月21日 23時47分 (#2801543)

    ポケモン赤緑にも任意コード実行が出来る「5かいバグ [geocities.jp]」というのがありますね

    • by Anonymous Coward

      ポケモン黄はチューリング完全らしい

  • by Anonymous Coward on 2015年04月21日 16時40分 (#2801258)

    部門名にも書いてあるけど。

    バグではあるんだろうが。

    ファミコンのカセットを第三者が抜き取って持ち帰れる事や、ファミコンに刺した状態でゲームを置き去りにすると他人に勝手に遊ばれる事を脆弱性とは呼ばないのと同じで、そもそもファミコン内で閉じているシステムのバグまで脆弱性扱いってのは、何か違う気がする。

    ネットワークに繋がって無くても、ファミコン自体に感染してその後に遊んだソフトの何か影響を与えられるとかまで行けば、さすがに脆弱性と呼ばれるかも知れないが。

    • by Anonymous Coward on 2015年04月21日 17時28分 (#2801287)

      立派な脆弱性かと。

      「シナリオを進行しないと閲覧することが出来ないように意図して製作されたエンディング」を任意に閲覧可能という本脆弱性は、「シナリオの進行度」という制約条件を「攻撃者が製作者の意図しないプログラムを実行させる事」で強引に突破している訳です。
      些細な異常動作・フリーズ・クラッシュ等が起きるバグから、実際に悪用可能な実証コードを製作したのは大きなパラダイムかと。

      ちなみに、任意コードを限られた文字等でエンコードするのは、現実の話題となる脆弱性を悪用した攻撃のシェルコード [wikipedia.org]で良く見かけるテクニックだったりします。

      親コメント
      • by Anonymous Coward

        脆弱性には「悪意ある第三者」が必要

        • by Anonymous Coward

          私は、悪意ある第三者は必須要件ではないと考えております。
          例えばシェアウェアのライセンスキーのクラックや、DRMの解除等は第三者が居なくても起こりえるセキュリティの脆弱性かと思いますが如何でしょう。
          侵されているのはソフトウェアの完全性や機密性ですね。

      • by Anonymous Coward

        スクウェア「仕様です。ゲーム性の一端です。」

        #祖コメが無粋だと思う

    • by Anonymous Coward

      >後に遊んだソフトの何か影響を与えられる

      「テニス」で何歩かプレイヤーを歩かせた後に電源を切らずにカセットを抜く。
      「スーパーマリオブラザーズ」のソフトに入れ変えてリセットボタンを押す。
      コンティニューで通常面以外の面へ。

    • by Anonymous Coward

      つまり、「テニスで歩いた歩数」は脆弱性案件って事ですねw

      • 「電源を入れたままカセットを抜くことができる」ところが脆弱性でしょう。
        その問題を解消した「メガドライブ」で遊ぶことをおすすめします。

        #日本版のメガドライブは、電源スイッチに連動して機械的にロックがかかり、電源稼働中はカートリッジが抜けないようになってるるのですが、
        #海外版のジェネシスは、その機構がありません。
        #「アメリカ人は大ざっぱだから、電源を入れたままむりやり引っこ抜いて壊しちまう」から、オミットしたというもっぱらの噂でしたが…

        親コメント
        • by Anonymous Coward

          スーパーファミコンも同じ構造ですね
          何故か64でなくなりましたが

        • by Anonymous Coward

          メガドラ2は電源オンのままカセットを引き抜ける構造でした。
          そのおかげでセーブデータ消されたことがあるorz

    • by Anonymous Coward

      同じ人の動画で、エンディング最後の「The End」を描画する機能文字を「表示」して終了とか、メモリ破壊でデバッグモードを呼び出してラストフロアに直行かつラストバトルをスキップとか、いろいろひどいのがある。

    • by Anonymous Coward

      セキュリティ関係ないしね。
      第三者が自由に名前を変えられるなら
      それなら脆弱だとは思うけど。

    • by Anonymous Coward

      > ファミコンのカセットを第三者が抜き取って持ち帰れる事や、ファミコンに刺した状態でゲームを置き去りにすると他人に勝手に遊ばれる事を脆弱性とは呼ばない

      それ脆弱性だと思うけど。

      • その辺はそのマシンの脆弱性ではなく(操作者を区別する機能は無いという意味での)仕様の範囲で、それを防ぐのは運用じゃないかなぁ。
        だから「ファミコンをプレイさせるゲームセンター」があったとして、その点をカバーする手段をとっていなかったら、その店を一つのシステムと見立てて「そのシステムの脆弱性」とは言えるだろう。
        でもファミコン本体の脆弱性じゃない。(弱点とは呼べるとしても)

        #ストーリーのはあくまでゲーム内で許される行動の結果、想定していない結果が見られるのだから、脆弱性orバグであって仕様の範囲ではない。

        親コメント
  • by Anonymous Coward on 2015年04月21日 18時00分 (#2801311)

    youtubeのが先だったけど、そっちのは話題にならんのよね

    • by Anonymous Coward

      話題になったから取り上げられたのではない。
      話題にするために誰かがタレこんだから取り上げられたのだ。
      さあ君もタレこもう。

  • by Anonymous Coward on 2015年04月21日 18時55分 (#2801353)

    スーパーマリオワールドにも任意のコードを実行できる脆弱性(?)があります。FF6と違って前提条件やタイミングが非常に厳密なので人間にできるとは思えませんが…
    http://tasvideos.org/2513M.html [tasvideos.org]

  • by Anonymous Coward on 2015年04月22日 3時06分 (#2801601)

    GOTO $D000 で、画面先頭から直接キャラクタコードで書いたプログラムを動かせるので、結構やりたい放題でしたね。(苦笑)

    • by Anonymous Coward on 2015年04月22日 9時45分 (#2801683)

      ネ木1 ネ木4のことかぁー!!

      http://developers.srad.jp/comments.pl?sid=344503&cid=1078384 [srad.jp]

      親コメント
    • by Anonymous Coward

      昔、MZ-80BのラリーXもどきで外周の壁を通路に変更してマシン語データ部分から飛び出して
      ハングするまでメモリ内部を消しまくるってことをしてたっけ。

      • by Anonymous Coward

        MZ-80は1バイトデータを書き換えるだけでキーが高速連打モードになったりっとやりたい放題できましたね。
        #メモリ内部を消しまくるのはわたしもやったな

  • by Anonymous Coward on 2015年04月22日 6時15分 (#2801619)

    初出はニコ動じゃなくてhttp://tasvideos.org/forum/viewtopic.php?p=404974#404974 [tasvideos.org]の方なんでは?
    機械装備で変なアイテム装備して戦闘すると暴走するのは結構有名だけど、任意コードまで結構かかったなぁ…

typodupeerror

192.168.0.1は、私が使っている IPアドレスですので勝手に使わないでください --- ある通りすがり

読み込み中...