2009-04-22 1 views

答えて

7

あなたが探しているアドレスを取得し、メモリ内のそのアドレスを検索してそのデータへのポインタのアドレスを検索し、そのアドレスを見つけることができるようにそのアドレスをで検索します。そのポインタへのポインタなど、変更されないアドレスを最終的に見つけることができます。次に、実行時に、それを開始点として使用し、逆参照して、探している場所を見つけることができます。もちろん、そのすべてはデータが内部的にどのようにレイアウトされているかによって異なります。それは非常に複雑になることがあります。

+1

私が考えることができるのは、キャラクタデータがハッシュに格納されている場合(たとえば、各プレーヤにハッシュキーとしてランタイムに割り当てられたGUIDがある場合など)、どのバケットを探すのが楽しいのかが分かります。 :-P –

+1

探しているデータが、ある時点でローカルにインスタンス化される構造体/クラスに基づいていますが、グローバル変数または静的変数にはインスタンス化されていない場合は、静的ポインタを見つけることはありません。必要なときに必要なデータにアクセスするコードを見つけ、そのコードをフック内のある場所で割り当てられたコードにリダイレクトする必要があります。強化されたO/Sは新しいコードの導入を禁止するため、これは常に可能なわけではありません。 _do_多くの静的ポインタが見つかった場合は、プログラムがひどく書かれていることを示している可能性があります:) –

1

あなたは、あきらめようとしているか、逆アセンブラでうまくいくかのどちらかです。

+0

なぜこのありえないは狙撃兵と混乱弾薬 – H4cKL0rD

+0

逆アセンブラを保持しているアドレスの値を持つ(またはメモリのような、より専門的なツールを言うことができますだけのゲームで住所を検索する方法はありスキャナ - あなたの他の質問に対する答えを見てください)*はあなたが単に "住所を見つける"方法です。それを簡単にするかもしれないことの1つは、おそらくゲームにはおそらく常に同じオフセットがあるということです(ただし、動きのある反チートアルゴリズムがあるかもしれませんが、私は驚かれるでしょう)。ゲームプロセスのベースアドレスを見つけることができれば、あなたは設定されています。 –

+3

異なる操作シーケンスは、異なる時間に割り当てられた異なるものと割り当てられた数の異なるもので終わる可能性があり、そのためにアドレスが異なる可能性があることを忘れないでください。ゲームにランダム化がある場合は、それも要因になる可能性があります。共有ライブラリ(o/sによって提供される)のロード・アドレスのランダム化を検討する前です。 –

8

ヒープ内のレコード内容のシグネチャ一致。特定の既知のコンテンツに対して編集距離を使用している可能性があります。

害はありません私はあなたが尋ねなければならなかったので、おそらくあなたはそれを取り除くためのチョップを持っていないと答えています。

+8

厳しいが、真実。 – ojrac

2

最も良い方法は、メモリ内のパターンを探して、オフセットを使ってそれを処理することです。これは、ゲーム開発者が止めたいと思うようなものであるため、単純ではありません。

だから、 "Ammoはこの文字列の開始前に27バイトを保存しました"という素晴らしいテキスト文字列を持っていないでしょう。

ゲームが実行されるたびに動き回るようなトリッキーなことをしているなら、私は悪意のあるためにコードを分解する必要があります。

あなたは同じことをします。私は知っている、簡単に聞こえるし、それはあります。しかし、あなたの過去の質問に基づいて、私は "H4cKL0rD"が適切なモニカであるかどうかわからない:-)、少なくともこの場合は。

逆アセンブラ、16進エディタなどに不快な場合は、ほぼ確実にそれを実行するプログラムがあります。

1

仕事をしたいだけで、自分でコーディングしても構わない場合は、T-Searchのようなこのタスク専用に設計されたプログラムを使用できます。

+0

これらのidkを使って私は大丈夫ですim lookiong何かを知っていますか? – H4cKL0rD

+1

のコアを見つける方法は基本的に値を検索し、ゲーム内で何かをしたり、検索を絞り込んだりするなどしてその値を変更し、メモリ内に可能な場所が1つしかない場合は、変更することができます。 –

+0

いいえ私はそれを行う方法はわかっていますが、ゲームの起動時にすべてのコンピュータによってアドレスが変更されることがあります – H4cKL0rD

0

私はいくつかのカスタムメモリアロケータをプリロードして、あなたが探している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; 
関連する問題