hacktricks/reversing/reversing-tools-basic-methods/cheat-engine.md

12 KiB
Raw Blame History

Cheat Engine

htARTEHackTricks AWS Red Team Expert でAWSハッキングをゼロからヒーローまで学ぶ

HackTricksをサポートする他の方法

Cheat Engineは、実行中のゲームのメモリ内に重要な値が保存されている場所を見つけて変更するための便利なプログラムです。
ダウンロードして実行すると、ツールの使用方法に関するチュートリアルが表示されます。ツールの使用方法を学びたい場合は、チュートリアルを完了することを強くお勧めします。

何を探していますか?

このツールは、プログラムのメモリ内にある特定の値(通常は数値)の保存場所を見つけるのに非常に役立ちます。
通常、数値4バイト形式で保存されますが、doublefloat形式で見つけることもできますし、数値以外のものを探したい場合もあります。そのため、検索する内容を選択する必要があります:

また、異なる種類の検索を指定することもできます:

また、メモリのスキャン中にゲームを停止するためのチェックボックスをオンにすることもできます:

ホットキー

_編集 --> 設定 --> ホットキー_で、ゲームを停止するなど、異なる目的のために異なるホットキーを設定できます(メモリのスキャンを行いたい場合に便利です)。他のオプションも利用可能です:

値の変更

一度探している値場所を見つけたら(次の手順で詳細に説明します)、その値をダブルクリックして変更し、その値をダブルクリックします:

最後に、変更をメモリに適用するためにチェックを入れます

メモリへの変更はすぐに適用されます(ゲームがこの値を再度使用するまで、値はゲーム内で更新されません)。

値の検索

したがって、重要な値(ユーザーのライフなど)を改善したいと仮定し、この値をメモリ内で探しているとします)

既知の変更を通じて

値が100であると仮定し、その値を検索するためにスキャンを実行し、多くの一致を見つけます

その後、値を変更するために何かを行い、ゲームを停止して次のスキャンを実行します:

Cheat Engineは、100から新しい値に変わったを検索します。おめでとうございます、探していた値のアドレスを見つけました。これを変更できます。
複数の値がまだある場合は、再度その値を変更するための何かを行い、別の「次のスキャン」を実行してアドレスをフィルタリングします。

未知の値、既知の変更

値を知らないが、変更方法(および変更の値)を知っている場合、その数値を探すことができます。

したがって、タイプが「Unknown initial value」のスキャンを実行して開始します:

その後、値を変更し、値が変更された方法を示し私の場合は1減少しました次のスキャンを実行します:

選択した方法で変更されたすべての値が表示されます:

値を見つけたら、それを変更できます。

多くの可能な変更があり、結果をフィルタリングするためにこれらの手順を好きなだけ繰り返すことができます:

ランダムメモリアドレス - コードの検索

値を保存しているアドレスを見つける方法を学びましたが、ゲームの異なる実行ではそのアドレスがメモリの異なる場所にある可能性が非常に高いです。そのアドレスを常に見つける方法を見つけましょう。

上記のトリックのいくつかを使用して、現在のゲームが重要な値を保存しているアドレスを見つけます。次に(必要に応じてゲームを停止)、見つかったアドレス右クリックし、「このアドレスを使用している箇所を見つける」または「このアドレスに書き込んでいる箇所を見つける」を選択します:

最初のオプションは、このアドレス使用しているコードの部分を知るのに役立ちます(ゲームのコードを変更できる場所を知るなど、他の用途にも役立ちます)。
2番目のオプション特定であり、この場合はこの値が書き込まれている場所を知るのに役立ちます。

これらのオプションのいずれかを選択すると、デバッガがプログラムにアタッチされ、新しい空のウィンドウが表示されます。今、ゲームプレイし、その変更します(ゲームを再起動せずに)。ウィンドウには、値を変更しているアドレスが表示されるはずです:

値を変更しているアドレスを見つけたら、コードをお好みで変更できますCheat Engineを使用して素早くNOPsに変更できます

したがって、コードが数値に影響を与えないように変更したり、常にポジティブな方法で影響を与えるように変更したりできます。

ランダムメモリアドレス - ポインターの検索

前の手順に従い、興味のある値がどこにあるかを見つけます。次に、「このアドレスに書き込むものを調べる」を使用して、この値を書き込むアドレスを見つけ、それをダブルクリックして逆アセンブリビューを取得します:

次に、新しいスキャンを実行し、「[]」の間の16進値を検索しますこの場合は$edxの値

(複数表示される場合は通常、最小のアドレスが必要です)
これで、興味のある値を変更するポインターを見つけました

アドレスを手動で追加」をクリックします:

次に、「ポインター」チェックボックスをクリックして、見つかったアドレスをテキストボックスに追加しますこのシナリオでは、前の画像で見つかったアドレスは「Tutorial-i386.exe」+2426B0でした

(ポインターアドレスを入力すると、最初の「アドレス」が自動的に入力されることに注意してください)

OKをクリックすると、新しいポインターが作成されます

これで、その値を変更するたびに、値が異なるメモリアドレスにある場合でも重要な値を変更しています

コードインジェクション

コードインジェクションは、ターゲットプロセスにコードを挿入し、その後、コードの実行を自分の書いたコードを通るようにリダイレクトする技術です(ポイントを与える代わりにそれらをリセットするように)。

したがって、プレイヤーの寿命を1減らすアドレスを見つけたと仮定してください

ディスアセンブラを表示するにはクリックします。
次に、CTRL+aをクリックして、自動アセンブルウィンドウを呼び出し、_Template --> Code Injection_を選択します。

変更したい命令のアドレスを入力します(通常は自動入力されます):

テンプレートが生成されます:

したがって、「newmem」セクションに新しいアセンブリコードを挿入し、「originalcode」から元のコードを削除すると、実行されないようになります。この例では、挿入されるコードは1を減算する代わりに2ポイントを追加します

実行をクリックして、その他をクリックして、コードがプログラムにインジェクトされ、機能の動作が変更されるはずです!

参考文献

  • Cheat Engineのチュートリアル、Cheat Engineの使用方法を学ぶために完了してください
htARTEHackTricks AWS Red Team Expert AWSハッキングをゼロからヒーローまで学ぶ

HackTricksをサポートする他の方法