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

近年注目される「任意コード実行を使ったゲームの高速クリア」 74

ストーリー by hylom
脆弱性を付いたアタック 部門より
あるAnonymous Coward 曰く、

動画共有サイトなどでは、ゲームをいかに短時間でクリアするかにチャレンジしている動画が多く公開されている。これらは「TAS」と呼ばれているが、最近は「任意コード実行(ACE)」と呼ばれる手法を使った超短時間でのゲームクリアが注目されているらしい(ロックマン1のディレイエンディングTASについて:FinalFighterのブロマガ)。

任意コード実行とは、ゲームのバグや不具合を利用して通常は実行されるはずのないコードを実行させることで、通常実行できないようなプレイを行うというテクニック。先の記事では、ファミコン版のロックマン1で、画面上に存在する見えないオブジェクトを利用してメモリバンク切り替え処理に不具合を生じさせ、かつオブジェクトに対する処理を実行するプログラムのアドレスをコントローラから特定の入力を行うことで操作し、ゲームのエンディング部分のプログラムを呼び出すという手法が解説されている。

今回のTASプレイは数年にわたって研究を行った末に完成したとのことで、プレイ中のメモリ内容の観察や多くの試行錯誤を経て成功したようだ。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • 実質2週間 (スコア:5, 参考になる)

    by taka2 (14791) on 2014年05月15日 18時52分 (#2601653) ホームページ 日記

    > 今回のTASプレイは数年にわたって研究を行った末に完成した

    「ロックマンのTAS」そのものは数年にわたって探求を続けているようですが、
    今回の「任意コード実行によるエンディング到達」については、
    > 2014/4/29 SMB3の任意コード実行の機構を知る
    > 2014/5/13 ついにわれわれは感動のエンディングを見ることができた
    というわけで、実質2週間で完成させてますね。

    これまでに発見済の内容:
    ・ロックマンには、(処理落ちしているなどの要因で)ごく特定のクリティカルなタイミングで割り込みが発生すると、(メモリのバンク切替を間違えて)変なオブジェクト番号の物体が画面に現れるバグがある。
    (これが今回使用した唯一のバグ。このバグそのものは2011年に発見していた)

    ・ロックマンのコード処理では、オブジェクト番号に基づいたジャンプテーブルでオブジェクトの挙動制御ルーチンを切り替えている
    (そのため、変なオブジェクト番号の物体を登場させた場合、通常は単に「暴走」していた)

    今回の新技:
    ・上述のバグでプレイ操作で制御可能なメモリ部分にジャンプするようなオブジェクト番号を持つ物体を発生させるようなタイミングを模索する。
    ・オブジェクトが発生する丁度のタイミングで、メモリに内容が「エンディングルーチンにジャンプする」処理になるように、プレイを調整する

    というわけで、具体的には、
    ・目的のオブジェクト番号(55)のオブジェクトが発生するタイミング(時刻1929F)で割り込みが発生するように、ラグフレームを増やしたり、セレクトでメモリの数値調整を行ったりといった操作を行う。(そうなるような操作内容の探索が今回のプレイ実現への最大の難関だったようです。)
    ・そのタイミングで、ロックマンのY座標=54に、ロックバスター1番目と2番目のY座標=50と4Dになるよう調整(これによりレジスタが書き換えられ、ステージクリアルーチン実行時の「ステージ番号」判定が10になり、下記メモリのルーチンにジャンプするようになる)
    ・そのタイミングで、1コンの「左下」+2コンの「左右セレクト」を押す。(これにより、コントローラの状態を示すメモリが、「ステージクリアルーチン」のアドレスである「C460h」になる)
    ・オブジェクト番号55のオブジェクト発生、55番のジャンプテーブル実行により、
    ・以上の処理により、「ステージ番号=10」として、「ステージクリアルーチン」にジャンプし、エンディングに到達

    以上のように、あくまでタイミングと操作の調整だけですので、とんでもなく操作はシビアですが「無改造の実機ファミコンと無改造の実カートリッジ」でも、理屈の上では再現可能というという技です。
    (エミュレータで実行してはいますが、「実機で再現可能」というのは「TAS」のシバリですね)

    • by MTS (26659) on 2014年05月15日 21時12分 (#2601728) 日記
      つ参考になる

      だけど、「無改造の実機ファミコン」で「2コンの「左右セレクト」を押す」は無理では?
      (十字キー割って左右両方押すか、分解してなんとかするか、少なくとも「無改造」は無理っぽい…?)
      親コメント
      • by Anonymous Coward
        信号というかキーアドレス?的に同じかどうかは知りませんが、
        ジョイスティックなんかに1P2P切り替え機能がついてるやつがあったんで、
        ジョイスティック(2P)と IIコンでやればいけるんじゃないですかね。

        つか、IIコンにはセレクトもないよね?
        • by Anonymous Coward
          NESは1コン2コンの区別がないのでセレクトボタンについては日本仕様限定の話ですね。
          方向キー同時押しはなぜかTASではOKにされる決まりのようです。
  • 見ていてくそも面白くない一発芸というのが最大の問題の様な……

  • by Anonymous Coward on 2014年05月15日 17時14分 (#2601583)

    単にクリアするだけではなく、別のミニゲームを挿入するところまで行っちゃってます。
    スーパーマリオワールドをクッパを倒さず謎のミニゲーム経由で爆速クリア [gigazine.net]

    • by Anonymous Coward
      なるほど、そういう意味でしたか、それ。
      動画では見たんですが、元々、仕込まれていたイースターエッグ的な謎のミニゲームをプレイしているもんだと思っていました。

      メモリ書き換えクリアネタにしては、ジャンプするまでの謎の挙動が長いなとまでは思ったんですが、
      メモリ書き換えのバグがあると言うことは、元々存在しないプログラムでも実行できると言うことを意味するわけで、
      そこで延々、メモリ上に「プログラミング」をしてたんですね。
      改めて感動しました(笑)。
    • by Anonymous Coward

      分かった!
      ゲームセンターあらしの炎のコマも一見無駄な動きのように見えて、実はメモリを書き換えていたんだな!

      • by Anonymous Coward

        メモリ書き換えるのはエレクトリックサンダーですね。

    • by Anonymous Coward

      まさにマリオクラフト

  • ポケモン赤・緑のバグ技(どうぐの○番目でセレクトを押して云々)も、
    セレクトを押した時にメモリ上に格納されたバイナリデータが、ウィンドウを閉じてもリセットされないバグを利用してるらしいですね。
    どうやって見つけんだこんなもん。
    --
    /.jで検索してもスラドが出ないからbingはダメなんだよ
    • by Anonymous Coward

      エミュレータで挙動をおっかけてみて発見するんじゃないかなあ…

      • ツールとしてはそうだと思うんですが、そこに至るまでの経緯が気になる...
        ユーザのそういった操作を想定できないから私はデバッグが苦手

        #ネットもあまり普及していなかったのに、周りのみんなが同じバグを知ってるってのもすごい話だよなー
        --
        /.jで検索してもスラドが出ないからbingはダメなんだよ
        親コメント
  • 世間じゃBOTだのツールだのと言われてるけど、
    TASさんの本当の正体は超絶美少女プレイヤーなんでしょ。

  • もうスタート直後にエンディングになるように書き換えるとかでもいい気がしないでもない。

    • by Anonymous Coward

      当然それがベストですよ。
      問題はそれを「コントローラからの入力のみで」どうやってやるか。

    • by Anonymous Coward

      タイトル画面の表示なんて無駄。
      電源入れたらすぐエンディングでいいじゃん。

    • by Anonymous Coward
      スタートとエンディングの画面をキャプチャしてスケッチブックにでもおけばいい。
  • は、Tool Assisted Speedrun(またはSuperplay)が語義ですが(一応)。

    ここまでいくと、Tool to Assassinate Sanityとかなにか別のバクロニムを付けたくなりますね。

    --
    M-FalconSky (暑いか寒い)
  • by kalb (19692) on 2014年05月16日 0時26分 (#2601829)

    大昔TombRaider(シリーズ番号忘れた)でステージ序盤(たしかロンドン?)の屋根の上で
    変則ジャンプすると本来行けないはずの屋根の反対側に行けてそこはもうステージゴール寸前ってのを思い出しました。
    (謎解きゲームの過程を端折ってしまうので後からやり直しましたが)
    TombRaiderでは他にも変則ジャンプネタはあっちこっちに有ったなあ・・・
    たぶん3D-MAP上の位置判定ミスだろうから今回見たいなのとはバグの意味が違うと思うが

  • by Anonymous Coward on 2014年05月15日 17時42分 (#2601595)

    そんなに新しくない気がするが俺の勘違いだろうか…?

    • by Anonymous Coward

      日本じゃバグ技と称して、もう廃れたってぐらい昔に流行ったよね。
      なんで今頃、それも初代ファミコンソフトのプレイが話題になったんだろう。

      • by Anonymous Coward

        何か別のものと勘違いしてない?
        できればその具体的なソフト名とかバグ技の内容とか書いてほしい。

    • by Anonymous Coward
      昔の事情を知らないので教えてもらえるとありがたいです。
      具体的にどんなことが行われていたんですか?
      • by hahahash (41409) on 2014年05月15日 19時12分 (#2601672) 日記

        上のACが思ってるのとは違うかもしれんけど、
        『マップ端から不正規のメモリ領域にアクセスしてデバッグモードに強制突入する』
        とか、
        『64個目の武器や防具を装備することで不正規のメモリ領域にアクセスしてゲーム内の任意メモリを書き換える』
        とか、そういうの?

        その手のバグ利用TASは、理論上実機再現可能とはいえ通常のクリア手順とあまりに違うので、
        これまではわりと番外的なもの、という扱いだったのだけど、
        これはこれでいろいろと詰めるところがあって面白いから、
        最近は、そういうジャンルとして認められてきた。

        みたいな印象。

        親コメント
      • by Anonymous Coward

        TASにもバグ利用ありと利用なしがありまして、
        今回の件はバグ利用ありTASの一部ですね。

        たとえばSFCロマサガのホークの開始直後のレイディバグで、
        乱数調整すると2分でエンディングにテレポートできるとか
        ドラクエ3のランシールバグで乱数調整すると
        ラダトームだったかゾーマ城だったかにテレポートするとかは
        何年も前にyoutubeでみましたね。

        • by Anonymous Coward
          ツール等で乱数調整する程度のチートが「任意のコードを実行」に当てはまるのなら確かに昔から行われていましたね。
          私はまったくそういう解釈をしていなかったので、どんな具体例が?と思って尋ねてみたのですが。
          この記事で言う「任意のコードを実行」とはその程度の話なのでしょうか。
          • by Anonymous Coward

            TAS界隈では、バグ利用+メモリのアドレス利用って、悪魔城ドラキュラシリーズが有名だと思ってましたが
            (「TAS 悪魔城」で検索すると、ジョン・カビラ解説付きが検索に引っかかる世の中)

          • by Anonymous Coward

            > この記事で言う「任意のコードを実行」とはその程度の話なのでしょうか。

            そもそもあなたは前提を理解できていません。

            レイディバグやランシールバグそのものは乱数調整とは違います。
            バグにより本来想定されていない状態を作り出すことです。

            そのうえで、各種操作やウェイトの調整で特定のメモリ上の値を目的に沿った値に調整する工程が発生します。

            ここで調整対象になるメモリアドレスに格納されているものは
            実行コードでも変数でもありえます。
            それによりバグの結果が軽度から重度、ゲーム継続可能からフリーズや強制リセットまで多岐に渡ります。
            既知の多くのバグ技において、
            実行コードの部分が変更されたことによる結果だったというものがあるでしょうね。

            結局、メモリの内容を特定の状態にしたうえで、特定の処理を起こして目的を達成してるだけです。

            • by Anonymous Coward

              それらはせいぜい「任意アドレスへのジャンプ」しか出来ないんじゃないかな。
              レイディバグやランシールバグで任意コードの書き込み、つまり「コーディング」って出来るの?

        • by Anonymous Coward
          レイディバグの乱数調整方法って解析されたの?
          数万回試行して引き当てた動画は見たことあるけど

          ともあれそれは乱数調整使う普通のバグありTASだと思うが
          • by Anonymous Coward

            > ともあれそれは乱数調整使う普通のバグありTASだと思うが

            レイディバグのなんでもありな結果を見ればわかる通り、
            変数の調整だけでなく明らかに実行コードも影響範囲に入ってますね。

            いきなりエンディングはわりと頻度が高いらしく、
            「よくある結果」のうちの一つのようです。
            毎回メモリの状況を記録しながら思考させていれば
            どんなメモリ状態になったときにエンディングになるかもわかるでしょうし、
            解析結果としての動画も作れるでしょうね。
            やる人がいるかどうかだけの問題でしょう。

            • by Anonymous Coward
              バグ自体が以前から認知されているのはロックマンでも同じなんですが。
              コードを実行してEDまで持っていくという再現性100%のゲームクリア(TAS)に利用されてきた事例がなかったのなら
              「ACEに使えそうなバグが既知である」だけであって「ACEを使ったTASが古くからある」わけではないでしょう
  • by Anonymous Coward on 2014年05月15日 18時34分 (#2601636)

    シューティングならば、
    自機数をふやすとか、
    自機被弾当たり判定のバイパスとか、
    先のステージを見たいがためにやったことありますが
    古くはPC-8001の某ゲームで
    #ええ、おっさんです。

  • by Anonymous Coward on 2014年05月15日 18時51分 (#2601651)

    TASとは違うけど、将棋が棋士vs電脳で盛り上がってるこのご時世にあって
    古いゲームなんかはゲーム機vs電脳で勝負させることもやろうとすれば、できるんじゃないかと考えてしまう
    もちろんロジックでの勝負ではなく、たとえばインベーダーゲームだったら、ディスプレイ画面をカメラで撮影して認証技術を用いての反撃とか
    先日、養老孟司がテレビのなかで今の戦争なんてゲームみたいなものなんだから
    お互いの国同士がゲームで決着つければいい話しって言い切ってたのが印象的

    • by poly (42427) on 2014年05月15日 20時30分 (#2601711) 日記

      先日、養老孟司がテレビのなかで今の戦争なんてゲームみたいなものなんだから
      お互いの国同士がゲームで決着つければいい話しって言い切ってたのが印象的

      こんな風に膠着したら嫌かも
      http://park10.wakwak.com/~imustak/st/tos/23.htm [wakwak.com]

      親コメント
      • by nemui4 (20313) on 2014年05月16日 11時19分 (#2601997) 日記

        >先日、養老孟司がテレビのなかで今の戦争なんてゲームみたいなものなんだから

        ベトナム v.s. 中国 だとリアルに血なまぐさくてゲームっぽくは見えないっすね。

        #進撃の巨中国

        親コメント
    • by Anonymous Coward on 2014年05月15日 22時06分 (#2601762)

      Gガン…

      親コメント
    • by Anonymous Coward

      認証技術ではなく認識技術です
      すんません

    • by Anonymous Coward

      「遺伝的アルゴリズム グラディウス」でググって。

    • by Anonymous Coward

      昔ぷよぷよを自動プレイさせるデモを見たことがある。
      コンピュータ上でスーパーファミコンの画面(実機かエミュか覚えていない)を動画かかなり早い間隔の静止画でとりこんで、それを画像認識し、コントローラ経由で自動プレー
      もう十年以上前の気がする
      #ぐぐってみたけど、みつからなかった

typodupeerror

ハッカーとクラッカーの違い。大してないと思います -- あるアレゲ

読み込み中...