ゲーム内のアドレスを編集して無制限の弾薬を取得するこのコードがありますが、アドレスはコンピューターごとに異なり、ゲームを再起動するたびに異なることがわかりました。彼らは変わります。
6 に答える
ヒープ内のレコード コンテンツのシグネチャ マッチング。特定の既知のコンテンツに対して編集距離を使用している可能性があります。
あなたが尋ねなければならなかったので、私が答えている害はありません.あなたはおそらくそれをやってのけるチョップを持っていません.
探しているアドレスを取得し、メモリ内でそのアドレスを検索してそのデータへのポインターのアドレスを見つけ、次にメモリ内でそのアドレスを検索して、それへのポインターのアドレスを見つけることができる場合、など、最終的に変更されないアドレスが見つかる場合があります。次に、実行時にそれを開始点として使用し、逆参照して探している場所を見つけることができます。もちろん、それはすべて、データが内部でどのようにレイアウトされているかによって異なります。非常に複雑になる可能性があります。
最良の方法は、メモリ内のパターンを探し、オフセットを使用して解決することです。これは、ゲーム開発者がやめたいと思っていることだからといって、簡単なことではありません。
そのため、「弾薬はこの文字列の開始前に 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;