2010-06-04 2 views
6

После того, как задали this question (C++: Can I get out of the bounds of my app’s memory with a pointer?),
Я решил принять, что изменить память другого приложения с помощью указателей (с современной ОС) невозможно.C++: Как работают такие приложения, как Cheat Engine и ArtMoney?

Но если это невозможно, как работают программы, такие как ArtMoney и CheatEngine?

Благодаря

ответ

2

Возможно процесс памяти чтения на Windows. Существует функция, называемая ReadProcessMemory: kernel32.dll: http://msdn.microsoft.com/en-us/library/ms680553(v=VS.85).aspx

Это используется большинством приложений, которые меняют память других приложений. Он также может использоваться для связи между двумя процессами (хотя в основном не рекомендуется).

CheatEngine - отладчик с нетрадиционным интерфейсом.

0

Просто, чтобы дать простое объяснение - dump/hot поиск память процесса для указанного значения и его модификация. Вы можете сделать это, используя некоторые простые функции WinAPI или используя некоторые родные API подпрограммы (я полагаю, так).

Это, очевидно, причина, по которой они терпят неудачу, например, если состояние игры хранится с некоторым шифрованием. Это также причина, по которой вам нужно будет несколько раз изменить свое значение, а затем снова выполнить поиск (чтобы избежать столкновений с поиском, потому что определенно разные блоки памяти могут иметь одинаковое значение).

+1

Очевидно, что они также не будут работать в ситуациях, когда отображаемое значение не равно сохраненному значению в памяти, то есть отображается «x + 1», где 'x' сохраняется в памяти. Поиск 'x + 1' не приведет к расположению' x'. Другие методы шифрования используют пользовательские типы данных, такие как целые числа переменной длины, различный порядок байтов, XOR-обратное хранилище (XOR с '0xFFFF') и т. Д. – Pindatjuh

Смежные вопросы