ゲームのアップデートでオフセットが変わる時の対処法
アップデートに強いスクリプトを作る方法です。
Cheat Engine 7.5
Tutorial-x86_64.exe (Step 2)
[ENABLE]
aobscanmodule(INJECT,Tutorial-x86_64.exe,29 83 ?? ?? ?? ?? 48 ?? ?? ?? E8 ?? ?? ?? ?? 8B ?? ?? ?? ?? ?? 41)
alloc(newmem,$1000,INJECT)
label(code)
label(return)
alloc(originalbytes,6) // オリジナルのバイトを保存する用のメモリ
originalbytes:
readmem(INJECT,6) // 確保したメモリにオリジナルのバイトを6バイト読み込む
newmem:
code:
push rax // raxレジスタの値をスタックに退避
xor rax,rax // raxレジスタの値をクリア(0にする)
mov ax,word ptr [originalbytes+2] // raxレジスタ(ax)に2バイト(オフセット)をコピー
mov [rbx+rax],#100 // raxレジスタを使用してHelathに100をコピー
// sub [rbx+000007F8],eax ← コメントアウトしてオリジナルの命令を消去
pop rax // 退避した値を戻す
jmp return
INJECT:
jmp newmem
nop
return:
registersymbol(INJECT originalbytes) // originalbytesをシンボルに登録していないとDISABLEセクションでエラーが発生する
[DISABLE]
INJECT:
readmem(originalbytes,6) // ここでoriginalbytesを使うためシンボルに登録しておく必要がある
unregistersymbol(INJECT originalbytes) // シンボルを解除
dealloc(newmem originalbytes) // メモリを解放
アップデートされたと想定するため、逆アセンブラウインドウでオフセットの7f8を800に変更してみます。変更後もスクリプトを有効/無効にできるのを確認できました。
レジスタが変わった場合はaobscanに失敗するため、スクリプトを有効にできません。バイトでいうと83の部分です。少し改良すればレジスタの変更にも対応できると思います。
参考リンク
https://forum.cheatengine.org/viewtopic.php?p=5777881&sid=a0711dd66db54a800d2453de2dfbff59
追記:
Cheat Engine 7.1、7.5の両方でスクリプトの動作を確認できました。Tutorial-x86_64のStep 2でオフセットが以下のように変化しています。
7.1 -> 7f0
↓
7.5 -> 7f8
その他の方法
code:
db C7 83
readmem(INJECT+2,4)
db 64 00 00 00
jmp return
dbとreadmemで命令を作る方法です。上記の場合
mov [rbx+offset],00000064
というコードを生成しています。
また、reassembleというAuto Assemblerコマンドもあります。
https://wiki.cheatengine.org/index.php?title=Auto_Assembler:reassemble
- 関連記事