ゲーム内のアドレスを編集して無制限の弾薬を取得するコードを持っていますが、どのコンピュータでもアドレスが異なっていることがわかりました。彼らが変わっても。C++ハッキングゲームコードでアドレスを保持していますか?
答えて
あなたが探しているアドレスを取得し、メモリ内のそのアドレスを検索してそのデータへのポインタのアドレスを検索し、そのアドレスを見つけることができるようにそのアドレスをで検索します。そのポインタへのポインタなど、変更されないアドレスを最終的に見つけることができます。次に、実行時に、それを開始点として使用し、逆参照して、探している場所を見つけることができます。もちろん、そのすべてはデータが内部的にどのようにレイアウトされているかによって異なります。それは非常に複雑になることがあります。
あなたは、あきらめようとしているか、逆アセンブラでうまくいくかのどちらかです。
なぜこのありえないは狙撃兵と混乱弾薬 – H4cKL0rD
逆アセンブラを保持しているアドレスの値を持つ(またはメモリのような、より専門的なツールを言うことができますだけのゲームで住所を検索する方法はありスキャナ - あなたの他の質問に対する答えを見てください)*はあなたが単に "住所を見つける"方法です。それを簡単にするかもしれないことの1つは、おそらくゲームにはおそらく常に同じオフセットがあるということです(ただし、動きのある反チートアルゴリズムがあるかもしれませんが、私は驚かれるでしょう)。ゲームプロセスのベースアドレスを見つけることができれば、あなたは設定されています。 –
異なる操作シーケンスは、異なる時間に割り当てられた異なるものと割り当てられた数の異なるもので終わる可能性があり、そのためにアドレスが異なる可能性があることを忘れないでください。ゲームにランダム化がある場合は、それも要因になる可能性があります。共有ライブラリ(o/sによって提供される)のロード・アドレスのランダム化を検討する前です。 –
ヒープ内のレコード内容のシグネチャ一致。特定の既知のコンテンツに対して編集距離を使用している可能性があります。
害はありません私はあなたが尋ねなければならなかったので、おそらくあなたはそれを取り除くためのチョップを持っていないと答えています。
厳しいが、真実。 – ojrac
最も良い方法は、メモリ内のパターンを探して、オフセットを使ってそれを処理することです。これは、ゲーム開発者が止めたいと思うようなものであるため、単純ではありません。
だから、 "Ammoはこの文字列の開始前に27バイトを保存しました"という素晴らしいテキスト文字列を持っていないでしょう。
ゲームが実行されるたびに動き回るようなトリッキーなことをしているなら、私は悪意のあるためにコードを分解する必要があります。 。
あなたは同じことをします。私は知っている、簡単に聞こえるし、それはあります。しかし、あなたの過去の質問に基づいて、私は "H4cKL0rD"が適切なモニカであるかどうかわからない:-)、少なくともこの場合は。
逆アセンブラ、16進エディタなどに不快な場合は、ほぼ確実にそれを実行するプログラムがあります。
私はいくつかのカスタムメモリアロケータをプリロードして、あなたが探しているmalloc()サイズを見つけようとします。
ハッキングしようとしているデータは他のパラメータを持つ構造体に格納されている可能性が高いため、構造体サイズを知ることでこのサイズの割り当てが割り当てられたときに特別な処置を取ることができます。
typedef struct {
int ammo;
int damage;
int fire_distance;
} Sniper_AWP_T;
void *my_custom_malloc(int size){
void *ret = malloc(size);
if(size == sizeof(Sniper_AWP_T)){
hack_address = ret;
}
return ret;
}
// later on
hack_address->ammo = 999;
私が考えることができるのは、キャラクタデータがハッシュに格納されている場合(たとえば、各プレーヤにハッシュキーとしてランタイムに割り当てられたGUIDがある場合など)、どのバケットを探すのが楽しいのかが分かります。 :-P –
探しているデータが、ある時点でローカルにインスタンス化される構造体/クラスに基づいていますが、グローバル変数または静的変数にはインスタンス化されていない場合は、静的ポインタを見つけることはありません。必要なときに必要なデータにアクセスするコードを見つけ、そのコードをフック内のある場所で割り当てられたコードにリダイレクトする必要があります。強化されたO/Sは新しいコードの導入を禁止するため、これは常に可能なわけではありません。 _do_多くの静的ポインタが見つかった場合は、プログラムがひどく書かれていることを示している可能性があります:) –