2011年08月26日

nullDC cep用ベースアドレスサーチ

前回ベースアドレスを発見しましたが、その方法を書きたいと思います。

まず、簡単ではありますがベースアドレスとはなんぞや?という事から。
PCには広大なメモリ空間があり、アプリケーションを起動すると、その空間の一部をそのアプリケーションに割り当てます。
ここではnullDCで説明します。

xxxxxxxx〜xxxxxxxx アプリケーション
xxxxxxxx〜xxxxxxxx アプリケーション
xxxxxxxx〜xxxxxxxx アプリケーション
xxxxxxxx〜xxxxxxxx アプリケーション
xxxxxxxx〜xxxxxxxx nullDC
xxxxxxxx〜xxxxxxxx アプリケーション
xxxxxxxx〜xxxxxxxx アプリケーション

xxxxxxxxはアドレスです。この割り当て単位を「リジョン」と呼びます(多分w嘘かもw)
で、その該当リジョンの先頭アドレスがいわゆる「ベースアドレス」です。

ベースアドレスは同じアプリケーションでもバージョンが違ったり、OSや環境が違うと変わってしまいます。
ですので、cepなどを使わない場合、環境が変わる度に再度コードサーチをしなくてはならなくなります。
それはあまりにも面倒臭い。ですので、cepなどのコードはベースアドレスさえ入れてやれば、コード自体はベースアドレスとの差分になってますので、内容は弄らなくていいという訳です。
cepの場合プレイステーションのPARコードがそのまま使えたりと便利です。(DCの場合は少し弄る必要があります)






それではnullDCのベースアドレスを見つけてみましょう。
なるべく他のアプリケーションは落としておいた方がいいでしょう。

使用するのは

・nullDC(バイオハザードコードベロニカ完全版)
EasyGame1.01(シェアウェアですが、最初に5秒のダイアログが出るだけで普通に使えます)
Win7 64bitなどではターゲットのNullDCが落ちるので「うさみみハリケーン」などで代用できます
・cep

です。
まずは普通にベロニカを起動し、プレイします。しばらくプレイするとハンドガンが手に入ります。
弾数が表示されてるのでサーチにはもってこいです。
ハンドガンを入手しました。12発ありますね。
110826090351.jpg

ここでEasyGameを起動します。EasyGameは起動後すぐに最初の取り込みを行いますのでこのタイミングがいいかと。
起動し、プロセスを選びます。勿論nullDCを選択。
110826090431.jpg

ここでnullDCのメモリの内容をEasyGameが記憶します。マシンによっては数分かかるかもしれません。

記憶完了したらそのまま放置してベロニカを続けます。

ハンドガンを一発撃って11発にしました(奇数や素数が検索しやすいです)
110826090519.jpg

EasyGameに戻り、「記憶してから」「11」「になった」「16ビット」で「検索」ボタンを押します。
255発以内でしたら8ビットでもいいです。が、ここは16ビットでも問題ないです。
検索には少々時間がかかります。
110826090621.jpg

結果が出ましたがおよそ2000程候補がありますので、もっと絞らないとダメですね。

ベロニカに戻り、残り5発まで打ってみました。
110826090958.jpg

EasyGameに戻り「記憶してから」「5」「になった」「16ビット」で今度は「絞込検索」ボタンを押します。
110826091012.jpg

おっと。もう残り2つまで絞られました。これで充分でしょう。

では、試しにアドレス 01609BD8 の値を弄ってみましょう。ダブルクリックしてデータ書き換えで新しい数値を999にしてみます。
110826091036.jpg

999になりました。
(もう一つのアドレスの値も999に変わりました。連動してるようですね)
110826091057.jpg

ではベロニカを見てみましょう。
110826091115.jpg

999発になってます。ビンゴ!当たりです。
アドレス 01609BD8 か 1C239BD8 どちらかですが、 01609BD8 と仮定して進めてみます。
(今回は必ず2つ残りました。理由はnullDCがUIとコマンドプロンプトで2プロセス起動してるからです。つまり1C239BD8はコマンドプロンプトのアドレスです。多分w)



では一旦全て終了し、マシンをクリアな状態に戻しましょう。

再度nullDCを起動します。
110826091205.jpg

nullDCのベースアドレスを探しているのでゲームを起動する必要はありません。

ではcepを起動し、プロセスタブの「高度な設定」を押します。
プロセスを選択でnullDCを選択。
(ここで一度「更新」ボタンを押した方がいいかもしれません)
リジョンを選択で先程のアドレス 01609BD8 が含まれる部分を探します。
新規ビットマップ イメージ.JPG

ありました。アドレス 013F0000 から 023EFFFF までの 1000000バイトの範囲です。

つまり最初の図に当てはめると

xxxxxxxx〜xxxxxxxx アプリケーション
xxxxxxxx〜xxxxxxxx アプリケーション
xxxxxxxx〜xxxxxxxx アプリケーション
xxxxxxxx〜xxxxxxxx アプリケーション
013F0000〜023EFFFF nullDC
xxxxxxxx〜xxxxxxxx アプリケーション
xxxxxxxx〜xxxxxxxx アプリケーション

という事になります。つまり、
013F0000がベースアドレスです。



さて、本当にそうだったか検証してみます。cepはそのまま「検索タブ」を開きます。
110826091731.jpg

フラグ「消去」を押してサーチの初期化をしておきます。

nullDCでベロニカを起動。再度ハンドガンを入手まで進めます。
ハンドガンを入手しました。値は12発です。

「10進数」「16ビット」数値検索に「12」を入れて検索ボタンを押します。
110826091922.jpg

結果の該当数が1569件と出ました。更に絞ります。

ベロニカに戻り1発打って11発にしました。

cepに戻り、数値検索に「11」を入れて検索ボタンを押します。
110826091957.jpg

結果の該当数が1になりましたw ビンゴ?w

「全コピー」を押して、結果を「改造タブ」に送ります。押したら改造タブを開いてください。
110826092025.jpg

ありましたね。#はコメント行の意味なので#を消して、値を999の16進数である「03E7」にしてみます。

「始動」ボタンを押すとコードが効き出します。結果・・・
新規ビットマップ イメージ2.JPG

ちゃんと弾数が999になってます。

これで、ベースアドレスが正しかった事が証明されました。cepのサーチはEasyGameと違い高速ですので今後のコードサーチはcepでやればいいでしょう。

ちなみにですが、80219BD8の先頭の「80」は16bitを意味する符号ですので、このアドレスは 219BD8 となります。
では 219BD8 にベースアドレスの 13F0000 を16進数電卓で足してみます。 答えは 1609BD8 となりました。
どこかで見ましたね。最初のEasyGameでサーチした時のアドレスですね。

つまりcepは コード+ベースのアドレスを改造してる訳です。ですのでコードアドレスは差分なんですね。
ではちゃんと動作も確認したので、cepに登録します。
APPLIST.txtを開いて好きな所に1行加えます。
nullDC v1.0.4(build Jun 4 2011@21:33:43) Win XP| nullDC_Win32_Release-NoTrace.exe | 013F0000 | $01000000

wwwwwwww | xxxxxxxx | yyyyyyyy | zzzzzzzz
wwwwwwwwは説明文です。詳しいバージョンなどを記入しておいた方がいいと思います。
xxxxxxxxはプロセス名です。正確に記入してください。
yyyyyyyyにベースアドレスを記入します。
zzzzzzzzはベースアドレスからどれだけの範囲かを指定します。cepで1000000バイトと出てたので1000000にします。

以上適当ではありますが、簡単な説明を終わります。

Win7はこちら↓
nullDC cep用ベースアドレスサーチ Win7対応

注意!
メモリを弄ると最悪OSに不具合が出たり破損する可能性があります!慎重に自己責任でお願いします!
posted by anarchy0929 at 09:54| Comment(0) | TrackBack(0) | 改造コード | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。