У меня есть этот код, который редактирует адреса в игре, чтобы получить неограниченные боеприпасы, а что нет, и я обнаружил, что адреса разные для каждого компьютера, иногда каждый раз, когда вы перезапускаете игру, так что как мне заставить это работать, даже если они меняются.
Сохранение адреса в коде хакерской игры C++?
Ответы (6)
Если вы получите адрес, который ищете, а затем выполните поиск этого адреса в памяти, чтобы найти адрес указателя на эти данные, а затем выполните поиск этого адреса в памяти, чтобы найти адрес указателя на него и так далее, вы можете в конечном итоге найти адрес, который не меняется. Затем во время выполнения вы можете использовать его в качестве отправной точки и разыменовать его, чтобы найти искомое местоположение. Конечно, все зависит от того, как данные расположены внутри. Это может стать очень сложным.
Сопоставление подписи для содержимого записи в куче. Возможно, используя расстояние редактирования для определенного известного контента.
Ничего страшного, что я отвечаю, поскольку вы должны были спросить, у вас, вероятно, не хватает сил, чтобы осуществить это.
Лучший способ — искать шаблоны в памяти и обрабатывать их с помощью смещений. Это будет непросто просто потому, что разработчики игр хотят положить этому конец.
Таким образом, у них не будет красивой текстовой строки, говорящей: «Боеприпасы хранятся за 27 байт до начала этой строки».
Если они делают хитрые вещи, например перемещают его каждый раз при запуске игры (а я бы так и сделал, потому что я хитрый), вам нужно разобрать их код, чтобы узнать, как они находят объем памяти.
Затем вы делаете то же самое. Я знаю, звучит просто, и это так. Но, основываясь на ваших прошлых вопросах, я не уверен, что «H4cKL0rD» — подходящее прозвище :-), по крайней мере, в этом случае.
Если вам не нравятся дизассемблеры, шестнадцатеричные редакторы и тому подобное, почти наверняка есть программа, которая сделает это за вас.
Вы либо сдаетесь, либо очень хорошо разбираетесь в дизассемблере.
Если вы просто хотите выполнить работу и не заботитесь о том, чтобы написать код самостоятельно, вы можете использовать программу, разработанную специально для этой задачи, например, T-Search.
Я бы сказал, предварительно загрузите какой-нибудь пользовательский распределитель памяти и попробуйте найти размер 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;