Cheat Engine

Reading time: 12 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

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

何を検索していますか?

このツールは、プログラムのメモリ内にどこにある値(通常は数値)が保存されているかを見つけるのに非常に便利です。
通常、数値4バイト形式で保存されますが、ダブルフロート形式で見つかることもありますし、数値以外の何かを探すこともあるかもしれません。そのため、検索したいものを選択することを確認する必要があります:

また、異なるタイプの検索を指定することもできます:

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

ホットキー

Edit --> Settings --> Hotkeys では、ゲーム停止するなどの目的のために異なるホットキーを設定できます(これは、メモリをスキャンしたいときに非常に便利です)。他のオプションも利用可能です:

値の変更

探しているがどこにあるかを見つけたら(このことについては次のステップで詳しく説明します)、それをダブルクリックして変更できます。次に、その値をダブルクリックします:

最後に、メモリ内で変更を行うためにチェックを入れます

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

値の検索

では、ユーザーのライフのような重要な値を改善したいと仮定し、その値をメモリ内で探しているとしましょう。

既知の変更による

値100を探していると仮定し、その値を検索するためにスキャンを実行すると、多くの一致が見つかります:

次に、値が変更されるようなことを行い、ゲームを停止して次のスキャンを実行します:

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

不明な値、既知の変更

値がわからないが、どのように変更するかはわかっている(変更の値もわかっている)場合は、数値を探すことができます。

まず、不明な初期値のスキャンを実行します:

次に、値を変更し、どのようにその値が変更されたかを示し(私の場合は1減少しました)、次のスキャンを実行します:

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

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

結果をフィルタリングするために、可能な変更がたくさんあることに注意してください

ランダムメモリアドレス - コードの発見

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

前述のトリックのいくつかを使用して、現在のゲームが重要な値を保存しているアドレスを見つけます。次に(ゲームを停止しても構いません)、見つけたアドレスを右クリックし、**「このアドレスにアクセスするものを見つける」または「このアドレスに書き込むものを見つける」**を選択します:

最初のオプションは、どのコードの部分がこのアドレス使用しているかを知るのに役立ちます(これは、ゲームのコードを変更できる場所を知るのに役立ちます)。
2番目のオプションはより具体的で、この値がどこから書き込まれているかを知るのに役立ちます。

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

値を変更しているアドレスを見つけたら、自由にコードを変更できます(Cheat Engineでは、NOPにすぐに変更できます):

これで、コードがあなたの数値に影響を与えないように変更することができますし、常にプラスの影響を与えるようにすることもできます。

ランダムメモリアドレス - ポインタの発見

前のステップに従って、興味のある値がどこにあるかを見つけます。次に、**「このアドレスに書き込むものを見つける」**を使用して、この値を書き込むアドレスを見つけ、ダブルクリックしてディスアセンブリビューを取得します:

次に、"[]"の間の16進数値を検索する新しいスキャンを実行します(この場合は$edxの値):

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

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

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

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

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

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

コードインジェクション

コードインジェクションは、ターゲットプロセスにコードの一部を注入し、その後、コードの実行を自分が書いたコードを通過させる技術です(例えば、ポイントを減らすのではなく与えるなど)。

では、プレイヤーのライフから1を引いているアドレスを見つけたと想像してください:

ディスアセンブラを表示して、ディスアセンブルコードを取得します。
次に、CTRL+aを押してオートアセンブルウィンドウを呼び出し、_Template --> Code Injection_を選択します。

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

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

そのため、newmemセクションに新しいアセンブリコードを挿入し、originalcodeから元のコードを削除します(実行したくない場合)。この例では、注入されたコードは1を引くのではなく2ポイントを追加します:

実行をクリックすると、あなたのコードがプログラムに注入され、機能の動作が変更されるはずです!

参考文献

  • Cheat Engineチュートリアル、Cheat Engineを始めるために完了してください

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする