Модификация памяти в C ++ - PullRequest
       13

Модификация памяти в C ++

3 голосов
/ 28 февраля 2009

я пытаюсь научиться модифицировать игры на C ++, а не игру, а просто память, которую она использует для получения боеприпасов, поэтому кто-то может указать мне на книги

Ответы [ 4 ]

13 голосов
/ 01 марта 2009

Самый удобный способ манипулировать памятью удаленного процесса - создать поток в контексте этой программы. Обычно это достигается путем принудительного внедрения DLL в целевой процесс. Если у вас есть код, выполняющийся внутри целевого приложения, вы можете использовать стандартные подпрограммы памяти. например, (memcpy, malloc, memset).

Я могу вам сказать прямо сейчас, что наиболее удобный и простой в реализации метод - это трюк CreateRemoteThread / LoadLibrary.

Как уже упоминали другие люди, простые хаки могут быть выполнены путем сканирования памяти на известные значения. Но если вы хотите выполнить что-то более продвинутое, вам понадобится отладка и анализ мертвого списка. (Инструменты: ollydbg и IDA pro соответственно).

Вы поцарапали поверхность очень обширной темы хакерства, там есть множество знаний ..

Сначала несколько интернет-ресурсов:

gamedeception.net - сообщество, посвященное игре RE (Reverse Engineering) и взлому.

http://www.edgeofnowhere.cc/viewtopic.php?p=2483118 - Отличное руководство по различным методам внедрения DLL.

Openrce.org - Сообщество по разработке обратного кода.

Я также могу порекомендовать вам книгу - http://www.exploitingonlinegames.com/

Подпрограммы Windows API, которые вы должны изучить (msdn.com):

CreateRemoteThread
LoadLibraryA
VirtualAllocEx
VirtualProtectEx
WriteProcessMemory
ReadProcessMemory
CreateToolhelp32Snapshot
Process32First
Process32Next
4 голосов
/ 28 февраля 2009

Код впрыска:

Я думаю, что лучший способ - это модифицировать исполняемый файл для вставки кода в один из загруженных модулей. Проверьте этот урок

Короткая история:

Более 10 лет назад я помню, как успешно изменял свой счет в пасьянсе в Windows с помощью простой программы на C ++. Я сделал это, запустив указатель int * на некоторый базовый адрес и перебрав адреса памяти (с помощью метода try / catch для отлова исключений).

Я бы посмотрел, какая моя текущая оценка была в одной из этих переменных-указателей, и заменил бы ее новым целочисленным значением. Я просто позаботился о том, чтобы мой текущий счет был неясным значением, которое не содержалось бы во многих адресах памяти.

Как только я нашел набор адресов памяти, соответствующих моему счету, я изменил свой счет вручную в пасьянсе и просмотрел только те адреса памяти, которые были найдены в последней итерации. Обычно это сводится к одному адресу памяти, который содержит счет. В этот момент у меня была волшебная простая строка кода * pCode = MY_DESIRED_SCORE;

Это может быть невозможно, хотя с новыми моделями безопасности памяти. Но метод работал довольно хорошо с 10-20 строчной программой C ++, и мне потребовалось около минуты, чтобы изменить мой счет.

0 голосов
/ 28 февраля 2009

Это можно сделать с помощью хуков на окнах для доступа к области памяти процесса.

0 голосов
/ 28 февраля 2009

Доступно достаточно программ, позволяющих изменять память запущенных программ. И они часто используются для обмана. Но будьте осторожны, используя их в онлайн-играх, потому что большинство читов будут обнаружены, и вас забанят без предупреждения.

Если вам нравится создавать их самостоятельно, просто посмотрите книги, в которых описывается Windows API. Там вы найдете достаточно информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...