任意コード実行とは、以下のものを指す。
- セキュリティ上の欠陥(脆弱性)を利用して任意のコード(プログラム)を実行すること。
- 1より転じて、TAS(Tool-Assisted Speedrun, Superplay)において任意のコードを実行すること。TASVideos内ではACE(Arbitrary Code Execution)と呼ばれている。
本稿では2について記述する。
概要
ゲーム中のバグやプログラムミスを利用し任意のコードを実行させることで、エンディングを呼び出したりゲームを作ったりできる。
事前にメモリ内容を調整することでエンディングを呼び出すためのコードを準備し、バグによってコードを発動。めでたくエンディングを迎えるというのがエンディング呼び出しTASの基本的な流れである。
エンディング呼び出しコードを「ボタン入力を元にメモリに書き込み、それを実行する」という内容のコードに変えれば、メモリ全体を目一杯使うことでまったく別のゲームを構築してしまうことも可能となる。
人間によるプレイだったり、事前のメモリ調整が足りなかったりするとクラッシュ(フリーズ)するだけで終わってしまう。ただのフリーズバグのように見えたfastest crashが実は任意コード実行への入り口だった、という例も少なくない。マリオ3におけるkentora12氏の功績は大きい。
任意コード実行のトリガー
- バグブロックを叩く - マリオ3 解説
- 無を吐く、バグスプライトを生成する - スーパーマリオワールド 解説
- 梯子で上下同時押し - 星のカービィスーパーデラックス(日本語版のみ)
- コインケースバグを使う - ポケットモンスター金銀(海外版のみ)※直接エンディングを呼び出すTASではない
- ディレイオブジェクトFFテクによるオブジェクト55の生成 - ロックマン1 解説
- エーテルスーパーなどをバグ装備して攻撃 - ファイナルファンタジー6 (フィールド上52回全滅も最終入力ではないがトリガーに近い)
人力での任意コード実行が可能なバグとしては、ポケモン赤緑青のバグアイテム「5かい」を使った通称「5かいバグ」がごく一部で有名である。
任意コード実行ではない例
任意コード実行のように見えるがそうではない例をいくつか挙げる。
- テキストバグの制御によるエンディング呼び出し - MOTHER2 解説
- 主人公の名前をエスケープ文字にすることで"The End"を表示する - Sa・Ga2 秘宝伝説
- バグによる大規模なメモリ破壊?(製作者ですら詳細不明) - ファイナルファンタジー3
任意コード実行とそうでないものを見分けるのは難しく、TAS製作者による解説がないと不明なことが多い。
「エンディングに直行しているから任意コード実行だ」などと決めつけてはいけない。
関連動画
RTAで任意コード実行
関連商品
関連コミュニティ
関連項目
- 13
- 0pt