最大値検索1とは違うソフトでの解析も紹介します。 今回の題材はDDR MAXです このゲームでのスコア最大値は、プレイ画面を見た感じでは 3B9AC9FF(999999999)であると考えられるので、 下4ケタのC9FFで数値検索をしてみると何箇所かヒットしますが その中でも0015DE4Cの周辺に注目です。0015DE44でv0+003Cのアドレスから数値をv1へ読み込み 0015DE48と0015DE4Cでa0レジスタに3B9AC9FFを格納し 0015DE50でv1とa0の数値を比較しています ここまでは最大値検索-1と同じですが、ここからが少し違います 比較結果により0015DE54で分岐するしないが決まります 数値が3B9AC9FFより多ければ分岐せず、少なければ分岐するようになっています これは最大値チェックとは?で例で書いた物と同じ様なものです。 もし、分岐しなかった場合に 0015DE60の命令でv0+003Cのアドレスの数値に3B9AC9FFが 書き込まれるのを見るとまさに最大値チェックであると考えられます 分岐しなければ最大値に修正されるので 0015DE54の分岐命令を潰してしまえば 常に3B9AC9FFが書き込まれるようになります 実際にこの分岐命令を潰すプログラムコードを作り 動作するかを試します 2015DE54 00000000 を暗号化して動作確認をすると・・・ スコア加算時にスコアが最大になりました これでスコア即MAXの完成です。