ギャラリー全開 このゲームには、ゲーム中に入手するアイテムにより ギャラリーモードが徐々にオープンになっていく要素があります 今回は文字列を参考に、このギャラリーを全開にして見ましょう。 まず、タイトルからギャラリーモードに入ってみると 見れない物はタイトルが「 ーーーーーー 」 コメントが「 ーーーーーーー 」と表示される事が分かります 同じ文字を実行ファイル内で探してみると 002B1B30と002B1B50にそれぞれの文字列が存在しています。
そのうち、002B1B30を参照先に設定してF3で探してみると 唯一0024C71Cが参照している事が分かりました良く見ると0024C708がどこかから参照されているようなので ここを参照先に設定してまたもF3で検索します すると0024C568の分岐命令の分岐先である事が分かります。
この分岐命令で分岐した場合は「 ーーーーーー 」の参照先を通過する事から 観賞できない分のギャラリーはここで処理を分岐させて「 ーーーーーー 」を表示し 観賞できる分は分岐せずに他の処理を行っていると考えられます。 そう仮定して、分岐命令で分岐しないようにして 何か変化が出ないか確かめてみましょう A024C568 00000000 ↓暗号化↓ 9CB34690 1456E7A5 このコードを使ってギャラリーモードに入ってみると 全てのギャラリーのタイトルが表示されました!・・・が 実際にはギャラリータイトルが表示されるだけで中身が観賞出来ません。 どうやらここは文字を表示するかしないかだけの判定のようなので もう少し深く探らなければいけないようです。 ここで一つ思い出すのは分岐命令で使われているレジスタです v0レジスタの値によって分岐のするしないを決定していたので そのv0レジスタの値を決定している部分を探し出し 何かヒントになる物がないかを探します。 分岐命令の少し手前のjal命令で他のプログラムを呼び出しているので まずはこのjal命令の先の処理を調べます。 するとまた他のプログラムへ飛ぶjal命令が存在します この時点ではまだv0レジスタの値を変えてる命令は無いので さらにjal命令の先、0014F200のプログラムを調べます。
0014F200からの流れを見ると各種命令が混ざっていますが 注目するポイントは最終的に得られる結果です。 0014F220のロード命令でロードした値(a1レジスタ)が 0014F244のand命令と0014F248のmovz命令に影響を与え、それによって 最終的にv0の値が0か1のどちらかに決定される処理をしています。この処理は、特定の位置にあるフラグを読み出して 「フラグが立っている(1)」か「立っていない(0)」かを判別する物で、 他のゲームでも同じような処理でフラグを読み取っています。 立っている場合は1が入るのが一般的な処理なので ここでも最終的にフラグが立っていればv0に1が入ると考えられます。 という事で0014F248のmovz命令で必ずv0に1が入るように 「addiu v0, zero, $0001」に書き換えてみましょう A014F248 24020001 ↓暗号化↓ 9C837570 3854E7A6 このコードを使用してゲームを始めてみると・・・ 見事に全てのギャラリーが差分も含めて全て見れるようになりました。 これと同じ方法でフラグが見付かるゲームは他にもあります 特に、見れないギャラリーのタイトル部やコメントに 「見れません」など一定の文字が代入される場合は 文字を表示するかどうかの判定を文字列から探す事が出来るので 否定形の言葉には注意して見て行きましょう。