Гость SeriousFox Опубликовано 9 июня, 2018 Поделиться Опубликовано 9 июня, 2018 Пытаюсь прочитать свое хп по (client.dll + 004035C0 + 5C) , но видимо я туповат. Спойлер DWORD FindModule(const DWORD dwProcessId, const char *szModuleName) { HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessId); if (!hSnap) { return 0; } MODULEENTRY32 me32; me32.dwSize = sizeof(MODULEENTRY32); DWORD dwReturn = 0; if (Module32First(hSnap, &me32)) { while (Module32Next(hSnap, &me32)) { if (lstrcmpi(me32.szModule, (LPCSTR)szModuleName) == 0) { dwReturn = (DWORD)me32.modBaseAddr; break; } } } CloseHandle(hSnap); return dwReturn; } int main() { hWindow = FindWindow(0, "Counter-Strike Source"); GetWindowThreadProcessId(hWindow, &pID); hHandle = OpenProcess(PROCESS_ALL_ACCESS, 0, pID); ListProcessModules(pID); cout << endl; DWORD ClientDLL; ClientDLL = FindModule(pID, "client.dll"); int my_hp; ReadProcessMemory(hHandle, (LPCVOID)(ClientDLL + 0x04035C0 + 0x5C), &my_hp, sizeof(my_hp), 0); cout << my_hp << endl; getchar(); return 0; } Выдает такое: 607494444. Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 9 июня, 2018 Поделиться Опубликовано 9 июня, 2018 22 минуты назад, SeriousFox сказал: client.dll + 004035C0 + 5C Ты не правильно получаешь указатель на клиентскую структуру, client.dll + 004035C0 + 5C считая так получишь левый адрес, просто потому что указатель двухуровневый, а ты его за 1 уровень посчитал, а если так: сначала считаешь указатель на игрока RPM(client.dll + 004035C0, &base); дальше читаешь здоровье игрока по указателю и смещению RPM(base + 0x5c, &health) получаешь здоровье. И в следующий раз оформляй заголовок темы по правилам, "CS:S RPM (Я туповат)" не несет никакой смысловой нагрузки. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость SeriousFox Опубликовано 9 июня, 2018 Поделиться Опубликовано 9 июня, 2018 1 час назад, partoftheworlD сказал: Ты не правильно получаешь указатель на клиентскую структуру, client.dll + 004035C0 + 5C считая так получишь левый адрес, просто потому что указатель двухуровневый, а ты его за 1 уровень посчитал, а если так: сначала считаешь указатель на игрока RPM(client.dll + 004035C0, &base); дальше читаешь здоровье игрока по указателю и смещению RPM(base + 0x5c, &health) получаешь здоровье. И в следующий раз оформляй заголовок темы по правилам, "CS:S RPM (Я туповат)" не несет никакой смысловой нагрузки. Ууууу. Довольно урчу, спасибо рзобрался. Сидел пару часов не мог понять почему не выходит так выйти на хп. За оформление извините. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения