チートエンジンのCTが使えない!有効にできないスクリプトの直し方

本来テンプレートを使用してスクリプトを作成した場合、オリジナルコードのコピー(Snippet)が自動で挿入されます。しかしながら、ネット上からダウンロードしたCTはSnippetを削除していることが多く、AOBを修復するのが困難です。この記事ではそんな時に役立つワンポイントアドバイスをご紹介します。


使用するゲームは「英雄伝説 閃の軌跡IV」です。
CTのダウンロードはこちらから



チート名はAlways See Treasure Chests On Map (Portion of Moon Lens Effect)で、
修復するAOBは画像赤枠の「84 C0 44 0F B6 E3 44 0F 45 E6 48 81 C1 68 4D 00 00」です。



まず↑画像のようにAuto Assemblerスクリプトを用意してください。

メインウインドウに戻りスクリプトを有効にした後、Memory Viewer画面に移り、
Ctrl + GでaobTestMemに飛びます。



右クリックからAssembleを選択後、
db 84 C0 44 0F B6 E3 44 0F 45 E6 48 81 C1 68 4D 00 00
と入力します。左端のdbはdeclare bytesの略で「今からバイトを書き込みますよ」という意味です。



これでAOBをアセンブリ言語に変換することができました。
ゲームのアップデートでどのバイトが変わったかを見極めるわけですが、1番怪しいのは684D0000の部分です。ここを?? ?? ?? ??を置き換えてユニークなAOBであることを確かめれば完成です。


84 C0 44 0F B6 E3 44 0F 45 E6 48 81 C1 68 4D 00 00

                      ↓

84 C0 44 0F B6 E3 44 0F 45 E6 48 81 C1 ?? ?? ?? ??



赤枠が目的の命令です。黒字の006A0000はこの記事の最初に作成したAAスクリプトのメモリなので無視してください。スクリプトをオフにすればメモリが解放されて見えなくなります。


AOBの検索方法はこちらの記事をご参照ください。



↑画像のようにAOBを入れ替えましょう。


通常のマップ
通常のマップ
チート実行後のマップ
チート実行後のマップ

チートを有効にできるようになり、マップ上にお宝の位置が表示されるようになりました!


補足説明

AOBを修復し検索したときに、アドレスが複数ヒットした場合はブレークポイントを設定し、ブレークしたのが目的の命令です。


例えば、お金を拾うと所持金が9999になるチートがあるとします。
AOBは「7F 11 BA 29 00 00 00 48 8B CE E8 30」で「7F 11 BA 29 00 00 00 48 8B CE E8 ??」に変更すると2つアドレスがヒットしました。ここから両方のアドレスにブレークポイントを設定し、お金を拾った時にブレークしたのが目的の命令です。

関連記事

12 Comments

白猫

No title

こんにちは。Cheat Engineについて調べていたところ、こちらのサイトが非常に分かりやすかったので参考にさせて頂いております。

ディスコードにも書き込みをしてしまったのですがCheat Engineに関する質問をさせて頂くことは可能でしょうか?

Memory viewerについて分からない部分が出てきてしまって・・・

お忙しいところ恐縮ですが、もしお時間がありましたらよろしくお願いいたします。

  • 2022/09/30 (Fri) 15:15
  • REPLY
ちーたー

なんでもチート

コメントありがとうございます。
もちろんOKですよ!私がわからない場合はこちらでも調べてみますが、解決しなかったら申し訳ないです。

  • 2022/09/30 (Fri) 20:27
  • REPLY

白猫

お返事ありがとうございます。

お返事ありがとうございます!

私は今、Cheat Engineを使ってPC版のFF7R(ファイナルファンタジー7リメイク)の敵操作チートを試しています。(YouTubeにて海外の方がCheat Engineを使って本来はプレイヤーが操作できない敵キャラクターを操作していました。)

Memory viewerの文字列を変更してPC0002_00_Tifa(名前が4文字のキャラ)をEB0003_00_Reno(同じく名前が4文字のキャラ)に変更することに成功しました。

他のキャラでも試したのですが名前の文字数が同じキャラクターは問題なくMemory viewerの文字列の置き換えで変更できました。

ただPC0002_00_Tifa(名前が4文字のキャラ)をEB0021_00_Sephiroth(名前が9文字のキャラ)などに変更しようとすると文字数が合わないためキャラクターが消えてしまいます。

どうやら私以外にも同じ部分で行き詰っている方が多いようで、海外の動画投稿者の方に「文字数が違うキャラの場合はどうすればいいんですか!?」と質問している方がいました。

その質問に対しての回答は「名前の文字数の違うキャラに置き換えるには、名前の周りのメモリビューワで、結果とそのサイズ、最大4バイトを確認する必要があります。文字が変わるたびに、適切なサイズを設定する必要があります。」とのことでした。

↑は海外の方の解説を翻訳したのですが「文字が変わるたびに、適切なサイズを設定する」という部分の手順が具体的にどの項目で何をいじればいいのか、どうしても理解できませんでした。

もし何かご存知でしたらご教示いただけますと幸いです・・・!

  • 2022/09/30 (Fri) 21:11
  • REPLY

なんでもチート

少し調べました。
名前のアドレスの近くにサイズ値があるようです。サイズ値を発見したら、4から9に変更すると出来るかもしれません。
https://www.youtube.com/watch?v=UC_vidSY2Yg
https://i.imgur.com/h3bTDCA.png

  • 2022/09/30 (Fri) 23:32
  • REPLY

白猫

この方の動画は既に全て視聴していまして探してみたのですがサイズ値は見つかりませんでした・・・

どうやらサイズ値は固定ではなくゲームを起動すると毎回変わるらしく000002や001AB8などの数値のようです。

サイズの変更にはAOBを使うといいらしいですが、難しすぎるので諦めようと思います。

ご相談に乗っていただきありがとうございました!今後もこちらのサイトを参考にさせていただきます!

  • 2022/10/01 (Sat) 14:36
  • REPLY

hattari

Disgaea5のCT

いつも記事を楽しんでおります。
SteamのDisgaea5 completeのCT(Fareless cheatのaanpsx様のファイル) をメンテしようと思い、記事の手順でやってみたのですが、うまくいきません。 
ScriptではPSX_CharaGetHPのbyte of arrayが見つからないとのエラーがでています。サーチする対象のArray of Byteは"48 29 88 ?? ?? ?? ??"だと思っているのですが、何かアドバイスがあればお願いします。

  • 2022/12/04 (Sun) 14:18
  • REPLY
ちーたー

なんでもチート

To hattariさん

コメントありがとうございます。

48 29 ?? ?? ?? ?? ?? 48 8B ?? ?? ?? ?? ?? 48 39 ?? ?? ?? ?? ?? 7E ?? F6 ?? ?? ?? ?? ?? 40 75 ??

上記のAOBで検索するとヒットしますか?

AOBの検索方法は以下の記事で解説しています。
https://cheatwhatever.com/blog-entry-27.html

1601行目から1627行目に_CharaGetHPのオリジナルコードのコピーがあるのでこれを使ってAOBを修復します。おそらく命令に使われているオフセット、もしくはレジスタが変わったんだと思います。

  • 2022/12/04 (Sun) 15:55
  • REPLY

hattari

To ちーたーさん

早速ありがとうございます。
試してみました。
-ゲームを起動
-CheatEngine起動
-Arrya of ByteのValue Typeで検索
で試しました。
1. 48 29 ?? ?? ?? ?? ?? 48 8B ?? ?? ?? ?? ?? 48 39 ?? ?? ?? ?? ?? 7E ?? F6 ?? ?? ?? ?? ?? 40 75 ?? >> 0件
2. 48 29 ?? ?? ?? ?? ?? だけで検索>> 3104件
3. 48 29 ?? ?? ?? ?? ?? 48 8B で検索>> 0件
これは、該当部分のところが大幅にかわったのでしょうか。。。
よろしくお願いします。

  • 2022/12/04 (Sun) 20:23
  • REPLY

hattari

To ちーたーさん

すいません、一点訂正します。
Memory ScanオプションのWritableがGrayではなくCheckedになっていたことに気づきGrayにして調べなおしました。結果、
48 29 ?? ?? ?? ?? ?? 48 8B ?? ?? ?? ?? ??ならば、31件ヒットしました。
これで、disgaea5.exe+8A6258にヒットしたArray of Byteに修正したところ、"PSX_CharPage could not be found"にメッセージが変わりました。同じ要領で繰り返してみます。

  • 2022/12/04 (Sun) 20:49
  • REPLY
ちーたー

なんでもチート

To hattariさん

48 29 ?? ?? ?? ?? ?? 48 8B ?? ?? ?? ?? ?? 48 39 ?? ?? ?? ?? ?? 7E ?? F6 ?? ?? ?? ?? ?? 40 75 ??

のバイトを少し減らして

48 29 ?? ?? ?? ?? ?? 48 8B ?? ?? ?? ?? ?? 48 39 ?? ?? ?? ?? ?? 7E ?? F6

で検索してみる。それで駄目なら、もう少しだけバイトを減らしてみる。AOBを修復する際のポイントですが、mov,cmp,jmpなどのアセンブラコードだけ残し、その他を??に置き換えるとアップデートで変わったところを回避することが出来ます。

以下のサイトにバイトとアセンブラコードの表があります。
http://ref.x86asm.net/coder64.html

例えば48 8B C8はmov rcx,raxになるんですが、8Bがmovに該当します。

上記の命令でレジスタを??に置き換えると48 8B ??になります。先頭の48はREX Prifixと呼ばれるx86をx64に拡張する際に付け加えられたもので、付く命令と付かない命令があります。

話を戻しますが、また別の方法で1604行目から1613行目までの命令のAOBで試してみる。

それでも駄目なら、PSX_CharaGetHPの部分だけ削除して実行してみる。enableスクリプトを分解して実行できるものと出来ないもので分けてひとまず出来るものだけ使う、などの方法があります。

最終手段として自分で見つけてしまうのも選択肢の1つです。

  • 2022/12/04 (Sun) 21:06
  • REPLY
ちーたー

なんでもチート

To hattariさん

enableスクリプトを開き、Ctrl + Rでaobscanmoduleで検索。
何件かヒットすると思うので、それらをすべてAOBスキャンにかけます。例えば8B 51 04 48 89 44 24 70で検索して何もヒットしない場合は、そのAOBがエラーの原因になっています。

WritableをGrayにしないとAOB検索はできないです。私も使い始めの頃、間違えました。

  • 2022/12/04 (Sun) 21:17
  • REPLY

hattari

To ちーたーさん

詳しくありがとうございます。
試してみてわかりましたが、対象のコードはaobscanmoduleが20ヶ所以上でてきており、全て正しいアドレスをさがすのは大変なので、不要部分を削除し、必要だとおもわれるコードにしぼって直してみました。
一旦エラーはなくなりましたが、誤ったアドレスを参照してしまっているようで、まだコードは正しく動いていません。
引き続きAOB検索でさぐるか、自分で見つける方向でいくか考えてみます。

実際手を動かしてやってみると、記事のように思う通りにならないことが見つかりますが、逆に勉強になりますね。ありがとうございました。

  • 2022/12/06 (Tue) 07:18
  • REPLY