C++ Вопрос Как найти офсеты используя DLL

Начинающий
Статус
Оффлайн
Регистрация
24 Мар 2021
Сообщения
4
Реакции[?]
0
Поинты[?]
0
Чтение используя .exe

C++:
 DWORD endAddress = base;
for (int i = 0; i < totalOffsets; i++)
{
endAddress += offsets.at(i);
if(i < totalOffsets - 1)
ReadProcessMemory(handle, (void*)endAddress, &endAddress, sizeof(endAddress), nullptr);
}

Чтение используя DLL
Код:
    // как??
функция ReadProcessMemory не работает если это DLL, как тогда найти адрес по офсетам?
базовый адрес получается найти, а вот по офсетам вообще никак не выходит.

так нахожу базовый адрес:

Код:
  uintptr_t* finallyAddress = *(uintptr_t**)(moduleBase + moduleOffset);

а как к этому добавить офсеты к примеру 0x4C 0x8 0x22 и получить нужный адрес ?
 
Забаненный
Статус
Оффлайн
Регистрация
23 Авг 2020
Сообщения
2,110
Реакции[?]
597
Поинты[?]
10K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Чтение используя .exe

C++:
 DWORD endAddress = base;
for (int i = 0; i < totalOffsets; i++)
{
endAddress += offsets.at(i);
if(i < totalOffsets - 1)
ReadProcessMemory(handle, (void*)endAddress, &endAddress, sizeof(endAddress), nullptr);
}

Чтение используя DLL
Код:
    // как??
функция ReadProcessMemory не работает если это DLL, как тогда найти адрес по офсетам?
базовый адрес получается найти, а вот по офсетам вообще никак не выходит.

так нахожу базовый адрес:

Код:
  uintptr_t* finallyAddress = *(uintptr_t**)(moduleBase + moduleOffset);

а как к этому добавить офсеты к примеру 0x4C 0x8 0x22 и получить нужный адрес ?
Когда ты получаешь по итогу баз. адрес == прибавляешь то, что тебе нужно.
Взависимости, что именно.
Байты - добавляй массивом байты.
Так по крайней мере мне объяснял кодер зевса..............................
 
Продавец
Статус
Оффлайн
Регистрация
28 Окт 2019
Сообщения
1,153
Реакции[?]
302
Поинты[?]
3K
Ты находишь уже внутри процесса, тебе не нужно читать его внешними способами, достаточно обратиться по ссылке к полученному адресу указанного типа и ты получишь значение
*(тип*)(адрес)
 
Начинающий
Статус
Оффлайн
Регистрация
24 Мар 2021
Сообщения
4
Реакции[?]
0
Поинты[?]
0
Когда ты получаешь по итогу баз. адрес == прибавляешь то, что тебе нужно.
Взависимости, что именно.
Байты - добавляй массивом байты.
Так по крайней мере мне объяснял кодер зевса..............................
я так пробовал, вобще не получается,какой-то левый адрес либо 00000000000

если кто-то шарит, напишите кусочек кода пожалуйста

Ты находишь уже внутри процесса, тебе не нужно читать его внешними способами, достаточно обратиться по ссылке к полученному адресу указанного типа и ты получишь значение
*(тип*)(адрес)
не понял, но попытаюсь разобраться как домой приду
 
Участник
Статус
Оффлайн
Регистрация
15 Дек 2018
Сообщения
1,081
Реакции[?]
213
Поинты[?]
0
Ничё не понял, но оставлю это
C++:
uintptr_t address = *(uintptr_t*)(base + offset);
address = *(uintptr_t*)(address + next_offset);
 
Начинающий
Статус
Оффлайн
Регистрация
24 Мар 2021
Сообщения
4
Реакции[?]
0
Поинты[?]
0
вроде как, я проверю
Ничё не понял, но оставлю это
C++:
uintptr_t address = *(uintptr_t*)(base + offset);
address = *(uintptr_t*)(address + next_offset);
почему-то базовый адрес всегда находит , а вот когда добавляю офсет то адрес превращается в 0000000

буду пытаться как приду домой
 
Участник
Статус
Оффлайн
Регистрация
15 Дек 2018
Сообщения
1,081
Реакции[?]
213
Поинты[?]
0
вроде как, я проверю

почему-то базовый адрес всегда находит , а вот когда добавляю офсет то адрес превращается в 0000000

буду пытаться как приду домой
Значит оффсет неправильный
Reclass в помощь.
 
Сверху Снизу