Добрый день, предоставьте код в С++, а также поинтеры значений. Меняются ли значения при перезаходе в игру? Работают ли ваши поинтеры в самом CE?
Позиция игрока
DWORD HeightPlayer()
{
uintptr_t process_id = get_process_id(L"ac_client.exe");
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, process_id);
uintptr_t module_base = get_module_base_address(process_id, L"ac_client.exe");
std::cout << "0x" << std::hex << module_base << std::endl;
uintptr_t base_address = module_base + 0x0004282C;
std::cout << "0x" << std::hex << base_address << std::endl;
uintptr_t end_address = 0;
ReadProcessMemory(hProcess, (BYTE*)base_address, &end_address, sizeof(end_address), nullptr);
std::cout << "0x" << std::hex << end_address<< std::endl;
end_address = end_address + 0x58;
std::cout << "0x" << std::hex << end_address << std::endl;
end_address = end_address + 0x1D8;
std::cout << "0x" << std::hex << end_address << std::endl;
end_address = end_address + 0x48;
std::cout << "0x" << std::hex << end_address << std::endl;
end_address = end_address + 0x1C8;
std::cout << "0x" << std::hex << end_address << std::endl;
end_address = end_address + 0x70;
std::cout << "0x" << std::hex << end_address << std::endl;
end_address = end_address + 0x3C;
std::cout << "0x" << std::hex << end_address << std::endl;
float height = 100.0;
WriteProcessMemory(hProcess, (BYTE*)end_address, &height, sizeof(height), nullptr);
return 0;
}
(Если что, то cout использовал для проверки правильности адресов)
Получения процесса и базового адреса
uintptr_t get_process_id(const wchar_t* process_name)
{
uintptr_t process_id = 0;
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnap != INVALID_HANDLE_VALUE)
{
PROCESSENTRY32W procEntry;
procEntry.dwSize = sizeof(procEntry);
while (Process32NextW(hSnap, &procEntry))
{
if (!_wcsicmp(procEntry.szExeFile, process_name))
{
process_id = (uintptr_t)procEntry.th32ProcessID;
break;
}
}
}
CloseHandle(hSnap);
return process_id;
}
uintptr_t get_module_base_address(uintptr_t process_id, const wchar_t* module_name)
{
uintptr_t modBaseAddr = 0;
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, process_id);
if (hSnap != INVALID_HANDLE_VALUE)
{
MODULEENTRY32W modEntry;
modEntry.dwSize = sizeof(modEntry);
while (Module32NextW(hSnap, &modEntry))
{
if (!_wcsicmp(modEntry.szModule, module_name))
{
modBaseAddr = (uintptr_t)modEntry.modBaseAddr;
break;
}
}
}
CloseHandle(hSnap);
return modBaseAddr;
}
Указателей в CE 38, несколько раз перезапускал игру и значение показывало правильное. В фото прикреплю несколько таких указателей. В коде все оффсеты подставишь для проверки