【動画】【第2回】SFC風来のシレン研究報告~ACE COMBATTED nicovideo.jp/watch/sm386087… を投稿しました。 #sm38608786
2021-04-23 21:00:04乱数を固定したらどうなる?
にっくるさん
乱数00に固定したら ・攻撃・投擲は必中 ・アークは毎ターン炎を吐く ・デブートンは確定石投げ ・床落ちは全てギタン くらいか。エグい冒険だなぁ oyasen20.tripod.com/probability.ht… twitter.com/gm_ii_/status/…
2021-04-24 23:19:06【動画】【第4回】SFC風来のシレン研究報告~シン・風来のシレン nicovideo.jp/watch/sm386091… を投稿しました。 #sm38609135
2021-04-23 21:20:03試しにチートで乱数00に固定して歩いてみたらときどきフリーズする。敵の新規生成時かな。けどマップのシレンマークは点滅してる。描画だけ割り込みで動いてるんだろうか
2021-04-25 00:08:45@nicklegr 多分相当確実にフリーズはするんですよ。 回答動画でも書きましたが、問題は乱数を0にしたらゲームは動くのか?ではなく、乱数が0なゲームはどうやったらできるのか?なので、次に考えるべきは当然、じゃあフリーズを回避するための任意コードは何だろう?ということなわけです。
2021-04-25 08:47:24@gm_II_ おっしゃる通りです。数歩歩くたびにフリーズするので課題は多そうですが、フリーズの原因を洗い出していくとROM解析の精度が一段上がりそうですね。動かすだけなら乱数生成コードをただのインクリメントで上書きすればいいですが、それだとシード固定と大差ない、あとROM領域は書き換え不可ですよね
2021-04-25 12:29:07@nicklegr そうですねえ。何かがわかれば何かの応用が増えて、の繰り返しですもんね。 ROM自体はそうなんですが、もし本体にROMをコピーして動かす挙動があれば、一時的には書き換えができるはず、とは思ってます。本体の仕様によるんですけどね
2021-04-25 12:49:21@gm_II_ 通常はROMが直接マップされてるようですね。動的にバンク切り替えができれば該当コードの領域だけRAMにマップして書き換えられそうですが。できたとしてもRAMを64KB消費は現実的ではないですね…
2021-04-25 13:17:39(注:追記)ROM領域改変は無理そうですね・・・
次にやるべきことは?
TokusiNさん
風来のシレンの任意コード実行が発見されたらしい。 任意コード実行の手順が発見されたら、次にするべきことは、個別の「~~を書き換える」ではなく、「任意コード実行の手順を簡略化する方法の開発」なのではないだろうか。
2021-04-24 19:25:21@gm_II_ 任意コード実行は、TASとかの単発の目的なら実現できた時点で成功なのですが、実機に持ち込むことを考えると、「最初の任意コード実行を起点に、簡単に任意コード実行が出来る状態を作る」事が重要だと思うのですよ。
2021-04-25 09:35:26@gm_II_ 特に、「セーブデータに任意コード実行に必要なバイナリを書き込む」事が可能かどうかが重要な気がします。個別のフラグについて書き換えが可能かどうか検討するよりもまずは任意コード実行の環境を整える方法を調査するのが良いのではないかと思います。
2021-04-25 09:40:16@toku51n そこは実は重大な問題があって、というか方向性は完全にそのその通りだと思うのですが、「任意コード実行の環境」のために不可欠な、任意アドレスへのジャンプ法(今回で言うスタックポインタ変更)を探す、という作業が大変にハードルの高い(×難易度 ○モチベ維持)作業ということなんですね
2021-04-25 09:44:30@toku51n バグ罠とかバグ肉とかガイバラバグ後の階層移動とか、再三再四、可能性だけは認識されていましたが、遅々として新事実が発見できていない(少なくとも自分の)原因は、このハードルの高さにあると思ってます。
2021-04-25 09:46:52@toku51n 今回7ED602が結果を出せたのも、きっかけはブロマガに発見報告(自分の力じゃない)なのと、ちょっとコードを読んだらスタックと絡んでそう、ってことが早めにわかったからなんですよね つまりバグ調査でより良い任意コード実行を!は確実に理想ですが、進む調査と進まない調査はやっぱあると思います
2021-04-25 09:49:56@toku51n とはいえ今回のことで、任意コード実行までの心理的ハードルはかなり下がった、というか色々手法に慣れてきたので、今度こそ本格的に調査が進められるかもしれない・・・というのはあります。 なんだこいつすげー早口でしゃべってる 長々とすみません。
2021-04-25 09:51:01@gm_II_ なるほど・・・。基本的にデータだけではプログラムカウンタをRAM領域に飛ばす方法が存在しないから、そのデータ領域に飛ばす特殊な方法がどうしても必要になる・・・と。
2021-04-25 09:47:34@gm_II_ 使うと暴走するアイテムは任意コード実行の起点になる可能性は秘めているけど、大前提として、暴走する過程で制御可能なRAMにプログラムカウンタが移動するか、最低でもそこの値によって分岐する必要がありますからね・・・。
2021-04-25 09:50:45@toku51n はい、まさにその通りで、自由度の高いゲームなんでコード書く側の候補はこれまで一杯挙がってたと思うんですが、ジャンプ側は割と不透明な候補ばかりなんですよね ま、それは任意コード実行探しの宿命みたいなものな気もしますが。FF6の52回全滅みたいなバグを新しく探せ、みたいな話ですし。
2021-04-25 09:55:41@toku51n チキン肉はかなり色々試したんですがダメでした。フリーズしますね。原因は、あの辺の「矢:」が大量に消えることによるフラグ変化か、周囲のバグキャラ番号の反応による効果か、のいずれかだと思いますが、どちらにしろ調整できるような代物じゃなさそうです。
2021-04-25 09:57:52@gm_II_ そうか・・・チキンの肉は周りを巻き込むのか。直感的に周辺には重要なデータが埋まっているので全部吹っ飛ばすと復旧は難しそうですね。
2021-04-25 10:01:18@toku51n そうなんですよね。自爆の巻物でもチキンが肉になってくれるなら、まだ希望はあった気がするんですが。
2021-04-25 10:05:15