Cheat Engineで使う重要な用語

Static Address 静的アドレス

Cheat Engineでは緑色で表示されるアドレス。↓画像の赤枠部分
静的アドレスは再起動してもアドレスが変わりません。
Cheat Engineはスキャンしてヒットしたアドレスが、プログラムの.dataセクション内にあるかどうかで静的か動的かを判断しているようです。
.dataセクションにはプログラム内で使うグローバル変数と静的変数が格納されています。
マルチレベルポインタ(ポインタのポインタ)の場合、この静的アドレスをコードファインダーやポインタースキャンで見つけにいくことになる。

Cheat Engineの動的・静的アドレス

Dynamic Address 動的アドレス

黒字で表示されるアドレス。↑画像の青枠部分
プロセスが起動してから、動的に確保されたメモリを示すアドレス。
プログラムは実行中に必要な時に必要なサイズだけヒープと呼ばれる領域にメモリを確保している。
これをメモリの動的確保という。
どのアドレスにメモリを確保するかはOSが自動で行うため、再起動した時には場所が変わっており参照できなくなってしまう。

Base Address ベースアドレス

起点となるアドレス。オフセットと一緒に使われる。
何をもってベースというのか難しいが、多くの場合メモリに実体化された構造体またはクラスの先頭アドレスだと思われる。
ゲーム内のプレイヤー(敵も含めて)の情報はC言語でいう構造体、C++でいうクラスで管理されている。
プレイヤーの情報にアクセスするためのベースになるアドレスをプレイヤーベースと呼ぶ。

Offset オフセット

ベースアドレスからの相対的な距離。
例えば、プレイヤーの体力のアドレスを特定したとき、
ほとんどの場合、このオフセットが使われている。
例:ベースアドレス + オフセット = 体力のアドレス

マルチレベルポインタのイメージ図

Cheat Engineで静的アドレスを見つける場合は、最初に体力のアドレスを見つけて次に青矢印のように順々にバックトレースしていきます。
図は簡略化したもので、実際の解析ではオフセットを伴うので、もう少し複雑になります。
関連記事

0 Comments

Post a comment