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

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

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

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. Зная их можно самому докопировать/заменить то что нужно.

Поделиться сообщением


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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Предпросмотр
Авторизация  

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

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

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