ゲーム用のエイムボットを作成しようとしていますが、ここで問題が発生しています。どうすればプレイヤーベースを見つけることができますか? プレイヤー ベースを見つけたら、X、Y 位置、現在のお金、弾薬、ヘルス、アーマーなど、必要なすべての情報を取得できます。これには CheatEngine 6.4 を使用しています。
2 に答える
「PlayerBase」という用語は、プレーヤー オブジェクトの動的アドレスを指します。ヘルス、アーマーなどの変数は、通常、プレイヤー クラスのメンバー変数になります。弾薬などの変数は、武器クラスのメンバー変数にすることもできるため、すべてのオフセットがプレイヤー オブジェクトのアドレスに対して相対的になるわけではありません。しかし、現在の武器オブジェクトを指しているプレイヤー オブジェクト内のポインターがよく見られます。
ゲームが作成されると、コンパイラは、定義されたクラスを使用して、アドレスと相対オフセットによって変数にアクセスする命令を作成します。目標は、これらの変数にアクセスするゲーム ロジックを複製することです。
プレーヤー クラスのメンバーであると思われる変数を見つけるには、チート エンジンでスキャンしてから、変数のアドレスに対して "アクセスするものを検索" を使用します。これは、その変数にアクセスするすべての命令をリストします。「mov eax [ebx+14c]」のようなものが表示されることを願っています。この場合、ebx に保持されているアドレスはプレイヤー オブジェクトのアドレスであり、0x14c はヘルス変数へのオフセットです。これは通常、ゲームを実行するたびに異なる動的アドレスです。次に、常に正しいアドレスを指す、使用できるこのアドレスへのポインターを見つけたいと思うでしょう。これを行うには、コードを逆方向にトレースし、現在の関数内またはコール スタック内の前の関数のいずれかで ebx が値を取得する場所を確認します。
私は通常、すべてのゲームで同じことを行い、これを次のように馬鹿にします: 良好なヘルス ポインターを見つけて、最後のオフセットを削除します。これは「プレイヤーベース」へのポインタです
Y 軸を検索し、未知の初期値を検索し、float 型を検索します。はしごを上って、増加した値を検索します。歩いて値を減らし、Y アドレスが見つかるまでこれを続けます。右クリックして「Memory View for this value
」を押します。新しいデータ構造を分析します。これで構造体ができました。そこにメモリ アドレスの配列があり、Y アドレス - 8 を入力します。次に、すべての XYZ とアドレスを取得する必要があります。現在一番上にある x アドレスを入力し、「-」4.上のアドレスが PlayerBase になりました。XYZ が必要な場合は、" PlayerBase + XOffset
" を使用します。X - 4 を使用したため、X は Base の 4 バイト前になります。Z は X の 4 バイト前になるため、PlayerBase + 8 となり、Y は "+" 0x0C になります。 . Cheat Engine
アドレスの後ろのオフセットを示します。