Dodawanie adresów.

0

W CE znalazłem adres bazowy hp w grze. Teraz chciałbym tę zmienną wypisać w consoli. Nie wiem tylko jak w c++ dodać te 3 adresy: plik.exe + client.dll + offset. Skoro już jesteśmy w miejscu cout'a do consoli mam też drugie pytanie. Co musiałbym wykorzystać do narysowania tej zmiennej w grze? Np pobiorę wszystkie hp graczy i chciałbym narysować je sobie na ekranie. Ostatnia sprawa to narysowanie czegoś nad głowami graczy. Pobiorę XYZ graczy oraz swoje i czy z tego mogę narysować? Jest jakaś funkcja do przeliczania kordów 3 wymiarowych na 2 wymiarowe monitora? Rysować chodzi mi o np. kropkę, trójkąt, kwadrat, koło, jakąkolwiek figurę czy nawet napis. Co do adresu, to jest adres hp w grze: "client.dll+120648". plik exe to "hl.exe" Tutaj kodzik:

#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <TlHelp32.h>

using namespace std;

DWORD_PTR dwGetModuleBaseAddress(DWORD dwProcID)
{
	DWORD_PTR dwModuleBaseAddress = 0;
	HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, dwProcID);
	if (hSnapshot != INVALID_HANDLE_VALUE)
	{
		MODULEENTRY32 ModuleEntry32;
		ModuleEntry32.dwSize = sizeof(MODULEENTRY32);
		if (Module32First(hSnapshot, &ModuleEntry32))
		{
			do
			{
				if (_tcsicmp(ModuleEntry32.szModule, L"client.dll") == 0)
				{
					dwModuleBaseAddress = (DWORD_PTR)ModuleEntry32.modBaseAddr;
					break;
				}
			} while (Module32Next(hSnapshot, &ModuleEntry32));
		}
		CloseHandle(hSnapshot);
	}
	return dwModuleBaseAddress;
}

int main()
{
	long hp;
	DWORD processId;
	HANDLE hProcess;
	HWND hCS = FindWindow(L"Counter-Strike", NULL);
	GetWindowThreadProcessId(hCS, &processId);
	DWORD_PTR ten = dwGetModuleBaseAddress(processId);
	hProcess = OpenProcess(PROCESS_VM_READ, false, processId);
	while (true)
	{
		ReadProcessMemory(hProcess, (void*)(ten+120648), &hp, sizeof(long), NULL);
		cout << hp << endl;
		Sleep(300);
	}
	CloseHandle(hProcess);
	return 0;
}
0

Znalazłem następujące wskaźniki do hp:
hw.dll+1087ACC
hw.dll+122ECD0
client.dll+F7EA4
client.dll+120648 -> Ten Twój

ReadProcessMemory(hProcess, (void*)(ten+120648), &hp, sizeof(long), NULL);

Tu masz błąd. Dodajesz offset 120648 w systemie dziesiętnym, a powinien być w szestnastkowym.
Zamień ten+120648 na ten + 0x120648.

0

Takie coś powinno działać:

#include <iostream>
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <tlhelp32.h>
#include <tchar.h>

DWORD_PTR dwGetModuleBaseAddress(DWORD dwProcID, TCHAR* szModuleName)
{
    DWORD_PTR dwModuleBaseAddress = 0;
    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, dwProcID);
    if (hSnapshot != INVALID_HANDLE_VALUE) {
        MODULEENTRY32 ModuleEntry32;
        ModuleEntry32.dwSize = sizeof(MODULEENTRY32);
        if (Module32First(hSnapshot, &ModuleEntry32)) {
            do {
                if (_tcsicmp(ModuleEntry32.szModule, szModuleName) == 0) {
                    dwModuleBaseAddress = (DWORD_PTR)ModuleEntry32.modBaseAddr;
                    break;
                }
            } while (Module32Next(hSnapshot, &ModuleEntry32));
        }
        CloseHandle(hSnapshot);
    }
    return dwModuleBaseAddress;
}

int main()
{
    PROCESSENTRY32 entry;
    entry.dwSize = sizeof(PROCESSENTRY32);

    HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);

    if (Process32First(snapshot, &entry) == TRUE) {
        while (Process32Next(snapshot, &entry) == TRUE) {
            if (_stricmp(entry.szExeFile, "hl.exe") == 0) {
                HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID);

                DWORD_PTR clientBase = dwGetModuleBaseAddress(entry.th32ProcessID, (TCHAR*)("client.dll"));

                int hp;

                while (true) {
                    ReadProcessMemory(hProcess, (LPVOID)(clientBase + 0x120648), &hp, sizeof(int), NULL);
                    std::cout << "HP: " << hp << '\n';
                    Sleep(300);
                }
                CloseHandle(hProcess);
            }
        }
    }
    CloseHandle(snapshot);
    return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1