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

ゲームの短時間クリアのためセーブ中リセットでセーブデータを改ざんするテクニック 50

ストーリー by hylom
理屈は分かる 部門より

ビデオゲームを短時間でクリアすることを目的としたプレイは「RTA(Real Time Attack)」と呼ばれるが、スーパーファミコン向けゲーム「ロマンシング サガ2」のRTAで、セーブ中にリセットを行うことでセーブデータを改ざんするというテクニックを使い、20分でゲームをクリアすることに成功したという(電ファミニコゲーマー)。

このテクニックは「サブフレームリセット」と呼ばれており、セーブデータを上書きする際に途中でハードウェアリセットを行なって書き込みを中断させることで、セーブデータ中の一部のデータだけを書き換えるというもの。セーブデータにはデータの破損を検出するチェックサムも書き込まれているが、ゲーム内アイテムなどの状態を調整することでチェックサムによるチェックをすり抜けることができるという。リセットを利用するため、実機でも利用が可能とのこと。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2019年02月04日 17時09分 (#3559606)

    サブフレームリセットという手法を使っています。
    説明はこれが一番わかりやすい、のか?
    https://www.nicovideo.jp/watch/sm32821375 [nicovideo.jp]
    目的のデータと改ざん後にチェックサムが通るように細工をしたデータを用意して、セーブデータ記録中にリセットかけてセーブデータを改ざんする、という方法です。

    この人はちなみにこの記事の人(元記事とは別人)で、ロマサガ界では有名な狂人です。
    https://it.srad.jp/story/15/04/21/0428213/ [it.srad.jp]

    ツールを使ってロマサガ2を4分37秒でクリアしたり
    https://www.nicovideo.jp/watch/sm32978913 [nicovideo.jp]
    直後にに記録更新して4分5秒でクリアしたりしてます。
    https://www.nicovideo.jp/watch/sm33072330 [nicovideo.jp]

    最初の動画ではある程度余裕がある場合はともかく、1byte単位のリセットは人力では再現不可能(再現できたとしてその存在を人とは認めない)と言ってましたが、7byteしか余裕がないものを人力で再現してます。
    【ロマサガ2】実機サブフレームリセットでソウルスティールを覚えてみた
    https://www.nicovideo.jp/watch/sm34516488 [nicovideo.jp]
    めでたくも人ではなくなった模様。

    直後にもう少し楽なバージョンも出してきました。
    https://www.nicovideo.jp/watch/sm34564028 [nicovideo.jp]

    もはや何のゲームだか私にはわかりません。

  • 起動直後にエンディングまで飛ぶようにしたらいいんでない?

    --
    天琉陳(Teruching)
    • Re:チート有なら (スコア:5, 参考になる)

      by Nasubee (48221) on 2019年02月04日 16時15分 (#3559575) 日記

      RTAやTASでは、まず前提として
      「実機で可能であること」
      という条件が課せられています。
      関連リンクにある任意コード実行も、(かなり特殊な操作ではあるものの)実機で実行することが可能です。

      ざっくりしたイメージだと、
        バグを使って一気にレベル上げ →OK
        ゲーム中に使っていない空領域に最大経験値のモンスターを配置してレベル上げ →NG
        空領域にいたバグモンスターでレベル上げ →OK
      です。
      外から何か追加したりしてはいけないのです。

      割と混同されやすいのですが、チートは「実機では再現不可能」なので、RTAやTASでは使うことができないのです。
      サブフレームリセットでエンディングを呼べるのであれば当然取り入れると思いますが、
      まだ見つかっていません。

      親コメント
      • by 90 (35300) on 2019年02月04日 16時28分 (#3559584) 日記

        極まってくるとハードウェアの自動化テストと変わらないですよね。ダミーのコントローラを繋いだり。

        親コメント
      • by Anonymous Coward

        ICEはありですか

        • by shesee (27226) on 2019年02月04日 17時11分 (#3559608) 日記

          ICEというかTASのToolとはエミュレーターですし。
          メモリや疑似乱数配列見ながらやってるらしいです。
          RTAにはTASからフィードバックがあるから。

          実機フルICEはあったのかな。知らない。

          親コメント
          • by Anonymous Coward on 2019年02月04日 21時30分 (#3559769)

            実機を改造してTASのキー入力(電源・リセット操作含む)を流し込むTASBOTとか言うのはありますね。
            電源投入時の未初期化メモリ状態に依存する挙動や、
            電源のアナログな時間誤差、そもそもの互換性など、
            上手く再現できないことも多いようではありますが……

            親コメント
            • by Anonymous Coward

              アナログは本体だけでなく温度とか周辺環境でも動作変わるだろうしね…

      • by Anonymous Coward

        何かで十字キーの左右か上下を同時に押す操作をみて
        「それ実機じゃ無理じゃね?」と思った記憶がある

        • Re:チート有なら (スコア:3, すばらしい洞察)

          by Stealth (5277) on 2019年02月05日 11時54分 (#3560032)

          DDR 用コントローラーのようなサードパーティー製のコントローラーで、独立ボタンタイプのものがあれば操作可能です。
          DDR だと DOUBLE 譜面は左側で二つ同時とか、一つ押しっぱなしでもう一つ押下とか普通にあるので、ボタンが独立したタイプでないと無理なので。

          PS 系だとこの手のコントローラーがありますし、PS 系でリメイクが出ている作品ならこの手のコントローラーで実機プレイ可能です。

          親コメント
        • by Anonymous Coward

          ファミコンなら、ファミリートレーナーのマット使えば可能なんじゃないかな。

        • by Anonymous Coward

          1コンと拡張端子に接続したコントローラで……ってのがあったはず
          もちろん拡張コントローラが1コンあつかいじゃないと無理だけど

        • by Anonymous Coward

          初代ファミコンだと前側についている端子にコントローラー追加することで可能です。
          ベースボールでピッチャーが上下を同時押しした状態でボールを投げると、
          超スローボールが投げられたりします。

        • by Anonymous Coward

          ガワを開ければ実機でもできますよ

          • by Anonymous Coward

            何かで十字キーの左右か上下を同時に押す操作をみて
            「それ実機じゃ無理じゃね?」と思った記憶がある

            宇宙機のRCS(Reaction Control System)左右同時噴射とか、モビルスーツのアポジモーター上下同時推進とかするようなものじゃない?

            • by Anonymous Coward

              スーファミコントローラーの十字キーはボタンが個別に独立していないので、
              逆方向のボタンを同時に押すという事が物理的にできないという事だと思います

      • by Anonymous Coward

        一応コントローラーからの打ち込みのみで空領域にバグモンスターを作ってレベル上げはOKに入ります
        ただ、基本的には別部門にフォークして掲載されますが

      • by Anonymous Coward

        不正の例としてはこっちか。

        「ゲームのハイスコア記録にまつわる不正問題が続く」 https://srad.jp/story/18/02/08/1248207/ [srad.jp]
        https://japanese.engadget.com/2018/04/13/donkeykong/ [engadget.com]

        「エミュレータ使ってるからアウト」は分かるけど,よくそんなの検証できたな。

    • Re:チート有なら (スコア:5, 参考になる)

      by taka2 (14791) on 2019年02月04日 18時07分 (#3559639) ホームページ 日記

      なんか誤解してる人が多そうですが、
      今回のタイムアタックはエミュレータではなく、実機で実現している、というのが重要なポイントです。
      タイミングがシビアすぎてもう人間やめてる、というのが一番のニュースバリュー。

      今回のチャレンジの前には、「途中で電源を切る」という方法で37分46秒って記録をだしている [itmedia.co.jp]のですが、その際には、電源初期化までの時間は実機個体差と本体温度により変わるので、室温にあわせてタイミングを調節する、というとんでもないことまでやってます。

      で、今回のタイムアタックは、セーブ中リセットによるセーブデータ改竄で、本来ありえない「6人目のパーティメンバーを追加できる」ようにしてしまい、、あとは6人目以降のメンバーに対するメニュー操作によるメモリ改竄で、「エンディングを呼ぶイベントフラグ」を立てることで、エンディングに到達しています。通常のストーリー進行に従ってエンディングにまで進めたわけではありません。

      「サブフレームリセットを使って、できる限り最短の手順でエンディングを呼んだ」実例ですね。

      親コメント
      • by Anonymous Coward

        今回のほとんど同時押しらしいから、素人でも真似できるレベルらしいけどね

        • Re:チート有なら (スコア:4, 参考になる)

          by Anonymous Coward on 2019年02月04日 19時56分 (#3559703)

          サブフレームリセット自体は単純にμ㍉秒を引くだけだから、
          時間さえかければ誰でもできるにはできるよ。
          肝心なのはそこに至るアドレスやら理論を構築することであって。
          タイミングだけならFF12のザイテングラート法とか、手順を聞けば時間かければ誰でもできる。
          でもザイテングラート法を初めに見つけたやつはド変態(褒め言葉)

          親コメント
          • by Anonymous Coward on 2019年02月05日 2時35分 (#3559879)

            自分で押すタイミング決められるから格ゲーの見てから反応よりはるかに楽と、やっている人たちは主張してますね。
            思いつく時点で本当に人なのかどうか怪しい存在ですけど。

            #楽と言っても16μ秒x書き込みバイト数のタイミングをRTAで成功させてるし。

            親コメント
    • by miyabi9821 (29975) on 2019年02月04日 16時09分 (#3559572)

      それが出来るならそうしているのでは

      親コメント
    • by Stealth (5277) on 2019年02月05日 11時49分 (#3560028)

      サブフレームリセットはあくまでも目的の状態を作成するためのデータ編集技巧ですから、「セーブデータのこの部分をこの値にしたものを読み込めば、直接エンディングへ突入する」といったものが見つかれば行われるでしょうね。

      実際、SFC FF6 などではカラーパターン設定用のパレットを保持する領域からの任意コード実行でエンディングへ飛ぶパターンは既に存在していたかと。

      ただ、この手のものは「クリーンな状態からそういった状態のセーブデータを作成する」時間も含めてタイムアタックを行うものですので、「起動直後にエンディングまで飛ぶ」のは「初期出荷状態でそうなっている」ものに当たる訳で……。

      親コメント
    • by Anonymous Coward

      超精密なロボットが操作していたら可能な限界を探ろう、というお遊びなので。

      今回のロボットは、コントローラーに加えてリセットボタンにも指を掛けてる、という点が新しい。リセットボタンにそんな使い方があったのかー、言われてみれば理解できるけど思いつかなかった、すげー(笑)、という驚き。この手のネタ界隈では概念自体は大分以前から知られてたので、今回のニュースが初出ってわけではないけどね。

      突き詰めると、カセットを揺すってデータを書き換えてやれ、とかも範疇に含まれるのか、という議論になるけど。なんでも出来るのでなんでもやりました、だけじゃネタとしては面白くない。ゆすり方で百発百中で効果を発する方法とかなら面白いかも知れない。

      • by Anonymous Coward

        それはTAS。
        今回のはもともとテクニック自体は存在していたのを人力で再現したということのはず。

    • by Anonymous Coward

      似たようなことならFF6で可能
      なお下準備が物凄く大変な模様

    • by Anonymous Coward

      別ゲーになるけど、時オカAny%だと最初のダンジョンからラスボス一歩手前まで飛ぶグリッチが使われてますね
      さすがに起動直後からは見たこと無いかな

  • by Anonymous Coward on 2019年02月04日 16時20分 (#3559578)

    試したらリセットさんが出てきたぞ

    • by Anonymous Coward

      リセットさんというと、スマホ版でクビお役御免になったモグラのイメージしかない。
      ※カセットをグリグリする技はTASでできたっけ?

    • by Anonymous Coward

      出来るまでやるだけだぞ
      ニコ動だとおやつさんが丁寧に理論的に説明してますが
      やってることは根性論に近い

      • by Anonymous Coward

        あくしろよ

      • by Anonymous Coward

        お題によっては1回30分とか掛かる作業を何回も繰り返しやっていて、
        1桁ですめば「楽だったな」とかコメント付いてるからね。
        で多いと100回超えていてたり、繰り返すだけじゃ無理そうなので
        乱数調整(人力)しますと根性の後に理屈がくるあたりとか
        振り切れてるよね。

    • by Anonymous Coward

      実行クロック数みながらソフトでやるからね。

      #実機でできる(やれるとは言ってない)

      • by Anonymous Coward

        RTAですから実機で実際にやってのけたわけで

        • by Anonymous Coward

          実機でできるしやったけど、入力には別の機械の補助や支援を要するってのもあるからまあ

  • 同じようなことができた記憶が。
    別データへの上書き保存中にリセットだったかな?

  • by Anonymous Coward on 2019年02月04日 22時38分 (#3559813)

    クリア方法自体がこのサブフレームリセットの駆使によるバッファオーバーフローという実にアレゲなネタなのだがそこへの食いつきはいまいちですね
    まあフラグ書き換えはありきたりといえばありきたりなのでしょうがないかも

    • by Anonymous Coward

      バッファオーバーフローによる早クリアはマリオとかで既出ネタですし

    • by Anonymous Coward

      バグありバグ無しかどうかのカテゴリーははっきり分かれてるからねこういうのって
      そもそもバグありバグなしでゲームのたどるルートが大幅に違う場合もあるし(特にロマンシングサガは進行ルートの自由度が非常に高い)
      今回のバグありで最速目指す人はルート詰めてこのバグを何とか再現して最速タイム目指す戦いが始まるよ

  • by Anonymous Coward on 2019年02月04日 16時35分 (#3559586)

    あれはTASか…。

  • by Anonymous Coward on 2019年02月05日 15時49分 (#3560150)

    プレイ時間見せればカーチャンも納得

    • by Anonymous Coward

      困った、あと40分もある
      どうしよう?

typodupeerror

長期的な見通しやビジョンはあえて持たないようにしてる -- Linus Torvalds

読み込み中...