Home > スポンサー広告 > 多重変動(多重ポインター)アドレスサーチ - PointerSachiko

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

コメント: -

Home > スポンサー広告 > 多重変動(多重ポインター)アドレスサーチ - PointerSachiko

Home > PSP memo > 多重変動(多重ポインター)アドレスサーチ - PointerSachiko

多重変動(多重ポインター)アドレスサーチ - PointerSachiko


PointerSachiko
PMEtanの作者さんによる多重ポインターサーチツール。

リリースされた時は他のゲームで遊んでおり、そのゲームでは
変動アドレスが必要なかった為、テストしませんでしたが
その後、いくつかのゲームでテストしてみると、
多重に対応し、今までのツールに無い速度で検索してくれる上に、
検索結果も見やすく、PMEtan向けにコードが自動生成されるなど
かゆいところに手が届くツールでした。


作者さんのサイト『14.4kbps.com』にボタンの役割や設定の詳細が載っています。
『Multi Pointer Searcher For PSP』を使用したことがある人なら、
サイトの説明文を読むだけで使いこなせると思います。

以下、変動アドレスサーチを全くしたことが無い人向けに
画像付きで説明を書いてみました。(今回は1重ポインター)



Pointer Sachikoの使い方




対象ゲームは『MHP3』です。
大型モンスター1(以下、ボス)のHPの変動アドレスをサーチし、
ポインターコード化してみます。

使用するプロセスメモリエディターは『TempAR』です。
最新のバージョンだと、ロケーションが日本なら
デフォルト言語が日本語になっていると思いますが
今回の画像は英語で作成しています。




『TempAR』の設定を変更します。
『リアルアドレスを使用する True』に設定します。
必ずしも設定しなくても構いませんが、設定しない場合は
最後にアドレスを再計算する必要があります。




リアルアドレスがなんだか知らない人や
リアルアドレスだと読みづらい人は、
『リアルアドレスを使用する False』にしておきます。




サーチ範囲を設定します。(リアルアドレス)
MHP3の場合、モンスター関係の値は0x09E00000以降に
格納されると他のサーチで既に分かっているので
『start』を『0x09E00000』に設定します。
何も情報が無い場合は、サーチ範囲を無理に設定する必要はありません。




サーチ範囲を設定します。(バーチャルアドレス)
これ以降はリアルアドレスを前提として話を進めます。




さて、クエに行きボスが出現しているので
32bit変動サーチを実行します。




ボスに攻撃してボスのHPを減らします。




ボスのHPが前回サーチした時より減っているので
『Less』(より少ない)でサーチします。




ゲームに戻ったら、ボスを攻撃せずにTempARを呼び出し
ボスのHPが変わっていないので『Same』(同じ)でサーチします。




これらを繰り返して、候補を減らしていきます。




最終候補が1だけ残りました。(リアルアドレス)
アドレスは0x09E87654と表示されていますが、値が格納されているのは
2バイト左からなので、実際のアドレスは0x09E87656になります。



最終候補が1だけ残りました。(バーチャルアドレス)




アドレスが分かったところで、アドレスのメモを取ります。
次にメモリダンプを出力します。

スロットの数字を、アドレスのメモの横に書き込み、
スロットとアドレスのペアを分かるようにしておきます。




USB接続コマンドをONにして、USB接続します。
パソコンにダンプファイルを移動したら、OFFにして切断します。





パソコンからエクスプローラーで
『tempar.prx』を置いたフォルダを開きます。

例) ms0:/seplugins/TempAR/


さきほどダンプしたファイルが、『dump0.ram』として
出力されています。これをパソコンに移動します。
なお、スロット番号でファイル名のdumpの後の数字が変化します。





パソコンに移動したら、リネームを行います。
PointerSachikoから使えるようにする為に
最低行わないといけないことは
「ファイル名にアドレスを含める」ことです。

しかも『リアルアドレス』である必要があります。
もし『バーチャルアドレス』でサーチした場合には
そのアドレスに0x08800000を加算した数字を
ファイル名に含めるようにします。

0x01687656+0x08800000=0x09E87656


ポインターサーチツールでは
違うパターンの変動アドレスが
最低でも2つ必要になります。

ここまで終わったら、クエストを受け直して
変動サーチを行い、違う変動アドレスのダンプファイルを
もう1つ作成します。


クエストを何度受け直しても違うアドレスにならない
場合は、ゲームタイトルまで戻ったり
一度ゲームから抜けたりすると、変わる場合があります。
これらを行っても、同じアドレスが選ばれることがありますので
違うアドレスになるまで何度もリトライします。


PSPLINKで解析している人の場合は
読み込みや書き込みを行うアドレスをメモしておき
ブレークポイントを設置して、ブレークしたら該当する
レジスタの値を確認するだけでアドレスが分かるので
ボスのHPのアドレスを検索する手間が不要です。




PointerSachikoを起動し、ファイル欄にダンプしたファイルをD&Dします。
ファイルが登録されて、ファイル名に含めたアドレスが自動でセットされます。
2つ以上のファイルを登録したら、『初回ポインタ検索を開始』ボタンを押します。


PSPLINKで解析している人の場合、最終オフセットは簡単に分かるはずなので
PointerOffset(Last)にオフセットを入力しておくと良いでしょう。




『初回ポインタ検索』を実行すると、『結果』タブに遷移し、
結果が表示されます。




『当たりのみ表示』のチェックボックスをONにすると
◎のみに表示が絞られます。




1重ポインタに5個の候補が表示されています。
この5個をポインターコード化して、本当に使えるアドレスを特定します。




CWCheat形式の場合。
PointerSachikoの候補1つ目をポインターコード化します。

Base Address 0x00324A10
Offset 0x00000246

これをCWCheatの16bitポインターコードに当てはめていきます。
なお、1行目はよく使われているクエスト判定コードです。
これでボスのHPが1になるコードが出来ました。

しかし、このアドレスが本当に有効かどうかだけでなく
このアドレスの値の初期化タイミングや、他のアドレスと
共用で誤爆がないか等を調べたいところです。




PSPAR形式の場合。
オフセットコードとオフセット書き出し機能を使って
特定のアドレスに書き込み、値を確認出来ます。

ポインターアドレスは、PointerSachikoの『初期値』のすぐ右にある値か
PMEtanコード形式の最初の_PIN行の真ん中のアドレスをコピーします。
オフセットはOffsetか、_PWR行の真ん中のアドレスをコピーします。
(多重の場合はOffsetか、_PTR行も参照する)


1行目 クエスト判定コードです。
2行目 ポインターアドレスの値が0で無い時~
3行目 アドレスの値をオフセットとして取り込む。
4行目 オフセットに0x00000244を加算する。
5行目 アドレス0x08801100にオフセットを書き出す。
6行目 ターミネータ。


4行目のオフセットは本当は0x00000246ですが
TempARのアドレスジャンプ機能を利用する為に
0x00000244としています。
アドレスが4でアライメントされていないと
バスエラーを返す為です。




クエスト中に上のコードを実行したら、
『Decoder』で0x08801100を開きます。
すると、ポインターアドレス+オフセットの
最終アドレスが書き込まれていることが確認出来ます。


このコードをずっとONにした状態で
クエスト開始時、終了時などの値も確認します。
すると、クエスト開始時に0で初期化、値代入後クエスト中は
不変であり、他の値が代入されないことが確認出来ます。
(実際には、複数のポインタコードを登録して、オフセットを
まとめて書き出し、同時に値を確認した方が良いです。)

どうやらこのポインタが使えそうです。




□ボタンを押しながら→を押すと、そのアドレスの値を
アドレスとしてジャンプすることが出来ます。
ボスの現在HPが0x1867だと確認出来ました。




先ほどのコードは確認用だったので
実際に書き込むコードに変更します。

0xD5で値をセットし、0xD7でオフセット0x0246に16bit書き込みを
行うように手を加えて完成です。





関連記事
スポンサーサイト

コメント: 0

Home > PSP memo > 多重変動(多重ポインター)アドレスサーチ - PointerSachiko

Return to page top

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。