C++ Вопрос Чтение памяти

Начинающий
Статус
Оффлайн
Регистрация
5 Янв 2023
Сообщения
2
Реакции[?]
0
Поинты[?]
0
Доброго времени суток. Не получается разобраться с чтением памяти игры.
Есть базовый адрес со смещениями - "Engine.dll"+008A6AE4+9CC+18+30+444+4+2FC+8C = 252D850C, по которому лежит значение хп. Если обращаюсь напрямую к конечному адресу 252D850C - значение хп могу считать, но если я пытаюсь прочитать по адресу "Engine.dll"+008A6AE4 - получаю ерунду какую-то.
Скорее всего - я не правильно читаю по адресу, который содержит .длл. Пытался следующим образом:
C++:
DWORD hp = (DWORD)GetModuleHandleA("Engine.dll") + 0x8A6AE4;
но значение по адресу, которое я получаю, не бьется со значением из СЕ.

Код:
C++:
DWORD hp = (DWORD)GetModuleHandleA("Engine.dll") + 0x8A6AE4;
DWORD buff_1 = 0;
ReadProcessMemory(hProc, (PBYTE*)hp, &buff_1, sizeof(int), NULL);
 
Забаненный
Статус
Оффлайн
Регистрация
2 Фев 2021
Сообщения
453
Реакции[?]
82
Поинты[?]
3K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Ну так ты написал что у тебя адресс со смещением, а смещение ты не полностью написал
тебе надо сделать вот так:
C++:
DWORD hp = (DWORD)GetModuleHandleA("Engine.dll") + 0x8A7CC8;
DWORD buff_1 = 0;
ReadProcessMemory(hProc, (PBYTE*)hp, &buff_1, sizeof(int), NULL);
 
Участник
Статус
Оффлайн
Регистрация
23 Апр 2022
Сообщения
695
Реакции[?]
326
Поинты[?]
12K
Доброго времени суток. Не получается разобраться с чтением памяти игры.
Есть базовый адрес со смещениями - "Engine.dll"+008A6AE4+9CC+18+30+444+4+2FC+8C = 252D850C, по которому лежит значение хп. Если обращаюсь напрямую к конечному адресу 252D850C - значение хп могу считать, но если я пытаюсь прочитать по адресу "Engine.dll"+008A6AE4 - получаю ерунду какую-то.
Скорее всего - я не правильно читаю по адресу, который содержит .длл. Пытался следующим образом:
C++:
DWORD hp = (DWORD)GetModuleHandleA("Engine.dll") + 0x8A6AE4;
но значение по адресу, которое я получаю, не бьется со значением из СЕ.

Код:
C++:
DWORD hp = (DWORD)GetModuleHandleA("Engine.dll") + 0x8A6AE4;
DWORD buff_1 = 0;
ReadProcessMemory(hProc, (PBYTE*)hp, &buff_1, sizeof(int), NULL);
Ты просто не понял сути, советую прочитать детальнее о смещениях и в целом о памяти.А так по теме -

работать это должно в таком виде

C++:
    HANDLE proc_handle = 0; // тут получаешь дескриптор процесса

    std::uint32_t base = reinterpret_cast<std::uint32_t>(GetModuleHandleA("Engine.dll")) + 0x8a6ae4; // тут ты прибавляешь смещение к  базовому адресу модуля
    std::vector<std::uint32_t> offsets = { 0x9cc, 0x18, 0x30, 0x444, 0x4, 0x2fc, 0x8c };

    std::uint32_t result = base;

    for(auto& o : offsets)
    {
        ReadProcessMemory( proc_handle , reinterpret_cast< void** >( result + o ) , &result , sizeof( result ) , nullptr ); // тут в цикле считываешь каждое предыдущее значение + текущее смещение ( в этом и суть , смещение прибавляется не к стартовому адресу , а к новому адресу которой ты получаешь в результате всех операций перед текущим смещением)
    }
 
Пользователь
Статус
Оффлайн
Регистрация
8 Апр 2022
Сообщения
674
Реакции[?]
107
Поинты[?]
70K
а вы тоже юзаете ридпроцессмемори, когда можно напрямую читать, если ты и так юзаешь getmodulehandle?
 
Забаненный
Статус
Оффлайн
Регистрация
2 Фев 2021
Сообщения
453
Реакции[?]
82
Поинты[?]
3K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Участник
Статус
Оффлайн
Регистрация
23 Апр 2022
Сообщения
695
Реакции[?]
326
Поинты[?]
12K
а вы тоже юзаете ридпроцессмемори, когда можно напрямую читать, если ты и так юзаешь getmodulehandle?
А вы тоже в 4 утра сретее хуйню, когда видите всего лишь ебанный пример.Вы тоже на публику вкидываете свои познания в КОДИНГГЕЕЕЕ :roflanBuldiga::roflanBuldiga::roflanBuldiga::roflanBuldiga::roflanBuldiga::roflanBuldiga::roflanBuldiga::roflanBuldiga::roflanBuldiga::roflanBuldiga::roflanBuldiga::roflanBuldiga::roflanBuldiga::roflanBuldiga::roflanBuldiga::roflanBuldiga::roflanBuldiga: Ты умеешь через звездочку адреса разыменовывать :forsenGun::FeelsBadMan:
 
Пользователь
Статус
Оффлайн
Регистрация
8 Апр 2022
Сообщения
674
Реакции[?]
107
Поинты[?]
70K
это в длл только так.
что в длл? в длл ты юзаешь гетмодулхендл который ищет ТОЛЬКО в текущем процессе, а читаешь через рид процесс, когда можно напрямую из текущего процесса читать
А вы тоже в 4 утра сретее хуйню, когда видите всего лишь ебанный пример.Вы тоже на публику вкидываете свои познания в КОДИНГГЕЕЕЕ :roflanBuldiga::roflanBuldiga::roflanBuldiga::roflanBuldiga::roflanBuldiga::roflanBuldiga::roflanBuldiga::roflanBuldiga::roflanBuldiga::roflanBuldiga::roflanBuldiga::roflanBuldiga::roflanBuldiga::roflanBuldiga::roflanBuldiga::roflanBuldiga::roflanBuldiga: Ты умеешь через звездочку адреса разыменовывать :forsenGun::FeelsBadMan:
да правильно пусть человек сам учится что ему подсказывать то?
 
Участник
Статус
Оффлайн
Регистрация
23 Апр 2022
Сообщения
695
Реакции[?]
326
Поинты[?]
12K
что в длл? в длл ты юзаешь гетмодулхендл который ищет ТОЛЬКО в текущем процессе, а читаешь через рид процесс, когда можно напрямую из текущего процесса читать
Мужик, тс просто проебался с GetModuleHandle, он же рассказал что работал с CE , очевидно он хочет прочитать экстернал память, я просто переписал его код полностью , поправив rpm
 
Забаненный
Статус
Оффлайн
Регистрация
2 Фев 2021
Сообщения
453
Реакции[?]
82
Поинты[?]
3K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
что в длл? в длл ты юзаешь гетмодулхендл который ищет ТОЛЬКО в текущем процессе, а читаешь через рид процесс, когда можно напрямую из текущего процесса читать
А, забыл про GetModuleHandle, ну лан, мой проеб,
Ну и как выше ответил invers1on, то чел может проебался с гетмодульхендлом и екстернал читает память??
 
Новичок
Статус
Оффлайн
Регистрация
21 Май 2021
Сообщения
13
Реакции[?]
0
Поинты[?]
0
DWORD hp = (DWORD)GetModuleHandleA("Engine.dll") + 0x8A6AE4;

Если это интернал и 0x8A6AE4 это смещение до значения здоровья, то

int hp = *(int*)((DWORD)(GetModuleHandleA("Engine.dll")) + 0x8A6AE4);
 
Последнее редактирование:
Сверху Снизу