Перейти к содержанию

[CS:S] Проблема с чтением многоуровневых указателей


Гость SeriousFox

Рекомендуемые сообщения

Пытаюсь прочитать свое хп по (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. 

 

Ссылка на комментарий
Поделиться на другие сайты

22 минуты назад, SeriousFox сказал:

client.dll + 004035C0 + 5C

Ты не правильно получаешь указатель на клиентскую структуру, client.dll + 004035C0 + 5C считая так получишь левый адрес, просто потому что указатель двухуровневый, а ты его за 1 уровень посчитал, а если так:

 

сначала считаешь указатель на игрока

RPM(client.dll + 004035C0, &base);

дальше читаешь здоровье игрока по указателю и смещению

RPM(base + 0x5c, &health)

 

получаешь здоровье.

 

И в следующий раз оформляй заголовок темы по правилам, "CS:S RPM (Я туповат)" не несет никакой смысловой нагрузки.

 

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, partoftheworlD сказал:

Ты не правильно получаешь указатель на клиентскую структуру, client.dll + 004035C0 + 5C считая так получишь левый адрес, просто потому что указатель двухуровневый, а ты его за 1 уровень посчитал, а если так:

 


сначала считаешь указатель на игрока

RPM(client.dll + 004035C0, &base);

дальше читаешь здоровье игрока по указателю и смещению

RPM(base + 0x5c, &health)

 

получаешь здоровье.

 

И в следующий раз оформляй заголовок темы по правилам, "CS:S RPM (Я туповат)" не несет никакой смысловой нагрузки.

 

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

Ссылка на комментарий
Поделиться на другие сайты

  • partoftheworlD закрыто и открыто это тема
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.