Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
CtrlDe
0 / 0 / 1
Регистрация: 14.05.2017
Сообщений: 11
Завершенные тесты: 1
1

Пройтись по всем адресам

21.06.2017, 22:48. Просмотров 468. Ответов 5
Метки нет (Все метки)

Пытаюсь написать программу на подобии Cheat Engine, чтобы я вводил double число,
а она мне выводила в консоль кол-во адресов с сопутствующими значениями.

Думаю использовать функцию
C++
1
ReadProcessMemory()
,
однако не знаю как перебрать все адреса. Какая функция (или 2-ой параметр вышеуказанной функции) может помочь?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2017, 22:48
Ответы с готовыми решениями:

Пройтись по всем строкам
Помогите, пожалуйста. Я не могу найти информацию о том, как пройти все строки до конца. То есть...

Рассылка сообщений всем адресам в MySQL
Привет всем ... хотелось бы сделать рассылку сообщений всем адресам в MySQL. В инете ничего...

Как пройтись по всем переменным?
у меня есть переменные x1,x2,x3,.....,xn. есть какой нибудь способ пройтись по ним всем и каждой...

Пройтись по всем editText в цикле
Как пройтись по всем editText в цикле?

Пройтись по всем элементам в TreeView
Здравствуйте. кинул на форму trrView, а в нее добавил кучку checkbox. подскажите как пройтись по...

5
iDReeM
61 / 65 / 18
Регистрация: 21.10.2015
Сообщений: 228
Завершенные тесты: 2
27.06.2017, 00:32 2
кратко, Очень кратко.


во первых, нужно идентифицировать процесс, память которого ты хочешь сканировать.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
DWORD GetSystemProcessID(const CHAR* Process) 
{
    HANDLE snap;
    PROCESSENTRY32 pentry32;
    snap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    if(snap==INVALID_HANDLE_VALUE) return 0;
    pentry32.dwSize=sizeof(PROCESSENTRY32);
    if(!Process32First(snap,&pentry32)) {CloseHandle(snap);return 0;}
    do
    {
        if(!lstrcmpi(Process,&pentry32.szExeFile[0]))
        {
            CloseHandle(snap);
            return pentry32.th32ProcessID;
        }
    }
    while(Process32Next(snap,&pentry32));
    CloseHandle(snap);
    return 0;
}
Получаешь Id процесса, далее OpenProcess открываешь хендлы процесса, после получаешь список модулей процесса, EnumProcessModules (как пример), базовые адреса модулей и размеры, далее отсеиваешь системные модули, оставляя только модули принадлежащие к игре. (получаешь путь к системным папкам и сравниваешь пути модулей, отсеивая все системные и модули MVS и тому подобные не принадлежащие игре). Далее VirtualQueryEx от начала каждого модуля + RegionSize в плоть до конца, так ты сможешь отсеять не нужную память, если в структуре MEMORY_BASIC_INFORMATION State помечен как MEM_COMMIT или Protect помечен как PAGE_NOACCESS то регион памяти можно сразу пропускать, это уменьшит объем памяти для поисков.
Далее, ты собираешь все эти регионы в списки (можно занести в контейнер), и дампишь в свою программу (читаешь каждый регион памяти ReadProcessMemory), после, внутри своей программы, перебираешь каждый из этих регионов, в поисках нужного значения. как сортировать моссивы и тп объяснять не буду.
0
Убежденный
Ушел с форума
Эксперт С++
16271 / 7337 / 1183
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
27.06.2017, 21:07 3
Цитата Сообщение от iDReeM Посмотреть сообщение
Далее VirtualQueryEx от начала каждого модуля + RegionSize в плоть до конца
А что, кроме модулей в памяти процесса нет совсем ничего другого?


В целом, все написано грамотно и правильно, только я бы начинал сканирование с самых
нижних адресов и заканчивая адресами, где кончается территория пользователя (user space) и
начинаются адреса ядра (kernel space).
0
jupman
230 / 133 / 19
Регистрация: 10.11.2015
Сообщений: 305
28.06.2017, 13:52 4
Цитата Сообщение от iDReeM Посмотреть сообщение
State помечен как MEM_COMMIT ... то регион памяти можно сразу пропускать
Опечатались, как раз MEM_COMMIT пропускать не нужно.
0
iDReeM
61 / 65 / 18
Регистрация: 21.10.2015
Сообщений: 228
Завершенные тесты: 2
12.07.2017, 05:08 5
Цитата Сообщение от Убежденный Посмотреть сообщение
А что, кроме модулей в памяти процесса нет совсем ничего другого?
Это сканирование памяти для игры, что ты еще сканировать предлагаешь? ресурсы? мап файлы? под сканированием памяти игры чаще всего подразумевают сканирование кода (начинаем с BaseAddress заканчивается BaseAddress + SizeOfCode)
Цитата Сообщение от Убежденный Посмотреть сообщение
В целом, все написано грамотно и правильно, только я бы начинал сканирование с самых
нижних адресов и заканчивая адресами, где кончается территория пользователя (user space) и
начинаются адреса ядра (kernel space).
што? от 00000000 до 7FFFFFFF (для x32 вроде бы).. зачем? А если клиент игры весьма крупный? ты вероятней всего получишь овер штеплер двести-триста милионов левых результатов которые к игре могут вообще не относится и отсылаться скажем на память либы mvs, и именно эти совпадения пронесут твоему пк жопную боль, там либо под 16 гб озу иметь либо на жесткий диск писать, что то, что другое дрочь. В общем, с этим подходом можно забыть об оптимизации и не вспоминать. Если игра маленькая, и задрачиваться лень, то конечно. А так, не..

Цитата Сообщение от jupman Посмотреть сообщение
Опечатались, как раз MEM_COMMIT пропускать не нужно.
а, точ, сорямба.
0
Убежденный
Ушел с форума
Эксперт С++
16271 / 7337 / 1183
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
12.07.2017, 08:39 6
Цитата Сообщение от iDReeM Посмотреть сообщение
Это сканирование памяти для игры, что ты еще сканировать предлагаешь? ресурсы? мап файлы?
Ты забыл про данные, созданные программой в динамической памяти (new, malloc, etc).
Если сканировать только загруженные модули, то их просто не найдешь.
Впрочем, я задачу ТС не знаю, может, его устроит и твой вариант.
0
12.07.2017, 08:39
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2017, 08:39

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Пройтись по всем объектам json
Народ такая проблема. Допустим я получаю json строку такого типа { {}, { ...

Нужно пройтись по всем элементам
Всем привет. Возникли трудности с jQuery. Нужно пройтись по всем элементам, что бы при нажатии на...

Как пройтись по всем tooltip?
Добрый день, уже который час бьюсь над задачей. Мне нужно пройтись по всем tooltip и получить их...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.