CODE SQUARE -ゲーム改造コード-

たぶん更新しないゲーム改造コードのページ - 改造コードの置き場 -



アクセスアップ・SEO対策・検索エンジン登録

« 符号拡張 | メイン | デバッグモードサーチ法 マップ型編 »

デバッグモードサーチ法 フラグ型編

 フラグ型とは、特定のアドレスに「0」「1」とフラグを立てることで、デバッグモードに入るタイプです。
 フラグ型の場合、まずデバッグモードがあるか確認します。まず、文字列検索で、「デバッグ」「テスト」「セレクト」「Debug」「DEBUG」「debug」「TEST」「SELECT」といったありがちな文字列を検索します。また、メモリダンプを眺めて、通常PLAYでは表示されない文字列などを見つけます。ただし、特殊な文字コードを使用しているゲームの場合には、簡単には見つけることはできません。

 そして、文字列が見つかったら、文字列のポインタ(先頭文字のアドレス)を参照している場所をサーチします。後はプログラムを追いかけて、どのアドレスにフラグを立てるか解析していきます。

◆基礎知識

◇アドレスをレジスタにロードする

 R3000では、アドレスをレジスタにロードする場合、luiとaddiu(またはori)の2つ命令を使って上位、下位に分けて行います。たとえば、a0レジスタにアドレス8001DF0Hをロードする場合、次のようになります。

★addiuの場合

 lui a0, #$8001 #上位ハーフワードに$8001をロード
 addiu a0,a0, #$1Df0 #下位ハーフワードに$1df0をロード

★oriの場合

 lui a0,#8001
 ori a0,a0,#$1df0

◇文字列を表示するルーチン

 プレステのゲームで文字列を表示する場合、次のような処理をしています。

 lui  a0,#$8001
 addiu a0,a0,#$1Df0 #文字列(または配列)のポインタをレジスタにロード
 jal  $8007c200 #表示ルーチンをコール
 つまり、デバッグ用の文字列のポインタを参照(レジスタにロード)している所をサーチすれば、デバッグ用文字列の表示ルーチン、デバッグモードのルーチンを発見できる訳です。

◆サーチ手順

@メモリダンプでデバッグ用の文字列を見つけます。

A文字列のポインタ(先頭文字のアドレス)を参照しているルーチンをサーチします。

 80011de0 81 46 82 72 82 73 82 60 82 71 82 73 83 7b 83 5e :STARTボタ
 80011df0 83 93 00 00 44 45 42 55 47 00 00 00 00 00 00 00 ン・・DEBUG・・・
 たとえば、上の場合、「DEBUG」という文字列の先頭文字「D」のアドレスは、「80011DF4」になります。

 さきほど基礎知識の説明したように、レジスタへのアドレスのロードは、上位、下位ハーフワードに分けて行われます。このため、ポインタの下位アドレス(2バイト)から、ポインタを参照しているところをサーチします。

 上の場合、ポインタの下位は「1DF4」になるので、この値をサーチします。

 具体的には、ExSTANDの場合、数値サーチで「M1DF4H」と入力してサーチを実行します。PsParの場合、データ長を2バイトにして、[値を探す(S)]で「1DF4H」を指定してサーチを実行します。

Bサーチ結果のアドレス周辺を逆アセンブルして、プログラムを解析します。

  Aのサーチ結果、いくつかの候補がサーチできます。サーチされた各アドレスの周辺を逆アセンブルすると、次のようなルーチン(基礎知識参照)が見つかります。そこが「DEBUG」という文字列を表示するためのサブルーチンということになります。

lui a0,#$8001
addiu a0,a0,#$1Df4
jal $8007c200

 後は、このルーチンを起点にして、プログラムを解析していき、デバッグルーチンに入るための具体的な条件を解析していきます。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

Contact Us | ©2006 G'sSQUARE-G-Poket.com | Powered byMovable Type 3.21-ja