ゲームのアップデートでオフセットが変わる時の対処法

アップデートに強いスクリプトを作る方法です。


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

関連記事

0 Comments