Cheat Engineでゲーム内の情報を芋づる式に見つけよう!
Cheat Engineには「Dissect data structures」という機能があります。この機能を使うとゲームを動かしながら、メモリの情報を視覚的にわかりやすく分析でき、値を変更することも可能です。
プレイヤーの体力や弾丸のアドレスを見つければ、そのアドレスの近辺には他の情報もたくさんあります。なぜこのようなことが起こるかというと、プログラミングでは関連するデータをメモリの特定の場所にまとめて管理しているという特徴があるからです。C言語でいう構造体のことですね。これはゲームだけに限らずソフトウェア全般に言えることです。
自分の探している値とは違うものでも見つけておけば、それを手がかりに目的の値を偶然見つけることもよくあります。この機能と似たようなツールにReClass.NETもあるので参考までに。
Dissect data structuresで構造体を分析する
実際にやってみましょう。使用するゲームはAssault Cubeです。
ここで使用するアドレスはプレイヤーの情報にアクセスするためのベースになるアドレスで、プレイヤーベースと呼ばれるものです。Assault Cubeの場合、ポインター50F4F4がプレイヤーベースになります。
Cheat Engineメインウインドウ右下にある「Add Address Manually」をクリックします。
Pointerにチェックを入れ、青枠に50F4F4を入力し、赤枠のアドレスをクリップボードにコピーします。
Cheat Engineメインウインドウ左下にある「Memory View」をクリック。
メニューバーのToolsから「Dissect data/structures」をクリック。
コピーしたアドレスを張り付け、「Define new structure」を選択します。
Structure Nameはなんでも良いので入力し、OKをクリックします。
これで分析に使用するウインドウが出現しました。
赤枠がオフセット、緑枠がデータ型、青枠がアドレスとそのアドレスが保持している値になります。ゲーム内で情報が変化すれば、このウインドウの情報もリアルタイムで更新されます。試しにオフセットのF8まで下にスクロールしてみましょう。
体力を確認できました。
他にも情報がないかスクロールしながら探していきます。
ゲーム画面と一致する値や、それらしい数字を見つけます。
3つほどありました。オフセット114の50も気になりますね。
ある程度情報を見つけたのでこのくらいにして、新たに設定していきます。
↓画像にある矢印のあたりで右クリックして「Lock」を選択します。
さらにメニューバーのFileから「Add extra address」をクリックします。
左に入力してあるアドレスと同じアドレスを右にも入力します。
そうすると↓画像のようになります。
赤枠のアドレスはロックされていて値は変化しません。ロック時の状態を保っています。青枠のアドレスはゲーム内の情報が変わると値も更新されます。これで変化が一目瞭然です。
それではゲームに戻り、試しに銃を撃ってみましょう。
一発撃つと、アサルトライフルのマガジンの弾数が20から19になりました。Dissect data structuresのウインドウを見るとオフセット150の値が20から19に変化しています。
ロック時の状態から値が変化すると画像のように文字が赤色になります。 これで、アサルトライフルのマガジンのオフセットとアドレスを見つけることが出来ました。次はリロードしてアサルトライフルの残り弾数(予備マガジン)を40から39にしてみます。
オフセット128の値が40から39に変化しているので、ここで間違いないでしょう。
見つけた値を使用する場合は画像赤枠のようにポインターとオフセットを入力し、アドレスリストに追加します。このようにDissect data structuresではオフセットを見つけるのが重要で、個々のアドレスは次回起動時には変わってしまうので特に必要ありません。
以上で終わりになりますが、他にもポインターを追いかけたり、共通の値を見つけるなど出来ることがたくさんあるので色々と試してみてください。