2015-01-29 3 views
2

Недавно я узнал, как найти базовые адреса процесса с помощью Cheat Engine. Я сделал это на Windows XP с Solitaire, и я нашел базовый адрес для оценки (что-то вроде 000AABBC), и этот адрес так и не изменился.Использование Cheat Engine Base Address в программе на C++

Итак, я создал программу на C++, которая использовала WriteProcessMemory(); (я только что передал этот адрес), и она работала каждый раз. Теперь я делаю это в Windows 7, я нахожу базовый адрес, но это указатель и адрес, который он указывает на изменения каждый раз. Когда я проверяю адрес указателя, он говорит "solitaire.exe"+000BAFD8. Итак, как я могу использовать его в коде, как раньше?

ответ

4

Address space layout randomization предназначен для обеспечения того, что базовый адрес отдельных сегментов макета памяти процесса изменяется каждый раз.

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

+0

Так что нет никакого способа сделать это? :(Или это сложно? – user3478487

+1

@ user3478487 Никакого оскорбления не было, но если вы не знали об ASLR заранее, вы, вероятно, не сможете его победить. Конечно, ничего невозможного - например, операционная система не применяется ASLR, когда процесс информирует ОС о том, что он не может справиться с этим (что происходит, когда базовые адреса жестко закодированы), который один * может * иметь возможность использовать с достаточными разрешениями. –

+0

@ user3478487 Просто найдите идентификатор процесса, у которого есть это имя. Вы можете начать здесь: https://msdn.microsoft.com/en-us/library/windows/desktop/ms682629%28v=vs.85%29.aspx – reader

0

Вы можете перечислить модули процесса и получить их базовый адрес, в этом случае адрес модуля solitaire.exe. Это должно дать вам последовательный адрес независимо от ASLR.

См: Getting a list of DLLs currently loaded in a process C#