Player Base/Entity Listの見つけ方
・プレイヤーオブジェクト
メモリに実体化されたプレイヤーの構造体 インスタンスまたはエンティティとも言う
・プレイヤーベースポインター
メモリに実体化されたプレイヤーオブジェクトの先頭アドレスを保持しているポインタ変数
Player Baseの見つけ方
仮にHPのアドレスを見つけたとします。次にHPのアドレスにアクセスしている命令を調べ、mov [edi+E4],eaxとなっていれば、おそらくediがプレイヤーオブジェクトの先頭アドレスです。あとはediの値でアドレス検索すれば、緑色のベースポインターのアドレスがヒットするはずです。ヒットしない場合はポインタースキャンを使ってください。
また、プレイヤーオブジェクトを見つければ必ずしも情報がざくざく見つかるわけではありません。例えば風来のシレン5plusの場合、2D画面上の座標はありましたが、肝心のHP、満腹度、経験値は別の構造体にありました。
これはゲームを作成したプログラマーが構造体をどう定義するかによって変わってきます。assault cubeのように1つの構造体にHP、名前、座標、弾丸などたくさんの値を定義していれば連鎖的に値を見つけることができます。
まずは何でもいいので値を見つけていき、ポインタースキャンかスクリプトを使用して次回起動時からもその値を参照できるようにしておきます。次にその値の近辺(同じ構造体)に他の情報がないかダンプ画面とdissect data structureを使用してゲームを動かしながら探します。
全体の流れとしてはこんな感じです。
Entity Listとは
赤枠がプレイヤーベースポインター(PlayerBase)、青枠がプレイヤーオブジェクトの先頭アドレスです。
Entity ListとはEntity(実体)が格納されている配列のことです。
上の画像のオフセットに注目してみると風来のシレンは0x8バイトずつ、CSSは0x10バイトずつアドレスが離れていることが分かります。この2つのゲームの場合ポインター配列になっており、ポインターのアドレスが規則正しく並んでいるのが特徴的ですね。
Entity Listを見つける際はこの特徴を利用します。どちらもオフセット0、つまり配列の先頭にプレイヤーの実体があるのも重要な点です。
参考URL
Getting Started How to find the Entity List