Вопрос Memory не может найти client.dll [c++]

Начинающий
Статус
Оффлайн
Регистрация
17 Окт 2023
Сообщения
39
Реакции[?]
4
Поинты[?]
3K
Здравствуйте, сегодня я бы хотел попросить помощи
Пишу простенький чит на c++
И после последнего обновления "Tue, 5 Dec 2023"
Чит не может найти client.dll
memory.h:
#pragma once
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <TlHelp32.h>

#include <cstdint>
#include <string_view>

class Memory
{
private:
    std::uintptr_t processId = 0;
    void* processHandle = nullptr;

public:
    // Constructor that finds the process id
    // and opens a handle
    Memory(const std::string_view processName) noexcept
    {
        ::PROCESSENTRY32 entry = { };
        entry.dwSize = sizeof(::PROCESSENTRY32);

        const auto snapShot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

        while (::Process32Next(snapShot, &entry))
        {
            if (!processName.compare(entry.szExeFile))
            {
                processId = entry.th32ProcessID;
                processHandle = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, processId);
                break;
            }
        }

        // Free handle
        if (snapShot)
            ::CloseHandle(snapShot);
    }

    // Destructor that frees the opened handle
    ~Memory()
    {
        if (processHandle)
            ::CloseHandle(processHandle);
    }

    // Returns the base address of a module by name
    const std::uintptr_t GetModuleAddress(const std::string_view moduleName) const noexcept
    {
        ::MODULEENTRY32 entry = { };
        entry.dwSize = sizeof(::MODULEENTRY32);

        const auto snapShot = ::CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, processId);

        std::uintptr_t result = 0;

        while (::Module32Next(snapShot, &entry))
        {
            if (!moduleName.compare(entry.szModule))
            {
                result = reinterpret_cast<std::uintptr_t>(entry.modBaseAddr);
                break;
            }
        }

        if (snapShot)
            ::CloseHandle(snapShot);

        return result;
    }

    // Read process memory
    template <typename T>
    constexpr const T Read(const std::uintptr_t& address) const noexcept
    {
        T value = { };
        ::ReadProcessMemory(processHandle, reinterpret_cast<const void*>(address), &value, sizeof(T), NULL);
        return value;
    }

    // Write process memory
    template <typename T>
    constexpr void Write(const std::uintptr_t& address, const T& value) const noexcept
    {
        ::WriteProcessMemory(processHandle, reinterpret_cast<void*>(address), &value, sizeof(T), NULL);
    }
};
main.cpp:
// [includes]
#include <iostream>
#include <thread>

// [memory]
#include "scr/memory.h"

// [main]
int main()
{
    Memory mem{ "cs2.exe" }; // Подключаемсья к "cs2.exe"
    auto client = mem.GetModuleAddress("client.dll"); // Получаем "client.dll"

    std::cout << client << std::endl; // Пишем "client.dll"

    return 0; // возрощяем int
}

Код в теории должен подключается к "cs2.exe", получать модуль "client.dll", и выписывать в консоль сам "client"
Принимаю любые комментарии, и буду рад им!
 
АМБАССАДОР ЩИТПОСТА
Пользователь
Статус
Оффлайн
Регистрация
24 Мар 2022
Сообщения
178
Реакции[?]
42
Поинты[?]
3K
так ты мануалом ебашь каждый инжкект клиент длл, вот тебе солюшен
 
Начинающий
Статус
Оффлайн
Регистрация
17 Окт 2023
Сообщения
39
Реакции[?]
4
Поинты[?]
3K
Здравствуйте, сегодня я бы хотел попросить помощи
Пишу простенький чит на c++
И после последнего обновления "Tue, 5 Dec 2023"
Чит не может найти client.dll
memory.h:
#pragma once
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <TlHelp32.h>

#include <cstdint>
#include <string_view>

class Memory
{
private:
    std::uintptr_t processId = 0;
    void* processHandle = nullptr;

public:
    // Constructor that finds the process id
    // and opens a handle
    Memory(const std::string_view processName) noexcept
    {
        ::PROCESSENTRY32 entry = { };
        entry.dwSize = sizeof(::PROCESSENTRY32);

        const auto snapShot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

        while (::Process32Next(snapShot, &entry))
        {
            if (!processName.compare(entry.szExeFile))
            {
                processId = entry.th32ProcessID;
                processHandle = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, processId);
                break;
            }
        }

        // Free handle
        if (snapShot)
            ::CloseHandle(snapShot);
    }

    // Destructor that frees the opened handle
    ~Memory()
    {
        if (processHandle)
            ::CloseHandle(processHandle);
    }

    // Returns the base address of a module by name
    const std::uintptr_t GetModuleAddress(const std::string_view moduleName) const noexcept
    {
        ::MODULEENTRY32 entry = { };
        entry.dwSize = sizeof(::MODULEENTRY32);

        const auto snapShot = ::CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, processId);

        std::uintptr_t result = 0;

        while (::Module32Next(snapShot, &entry))
        {
            if (!moduleName.compare(entry.szModule))
            {
                result = reinterpret_cast<std::uintptr_t>(entry.modBaseAddr);
                break;
            }
        }

        if (snapShot)
            ::CloseHandle(snapShot);

        return result;
    }

    // Read process memory
    template <typename T>
    constexpr const T Read(const std::uintptr_t& address) const noexcept
    {
        T value = { };
        ::ReadProcessMemory(processHandle, reinterpret_cast<const void*>(address), &value, sizeof(T), NULL);
        return value;
    }

    // Write process memory
    template <typename T>
    constexpr void Write(const std::uintptr_t& address, const T& value) const noexcept
    {
        ::WriteProcessMemory(processHandle, reinterpret_cast<void*>(address), &value, sizeof(T), NULL);
    }
};
main.cpp:
// [includes]
#include <iostream>
#include <thread>

// [memory]
#include "scr/memory.h"

// [main]
int main()
{
    Memory mem{ "cs2.exe" }; // Подключаемсья к "cs2.exe"
    auto client = mem.GetModuleAddress("client.dll"); // Получаем "client.dll"

    std::cout << client << std::endl; // Пишем "client.dll"

    return 0; // возрощяем int
}

Код в теории должен подключается к "cs2.exe", получать модуль "client.dll", и выписывать в консоль сам "client"
Принимаю любые комментарии, и буду рад им!
Нашёл решение!
Надо обновлять cs2, и оффсеты.
 
Keine panik!
Эксперт
Статус
Оффлайн
Регистрация
29 Апр 2020
Сообщения
812
Реакции[?]
417
Поинты[?]
49K
Нашёл решение!
Надо обновлять cs2, и оффсеты.
Как обновление игры и оффсетов влияет на поиск базы либы в произвольном процессе?
По сабжу у тебя в коде минимум два бага Process32Next() вызывается а Process32First() кто будет вызывать то?
Тоже самое с Module32Next() и Module32First().
Кроме того, ни одной проверки, они так то могут возвращать ошибку ERROR_BAD_LENGTH, что говорит о потребности попробовать итерацию снова.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Процесс пытаешься открыть, опять не чекаешь открылся он или нет, вааапще похуям.
Делать сложные операции, которые требуют обработку ошибок в конструкторе вообще мем.
 
Последнее редактирование:
Сверху Снизу