結果だけでなく過程も見てください

日々の奮闘を綴る日記です。

Cheat Engineの使い方 チュートリアルStep8の攻略 ポインターのポインター (ゲーム改造/チート)

Cheat EngineのチュートリアルStep8の記事です。みんな大好きポインターポインターポインター…です…。

チュートリアルの始め方やプロセスのアタッチの仕方などもこちらに書かれていますので、ご一読いただけると幸いです。
Cheat Engineの使い方 チュートリアル Step2の攻略 - 結果だけでなく過程も見てください

Step8の問題文

要約すると以下の通りです。

f:id:taiyakisun:20210331211840p:plain

レベル1ポインターの検索

初期値221でFirst Scan→問題文ダイアログの「Change value」→Next Scanでアドレスを絞り込みます。

絞り込んだアドレス①をダブルクリックして②に追加します。②を右クリックして③の「Find out what accesses this address」をクリックします。「The following opcodes accessed 0192FED0」というウィンドウが新規に表示されます。
f:id:taiyakisun:20210331214253p:plain

問題文ダイアログの「Change value」を押して値を変更すると、変更を検知した「The following opcodes accessed 0192FED0」ウィンドウにコード行が表示されます。ここでのベースポインタはesiレジスタでアドレスは0192FEB8、オフセットは18であることをメモなどに書き留めて置いてください。
f:id:taiyakisun:20210331215835p:plain

ポインターを辿るため、①ベースポインターが存在するアドレスを探します。
Cheat Engineメインウィンドウで「New Scan」を一度押下した後、以下のようにベースポインターのアドレスで検索をかけます。

これでベースポインターのアドレスを保持しているポインターは0192FE18であることがわかりました。②をダブルクリックして③に行を追加します。続いていま見つけたポインターを使って変数値を表示するため④を押下します。
f:id:taiyakisun:20210331222748p:plain

①でPointerにチェックを入れ、②にアドレス0192FE18、③にオフセットである18を入力します。青枠にある値が、問題文ダイアログに表示されている値と一致している、つまり正しい位置を指していることを確認してください。OKボタンを押してレコードを追加します。
f:id:taiyakisun:20210331223043p:plain

レベル2ポインターの検索

Cheat Engineに戻ったらわかりやすいようにDescriptionを変更しておきましょう。①1行目は体力(Health)、2行目は作業用なのでそのままで、②3行目は辿った1つ目のポインターとして「Pointer level 1」としておきます。さらにポインターを辿るため、②を右クリックして「Find out what access this address」を押下します。
f:id:taiyakisun:20210331223851p:plain

以下のダイアログが表示されたら「Find out what accesses this pointer」を選択します。
新たに「The following opcodes accessed 0192FE18」ウィンドウが表示されます。
f:id:taiyakisun:20210331224030p:plain

問題文ダイアログの「Change value」で値を変更すると、それを検知して「The following opcodes accessed 0192FE18」ウィンドウにコードが表示されます。

ベースポインタはesiレジスタでアドレスは0192FE18、オフセットは0であることをメモなどに書き留めておいてください。
f:id:taiyakisun:20210331224533p:plain

Cheat Engineのメインウィンドウに戻り、①ベースポインタのアドレスで検索します。②結果が2つ出ていますが下を選びます(※)。これでベースポインタのアドレスを保持しているポインターは01914F34であることがわかりましたので、③に追加して④を押下します。
(※)ここ正直どちらを選べばいいか判断ができなかったのですが、両方試してみて正常に動作する方を選んでいます
f:id:taiyakisun:20210331231225p:plain

①のPointerにチェックを入れ、②のAdd Offsetでオフセットを増やします。これは今求めているものがポインターポインター(レベル2ポインター)のため、それぞれのオフセットが存在するためです。③にはアドレス01914F34、④にはオフセット0、⑤はオフセット18を入れます。青枠の値が、問題文に表示されている値を一致していることも確認してください。OKボタンを押してレコードを追加します。
f:id:taiyakisun:20210331231505p:plain

レベル3ポインターの検索

ここからは繰り返しです。
Cheat Engineに戻ったらわかりやすいようにDescriptionを変更しておきましょう。その後レベル2ポインターのレコードを右クリックして「Find out what accesses this address」を選択します。
f:id:taiyakisun:20210331231751p:plain

以下のダイアログが表示されたら「Find out what accesses this pointer」を選択します。
新たに「The following opcodes accessed 01914F34」ウィンドウが表示されます。
f:id:taiyakisun:20210331224030p:plain

問題文ダイアログの「Change value」で値を変更すると、それに反応して「The following opcodes accessed 01914F34」ウィンドウにコードが表示されます。

ベースポインタはesiレジスタでアドレスは01914F20、オフセットは14であることをメモなどに書き留めておいてください。
f:id:taiyakisun:20210331232034p:plain

Cheat Engineのメインウィンドウに戻り、①ベースポインタのアドレスで検索します。結果を選びます(②)。これでベースポインタのアドレスを保持しているポインターは018FA6C4であることがわかりましたので、③に追加して④を押下します。
f:id:taiyakisun:20210331232434p:plain

①のPointerにチェックを入れ、②のAdd Offsetでオフセットを増やします。これは今求めているものがポインターポインターポインター(レベル3ポインター)のため、それぞれのオフセットが存在するためです。③にはアドレス018FA6C4、④オフセットには14, 0, 18を入れます。青枠の値が、問題文に表示されている値を一致していることも確認してください。OKボタンを押してレコードを追加します。
f:id:taiyakisun:20210331232916p:plain

レベル4ポインターの検索

Cheat Engineに戻ったらわかりやすいようにDescriptionを変更しておきましょう。その後レベル3ポインターのレコードを右クリックして「Find out what accesses this address」を選択します。
f:id:taiyakisun:20210331233316p:plain

以下のダイアログが表示されたら「Find out what accesses this pointer」を選択します。
新たに「The following opcodes accessed 018FA6C4」ウィンドウが表示されます。
f:id:taiyakisun:20210331224030p:plain

問題文ダイアログの「Change value」で値を変更すると、それに反応して「The following opcodes accessed 018FA6C4」ウィンドウにコードが表示されます。

ベースポインタはesiレジスタでアドレスは018FA6B8、オフセットはCであることをメモなどに書き留めておいてください。

Cheat Engineのメインウィンドウに戻り、ベースポインタのアドレスで①のように検索します。結果を選びます(②)。これでベースポインタのアドレスを保持しているポインターは"Tutorial-i386.exe"+2426E0であることがわかりましたので、③に追加して④を押下します。
f:id:taiyakisun:20210331233939p:plain

①のPointerにチェックを入れ、②のAdd Offsetでオフセットを増やします。これは今求めているものがポインターポインターポインターポインター(レベル4ポインター)のため、それぞれのオフセットが存在するためです。③にはアドレス"Tutorial-i386.exe"+2426E0、④オフセットにはC, 14, 0, 18を入れます。青枠の値が、問題文に表示されている値を一致していることも確認してください。OKボタンを押してレコードを追加します。
f:id:taiyakisun:20210331234516p:plain

値の変更

緑文字の静的アドレスまで辿れました。静的アドレスはアプリケーションを再起動しても変化しないアドレスのため、ポインタ辿りはここで終了です。

いよいよ課題のため問題文ダイアログの①「Change pointer」を押してから3秒以内にレベル4ポインタの②Value値を5000に変更します。ここかなりタイミングがシビアですが、がんばってください。これなんで5秒や10秒にしなかったんでしょうね…。

うまく値が変更できると③の通りNextが非活性になり次の課題に進めるようになります。お疲れ様でした。
f:id:taiyakisun:20210331235217p:plain

プライバシーポリシー お問い合わせ