5

ほとんどのゲーム ボット アプリケーションは、特定のバージョンのゲーム クライアントに対して見つけた一連のメモリ オフセットを使用して、ボットを容易にします。ヘルス、x/y 位置などのメモリ オフセットがある場合があります。ゲームがアップデートをリリースするたびに、ボット プログラムが使用するさまざまな情報のオフセットも再検索して更新する必要があります。

ペット プロジェクトとしてソリティア ボットを作成することに興味があります。ここを見ると、mmoglider (商用ボット) は、ボット プログラム (通常はボット WoW に使用されます) のデモとしてこれを既に達成しています: MMOGlider が Vista Solitaire をボットする YouTube ビデオ。

さまざまな有用なメモリ オフセットを正確に特定する一般的な方法は何ですか? ソリティア プログラムで「デッキ」を指すメモリ オフセットを特定し、それを使用してスタックにあるカードを特定するにはどうすればよいですか? グライダーの担当者との経験から、彼らがデッキ自体のオフセットを見つけることができると、デッキ全体のすべてのカード値がそこにあると言ったことを知っています.

では、リバース エンジニアリングや、既存のプログラムからメモリ オフセットを引き出した経験のある人はいますか? そして、これらのオフセットを取得したら、メモリ内のその「デッキ」構造から値を取得して読み取る方法を教えてください。

4

1 に答える 1

10

通常、このようなタスクには 2 つのアプローチがあります。簡単にするために、プレイヤーの「ヘルス」が整数であるゲームを考えてみましょう。

1 つ目は、プログラムの実行中にプロセス メモリを操作することです。これは、既知の値を見つけるのに適しています。ゲームで 100 のヘルスがある場合、メモリ スペースで 100 (ほとんどの場合整数) を検索し、見つかったすべての場所を記録します。次に、健康状態が 99 に変化したら、同じ場所を横断検索して、適切に変化した場所を確認します。健康変数の正確な位置を絞り込むまで続けます。最近のほとんどのゲームでは、構造体の一部である動的に割り当てられたメモリ アドレスが実際に見られます。その構造体はプログラム内のポインターによって参照されます。次に、健康変数の近くのスペースへのポインターである可能性のある値をプログラム メモリ内で検索する必要があります。この絞り込みを複数回のゲーム実行で繰り返し、目的のデータへのポインターの位置を確立します。これは、従来の PC やコンソール ゲーム、特にメモリ空間が小さくて操作しやすいゲームで最も役立つ方法です。

2 番目の方法では、アプリケーション バイナリを逆アセンブルし (これにはIDA Proを使用します)、必要なデータを使用することがわかっている関数を見つけます。たとえば、画面に「Health: 99」と表示されているとします。バイナリで「Health:」文字列を検索し、その文字列への参照を見つけて (sprintf などの呼び出しが見つかる可能性があります)、同じ関数が参照する他のメモリの場所を確認します。これは通常、「health」につながります。変数またはそれを含む構造体。これは、大規模なメモリ空間とより高度なプログラミング手法を備えた最新のゲームで最も一般的な方法です。

于 2009-01-07T02:17:05.717 に答える