• Ищем качественного (не новичок) разработчиков Xenforo для этого форума! В идеале, чтобы ты был фулл стек программистом. Если у тебя есть что показать, то свяжись с нами по контактным данным: https://t.me/DREDD

[League of Legends] Проблема с базовым модулем c++

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
12 Сен 2016
Сообщения
28
Реакции
3
Не могу читать адресс в памяти данной игры, как я думаю это в связи с тем что не могу найти модуль и не понимаю где ошибка, буду благодарен если вы мне с этим поможете :)

C++:
Expand Collapse Copy
#include <Windows.h>
#include <TlHelp32.h>
#include <iostream>
#include <vector>
#include <string>
#include "inc.h"

HANDLE hProc = NULL;

using namespace std;


DWORD  attachProc(const char* procName)
{
    DWORD procId = 0;

    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    
    if (hSnap != INVALID_HANDLE_VALUE)
    {
        PROCESSENTRY32 pEntry;
        pEntry.dwSize = sizeof(pEntry);

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










DWORD GetModuleBaseAddress(DWORD procId, const char* lpszModuleName) {
    DWORD modbaseaddr = 0;
    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, procId); // make snapshot of all modules within process
    
    MODULEENTRY32 ModuleEntry32;
    ModuleEntry32.dwSize = sizeof(MODULEENTRY32);

    if (Module32First(hSnapshot, &ModuleEntry32)) 
    {
        do {
            if (!strcmp(ModuleEntry32.szModule, lpszModuleName)) 
            {
                modbaseaddr = (DWORD)ModuleEntry32.modBaseAddr;
                break;
            }
        } while (Module32Next(hSnapshot, &ModuleEntry32)); 


    }
    CloseHandle(hSnapshot);
    return modbaseaddr;
}




uintptr_t ADDY(HANDLE hProc, uintptr_t ptr, vector <unsigned int > offsets)
{

    uintptr_t addr = ptr;
    for (unsigned int i = 0; i < offsets.size(); ++i)
    {

        ReadProcessMemory(hProc, (LPVOID*)addr, &addr, sizeof(addr), 0);
        addr += offsets[i];
    }
    return addr;
}

int main()
{
    DWORD pId = attachProc("League of Legends.exe");
    

    cout << "PID: " << dec << pId << endl; //right pid
    uintptr_t mBase = GetModuleBaseAddress(pId, "League of Legends.exe");

    
    hProc = OpenProcess(PROCESS_ALL_ACCESS, NULL, pId);

    cout << "mBase:    " << hex << mBase << endl;

    uintptr_t dpb = mBase + 0x30CD6E8;

    cout << "DPB    " << hex << dpb << endl;
    vector <unsigned int> hpOffsets = { 0x24,0x0,0x110 };

    DWORD HP = 0x3D233868;

    int buffer=0;
    ReadProcessMemory(hProc, (BYTE*)HP, &buffer, sizeof(buffer), 0);
    cout << "read process buf   " << dec << buffer << endl;

    uintptr_t hpAddr = ADDY(hProc, dpb, hpOffsets);

    cout << "hpaddr:  " << hex << hpAddr << endl;
    float hpval = 0;
    
        ReadProcessMemory(hProc, (BYTE*)hpAddr, &hpval, sizeof(hpval), nullptr);
        cout << "LOL Current hp: " << dec << hpval << endl;

    

}
 
базовый адрес хоть не nullptr?
 
базовый адрес хоть не nullptr?
DWORD pId = attachProc("League of Legends.exe"); pid правилен
mbase = 0
базовый адрес хоть не nullptr?
при этом всём код работает полностью на assault cube но не работает на этой игре.Может ли быть такое что античит не позволяет таким образом получить базовый модуль?, оффсеты и поинтер полностью правильны. И хотелось бы узнать каким образом можно иначе получить базовый модуль не используя winapi. Есть что почитать? или посмотреть если есть какие видео. Сам я новичок в этой теме
 
DWORD pId = attachProc("League of Legends.exe"); pid правилен
mbase = 0

при этом всём код работает полностью на assault cube но не работает на этой игре.Может ли быть такое что античит не позволяет таким образом получить базовый модуль?
ну вот у тебя проблема, у тебя не получает базовый адрес, и я думаю даже не может открыть хендл игры)
 
ну вот у тебя проблема, у тебя не получает базовый адрес, и я думаю даже не может открыть хендл игры)
так вот я не понимаю как изменить подход можете ли вы задать направление какое то?, я понимаю что проблема конкретно в этом mbase но не пойму как ее даже приблизительно можно решить разве что может это как то связанно с типом данных в которых я делаю функцию получения базового модуля и то тоже хз
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Что за античит?
Возможно придётся драйвер использовать для чтения\записи .
 
так вот я не понимаю как изменить подход можете ли вы задать направление какое то?, я понимаю что проблема конкретно в этом mbase но не пойму как ее даже приблизительно можно решить разве что может это как то связанно с типом данных в которых я делаю функцию получения базового модуля и то тоже хз
тебе достаточно проверить там, чему равен Handle
 
Что за античит?
хз конкретно какое название но он палит CE тоесть если заходишь с включенным CE игра крашается но это я обошел, изменять как либо в память нельзя иначе краш, тоесть всё сводиться только к чтению
 
хз конкретно какое название но он палит CE тоесть если заходишь с включенным CE игра крашается но это я обошел, изменять как либо в память нельзя иначе краш, тоесть всё сводиться только к чтению
Код:
Expand Collapse Copy
HMODULE GetBaseAddressByName(DWORD processId, TCHAR* processName) {
    TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");

    HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processId);

    if (NULL != hProcess) {
        HMODULE hMod;
        DWORD cbNeeded;

        if (EnumProcessModulesEx(hProcess, &hMod, sizeof(hMod), &cbNeeded, LIST_MODULES_32BIT | LIST_MODULES_64BIT)) {
            GetModuleBaseName(hProcess, hMod, szProcessName, sizeof(szProcessName) / sizeof(TCHAR));
            if (!_tcsicmp(processName, szProcessName)) {
                CloseHandle(hProcess);
                return hMod;
            }
        }
    }

    CloseHandle(hProcess);
    return 0;
}
 
хз конкретно какое название но он палит CE тоесть если заходишь с включенным CE игра крашается но это я обошел, изменять как либо в память нельзя иначе краш, тоесть всё сводиться только к чтению
Крч для чтения памяти тебе придётся юзать драйвер
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
тебе достаточно проверить там, чему равен Handle
вопрос есть, хочу уточнить. Хендл который отвечает за доступ к чтению памяти игры?
Крч для чтения памяти тебе придётся юзать драйвер
Пожалуйста, авторизуйтесь для просмотра ссылки.
тоесть причина почему я не могу читать память напрямую ( ну точнее через винапи) заключается как раз в античите, правильно понимаю?
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
вопрос есть, хочу уточнить. Хендл который отвечает за доступ к чтению памяти игры?

тоесть причина почему я не могу читать память напрямую ( ну точнее через винапи) заключается как раз в античите, правильно понимаю?
ну я думаю там кернел ач, так что да, юзермод отпадает.
 
хорошо спасибо <3
но вопрос чуть не по теме, не пользовался подобным не разу и не понимаю где тут вообще int main() xD можно в словах объяснить? как им пользоваться я понимаю как вызывать функции и т д просто где как бы начать писать код xD, можно и не отвечать не обижусь xDD
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
хорошо спасибо <3

но вопрос чуть не по теме, не пользовался подобным не разу и не понимаю где тут вообще int main() xD можно в словах объяснить? как им пользоваться я понимаю как вызывать функции и т д просто где как бы начать писать код xD, можно и не отвечать не обижусь xDD
int main - это функция которая сама будет выполняться в консольном приложении
DLLMain - это функция которая сама будет выполняться в библиотеки динамической библиоеки (dll файл)
 
int main - это функция которая сама будет выполняться в консольном приложении
DLLMain - это функция которая сама будет выполняться в библиотеки динамической библиоеки (dll файл)
не так выразился и поэтому ты видимо статью мне кинул из гугла о мейнах, посижу щас поебу себе мозги ибо если ответ скажут,иначе не интересно будет. Но спасибо и на том что утвердил шо это я долбоеб и через винапи пытаюсь трахнуть лигу
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
не так выразился и поэтому ты видимо статью мне кинул из гугла о мейнах, посижу щас поебу себе мозги ибо если ответ скажут,иначе не интересно будет. Но спасибо и на том что утвердил шо это я долбоеб и через винапи пытаюсь трахнуть лигу
это не из гугла)
 
хорошо спасибо <3

но вопрос чуть не по теме, не пользовался подобным не разу и не понимаю где тут вообще int main() xD можно в словах объяснить? как им пользоваться я понимаю как вызывать функции и т д просто где как бы начать писать код xD, можно и не отвечать не обижусь xDD
DriverEntry. В разработке дрв много тонкостей, надо жопу рвать чтобы понять всё, по-крайней мере у меня так было. Однако в кайф становится всё учить, понимая материал.
 
Назад
Сверху Снизу