Перейти к содержанию

Рекомендуемые сообщения

Здравствуйте, форумчани! Меня беспокоит давно вопрос, очень часто попадаются игры, где адрес имеет такого характера 

VCRUNTIME140.memcpy+11A - 8B 0A  - mov ecx,[rdx]
VCRUNTIME140.memcpy+11C - 89 08 - mov [rax],ecx

 Если попытаться изменить адрес, игра вылетает. В поиске искал, не знаю как правильно сформулировать вопрос, результа в итоге нет, пробовал трассировать, он переходи в адрес игры, но там все не понятно, какие то значения большие. Может есть ли видео или сайт где показывают как найти адрес, или просто подсказать. Благодарю.
 

Ссылка на комментарий
Поделиться на другие сайты

10 часов назад, bes сказал:

Здравствуйте, форумчани! Меня беспокоит давно вопрос, очень часто попадаются игры, где адрес имеет такого характера

Привет, помню в свое время я тоже натыкался на это. Вот объяснение.

Код игры состоит из множества функций. Функции 'А', 'Б', 'В', 'Г', 'Д' и т.д. Функция 'А' например работает с функцией 'Б'. А функции 'Г'  с функцией 'Д' . Одни игровые функции работают с другими игровыми функциями. Но бывают случаи когда какая-либо игровая функция работает не только с игровыми функциями, но еще и с НЕ игровыми функцией. Например как вот с этой НЕ игровой memcpy.

 

Последовательность работы игрового движка грубо говоря такая:

- выполняется игровая функция А

- выполняется игровая функция Г

- выполняется НЕ игровая функция memcpy

- выполняется игровая функция С

- выполняется игровая функция Е

 

Игра вылетает из--за того что происходит неправильная инъекция в memcpy . Именно устанавливаются некорректные значения для регистров. Если все делать правильно, то все будет работать. Но как @Xipho уже написал, не стоит вклиниваться в НЕ игровую функцию. Мало ли что там с ней будет после ее обновления. Как я понимаю.

 

Лучшее решение это вклиниться после выполнения memcpy

- выполняется НЕ игровая функция memcpy

------------------ вот сюда ----------------

- выполняется игровая функция С

 

memcpy  имеет такой прототип

Спойлер

void *memcpy(
   void *dest,
   const void *src,
   size_t count
);

 

После выполнения memcpy значения регистров (R8, R9 кажется, нужно конкретно смотреть в игре) имеют значения *dest и *src. Зная их можно самому докопировать/заменить то что нужно.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.