Cheat Engineで見つけるのが難しい値や命令を見つけよう!

前回に引き続き、参考になる動画があったのでご紹介します。Cheat Engine等でアセンブリ言語を追いかけないと見つけることができない値や関数を探す方法です。見つけるのが難しいチートは、ほとんどの場合この記事と同じようなやり方で探します。ぜひ読んで実践してみてください。

動画URLは以下のリンクから

この動画ではOllyDbgが使われてますが、Cheat Engineでも同じことが出来ます。

Recoil関数を見つける(和訳)

ステップ1 – チートエンジンでアドレスを見つける
ステップ2 – そのアドレスに書き込んでいる命令を見つける
ステップ3 – 書き込んでいる命令のアドレスをOllyDbgで検索する
ステップ3.5 – ハードウェアブレークポイントを設定して、その関数の最初と最後を特定する。
        例えばFiringGun関数など。
        こうすることによって、どこからどこまでをデバッグすればいいのかがわかります。
ステップ4 – すべてのジャンプ命令を逆にします。 例えば、JNZをJEにします。
ステップ5 – コメントを書き込んで命令を書き換え、一度テストする。
ステップ6 – ゲームがクラッシュした場合は、そのアドレスに戻りコメントを残すだけです。
        例えばnopクラッシュ、または命令反転クラッシュという感じに。
ステップ7 – ollydbgとゲームを毎回再起動する必要があり、面倒な場合があります

デバッグ時のコメントは非常に重要です!あなたが最後に作業した場所を確実に覚えておくために、常にコメントを入れておきましょう。

ここにいくつかのガイドラインを紹介します。

命令を変更する際の順序:
1番 すべてのジャンプコマンドを逆にする
2番 すべてのCALL命令はNOPEDである必要があります

それでも目的の関数が見つからない場合はより複雑な命令を試していきます。

3番 まだNOPしていない命令をNOPする。
例:
MOV BYTE PTR DS:[EAX + 218]、BL

実際の命令がコピーされていないため

4番 クラッシュする可能性が最も高いものを最後まで残しておきます。
例:
MOV EAX、DWORD PTR DS:[ESI + 8]
ADD EAX, 4

これらの命令は非常にクラッシュしやすいです。
このような命令をNOPEDにした場合、他の命令もNOPにしなければならないことがあります。
次のCALL命令までの上、またはその下のいくつかの命令です。
なぜそうなるかというと、これらの命令の値が次の関数で使用される可能性があるためです。
使用されている場合、ゲームがクラッシュすることがあります。
これには何度もトライ&エラーが必要です。

JMP命令を逆にする

JG ⇔ JL

JLE ⇔ JG

JE ⇔ JNZ

これは主に試行錯誤についてです

以下のような命令は無視する必要があります(命令のグループの一部でない限り)
CMP – 比較の略で、これは通常、ジャンプの前に見られます
LEA  – より高度な計算に使用されます
POP、PUSH、RETNは反動、弾薬、および私たちが通常探しているその他の情報とはあまり関係がありません。Intは通常、まったく無関係です。

お役に立てれば幸いです

手順(要約)

1. 弾丸のアドレスの見つける
2. 弾丸のアドレスに書き込んでいる命令を見つける
3. その命令がある関数の先頭と終端を特定する
4. ジャンプ命令を逆にする
5. 命令を書き換える際は必ずコメントをつける
6. CALL命令を潰していき絞り込んでいく
7. 場合によってはCALL命令の上と下のいくつかの命令も潰す(クラッシュを避けるため)
8. 最後に残ったのが目的の関数

まとめ

いかがでしたでしょうか?命令を潰していき、絞り込んでいく感覚がわかったと思います。アセンブリ言語はC言語やその他の高級言語のようにソースを見て「あっ、これはプロセスIDを取得していて...」という感じで分かるわけではありません。プログラムを動かしながらデバッグすることで始めて処理内容が分かってきます。そのためのテクニックが当記事の内容です。

特に重要なのがブレークポイントの使い方です。BPを設定してみることで「ここはループしている」、「ここは銃を撃った時に1度だけ実行される命令だな」などわかってくることがたくさんあります。

また、ジャンプ命令は逆にしてみるだけでも何らかのチートが見つかることがあります。ようは条件分岐を反対にしているわけです。筆者もこのやり方でいくつかチートを見つけことがあります。

最後に、翻訳が微妙でわかりにくい部分もあると思いますが、動画を何回も見返して高度なデバッグ技術を一緒に身につけましょう!

POINT:
ジャンプ命令を逆にしてみよう
関数を潰してみよう

関連記事

0 Comments

Post a comment