12 KiB
Cheat Engine
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
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の使い方を学ぶために完了してください
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.