初歩的なCheatEngineの使い方

:

ラナルータ

:2014/11/16(日) 15:34:08
関連スレ
基本的なCheatEngineの設定
基本的なCheatEngineの使い方

基本的なことから書いたはずなんですけど
あれは初歩的なことができる人向けだと思うので
まじで使ったことない人向けの記事書きますわ

まず初めに
アドレスの追加の仕方とかはしょうもないので書かないのですが...
スクリプトの追加の仕方...わりと分かりづらいのです
書いていきます

AAScriptの追加の仕方
MemoryViewerを開きます
Toolsを押します
AutoAssembleを押します
3-1.png

適当にこんな感じで
有効無効できるように書いておきます
3-2.png

Assign to current cheat tableってのをクリックすれば
CTにスクリプトが追加されます
OWARI
3-3.png


CTにスクリプトを書く準備ができたところで
既存のスクリプトをEMSからJMSに持ってきたりはたまた古いスクリプトを更新したりするために便利な
AobScanについて知ろう!やったぜ!

AobScanの使い方
俺のやり方は若干特殊かもしれないけど簡便してください
うわぁ!どこかのサイトでこんなAobを見つけたよ!!
物理無敵//E8 ?? ?? ?? ?? 57 8B CE E8 ?? ?? ?? ?? 83 BE ?? ?? ?? ?? 00 74 0D 6A 00 6A 00 6A 00 8B CE E8 - call

Memory Viewer 開きます
Find Memoryクリックします
3-4.png

Windowが出てくるので画像のとおりに値を全部設定します
From/Toの設定を間違えてるパターンが割りとあるので検索範囲くらいきちんと設定しましょう
Text検索しているわけではないのでAobに設定しましょう(左下に注目していてくださいよ)
OKをクリックします
3-5.png

検索して一致する場所が見つかると左下のアドレスが変わります!
見つからなければエラーが出ます
その場合は新しいAobを作成する必要あり
3-6.png

早速見つかったアドレスを見てみよう!
右クリックからMemoryViewerのアドレスが移動できるよ!
Go to Address!
3-7.png

アドレスを入力してOK押します
3-8.png

きちんと移動できましたね
なんかAobにcallとか書いたあったので
call先を見ろってことでしょう(すっとぼけ)
3-9.png

これでほしいアドレスが見つかりました(正しくない場合もあったりするんでそれはAobのコメントを見てください...
belowとか書いてあったりするとAobから取得できたアドレスの下を見ろ見たいな意味です)
callとかjmpとか書いてあるときはそのcall/jmp先のアドレスを見ろてきな意味だと思います
3-A.png


Script/Aob仕上げ
先ほど追加したCTにあるAAScriptを右クリックで
名前を変更したり
スクリプトを変更したりできます
さぁ変更しましょう!(空だったからね)
3-B.png

とりあえずこんな感じに書いてOKおして保存されるので
チェックをいれたらMobにぶつかってみて下さい
たぶん無敵になっています
ret 0004を書き入れているため(3bytes)
無効化するときに元のメモリをもどしてやる必要があるので
db 6A 00 68とやっていますこれについての解説は下に書きます
3-C.png

AA Scriptやら
物理無敵コードの解説
アドレス:
db XX XX XX XXの形で
16進数値をアドレスのメモリに書き込めす

アドレス:
dd XXXXXXXXの形だとDWORD = 4bytesの書き込みができます

アドレス:
dd #123456の形だと整数値を書き込めます

アドレス:
dw XXXXの形だとWORD = 2bytesの書き込みができます

アドレス:
dd #12345
dw 1234
db 90 90
とか書くと
最初の4bytesに整数値12345を
次の2bytesに0x1234を
その次に0x90 0x90と書き込んでいきます

アドレス:
asm codeの形だとアドレスにasmコードを書き込みます
何バイト書き込まれるかはasmcodeによるし
きちんと分かってないとメモリが破壊されます


なぜret 0004を関数の始まりに書き込んでいるのか?
push FFやらpush ebpから始まる場所はだいたい関数の開始地点です。
ret 0004とは引数が1つの関数を終わらせる処理です
esp値をあわせてreturnしないとreturn addressを間違えて変なところに実行が移ってエラーします
まぁ関数の開始地点にreturn書き込むのが一番安全です。

どうやって引数の数を見分けるか?
Fromを関数の最初にもっていって
3-D.png
retを検索します
3-E.png

まぁ検索するとretコードが羅列されます
んできちんとWクリックしてアドレスのメモリを見てやりましょう
int CCとか次の関数がすぐそこに見えるならばだいたい関数の終了地点で間違いないです
ret 0004とあるので引数の1個関数です
なのでこれを関数の開始地点の書き込むことで
強制的に関数を終了できます
3-F.png


関数について

まー関数ってのはC言語でいうところのint main() { return 0;}とかいう感じの奴です
retコードに到達したときのeaxの値がreturnされる値と覚えればオーケー
んでret 引き数の数*4で関数が終了できることも覚えておこう(_stdcallの場合)

関数には2種類あります
ret 0004のようなもので終わるもの
retをかけた後に
call後に
add esp,4とやるようなもの
まぁどちらも処理は同じですが...
説明がしづらいです...
_stdcallかそうでないかと覚えればオーケー
C++で関数書いてそれの処理を割り込ませるようなことをしない限り気にする必要はない!

まぁなんでeaxの値が返り値なんてことを説明したかといいますと
楓之谷は重要な関数ほど難読化されていて
どこがcallしているのか分からない状態です
しかも複数の関数がその関数をcallしている場合
その関数を強制リターンしてしまうのはあまりよろしくない...
なので関数がcallされた後に返り値を書き換えるようなことが便利だったりするんです(Send Detectionとかね!)
ウェヘヘ...



:

夜行性さん

:2014/11/16(日) 15:42:08
:

夜行性さん

:2014/11/16(日) 17:23:11
:

ラナルータ

:2014/11/16(日) 17:38:43
名前:


javascript無効化してるとコメントが適用されない場合があります。
特殊タグ一覧。
画像貼り付け:[IMG]画像のURL[/IMG]
動画貼り付け:[VIDEO]YoutubeのURL[/VIDEO]
Pastebin貼り付け:[CODE]PastebinのURL[/CODE]