Вопрос External Assault Cube. Не могу получить данные о количестве патронов при обращаение по адресу в памяти

Начинающий
Статус
Оффлайн
Регистрация
3 Сен 2023
Сообщения
11
Реакции[?]
0
Поинты[?]
0
Привествую всех,занимаюсь по гайду от guidehacking(How to Hack Any Game C++ External Trainer Assault Cube 1/2). Может кто подсказать, в чем проблема почему я не могу получить данные по адресу в памяти и изменить их.Хотя все офсеты и полученные адреса из Cheat Engine работают и позволяются мне изменить данные для патронов из CheatEngine
Main.cpp:
#include "Headers.h"
#include "proc.h"

int main()
{
    const wchar_t gameName[] = L"ac_client.exe";

    // Получаем ID процесса
    std::cout << "[+] Getting process by name " << std::endl;
    DWORD procId = GetProcId(gameName);

    std::cout << "[+] Process Id: " << procId << std::endl;
    //Получаем базовый адресс модуля
    uintptr_t moduleBase = GetModuleBaseAddress(procId, gameName);

    //Получаем дескриптор процессора
    HANDLE hProcess = 0;
    hProcess = OpenProcess(PROCESS_ALL_ACCESS, NULL, procId);
    if (!hProcess) {
        std::cout << "[-] Error to open process" << std::endl;
        return EXIT_FAILURE;
    }

    //Базовый адресс
    uintptr_t dynamicPtrBaseAdr = moduleBase + 0x17e360;
    std::cout << "[+] Dynamic Pointer Base Address = 0x" << std::hex << dynamicPtrBaseAdr << std::endl;

    std::vector<unsigned int> ammoOffsets = { 0x364, 0x14, 0x0 };
    uintptr_t ammoAddr = FindMAAddy(hProcess, dynamicPtrBaseAdr, ammoOffsets);

    std::cout << "[+] AmmoAddr = 0x" << std::hex << ammoAddr << std::endl;

    //Вывод количества патронов
    int ammoValue = 0;

    ReadProcessMemory(hProcess, (BYTE*)ammoAddr, &ammoValue,sizeof(ammoValue),nullptr);
    std::cout << "[+] Current Ammo = " << std::dec << ammoValue << std::endl;

    //Переписываем количество патронов
    int newAmmo = 1337;
    WriteProcessMemory(hProcess, (BYTE*)ammoAddr, &newAmmo, sizeof(newAmmo), nullptr);

    std::cout << "[!] Changing ammo amount... " << std::endl;

    ReadProcessMemory(hProcess, (BYTE*)ammoAddr, &ammoValue, sizeof(ammoValue), nullptr);
    std::cout << "[+] Changed Ammo amount = " << std::dec << ammoValue << std::endl;

    return 0;
}
proc.cpp:
#include "proc.h"

DWORD GetProcId(const wchar_t* procName)
{
    DWORD procId = 0;
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hSnap != INVALID_HANDLE_VALUE)
    {
        PROCESSENTRY32 procEntry;
        procEntry.dwSize = sizeof(PROCESSENTRY32);

        if (Process32First(hSnap, &procEntry))
        {
            do
            {
                if (!_wcsicmp(procEntry.szExeFile, procName))
                {
                    procId = procEntry.th32ProcessID;
                    break;
                }
            } while (Process32Next(hSnap, &procEntry));
        }
    }
    CloseHandle(hSnap);

    return procId;
}

uintptr_t GetModuleBaseAddress(DWORD procId, const wchar_t* modName)
{
    uintptr_t moduleBaseAddress = 0;
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, procId);
    if (hSnap != INVALID_HANDLE_VALUE)
    {
        MODULEENTRY32 moduleEntry;
        moduleEntry.dwSize = sizeof(MODULEENTRY32);

        if (Module32First(hSnap, &moduleEntry))
        {
            do
            {
                if (!_wcsicmp(moduleEntry.szModule, modName))
                {
                    moduleBaseAddress = (uintptr_t)moduleEntry.modBaseAddr;
                    break;
                }
            } while (Module32Next(hSnap, &moduleEntry));
        }
    }
    CloseHandle(hSnap);

    return moduleBaseAddress;
}

uintptr_t FindMAAddy(HANDLE hProc, uintptr_t ptr, std::vector<unsigned int> offsets)
{
    uintptr_t addr = ptr;
    for (unsigned int i = 0; i < offsets.size(); i++)
    {
        ReadProcessMemory(hProc, (BYTE*)addr, &addr, sizeof(addr), 0);
        addr += offsets[i];

    }

    return addr;
}
Скрин из CheatEngine
Пожалуйста, авторизуйтесь для просмотра ссылки.
Скрин при запуске кода
Пожалуйста, авторизуйтесь для просмотра ссылки.

Я так же сохранил проект, после перезапуска AssaultCube из CheatEngine работает. При запуске кода количество патронов равно нулю
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
3 Сен 2023
Сообщения
11
Реакции[?]
0
Поинты[?]
0
да , я уже пофиксил. В этой строчке была проблема
C++:
uintptr_t dynamicPtrBaseAdr = moduleBase + 0x17E0A8;
 
Сверху Снизу