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

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

C++:
#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;

    

}
 
Начинающий
Статус
Оффлайн
Регистрация
12 Сен 2016
Сообщения
28
Реакции[?]
3
Поинты[?]
0
базовый адрес хоть не nullptr?
DWORD pId = attachProc("League of Legends.exe"); pid правилен
mbase = 0
базовый адрес хоть не nullptr?
при этом всём код работает полностью на assault cube но не работает на этой игре.Может ли быть такое что античит не позволяет таким образом получить базовый модуль?, оффсеты и поинтер полностью правильны. И хотелось бы узнать каким образом можно иначе получить базовый модуль не используя winapi. Есть что почитать? или посмотреть если есть какие видео. Сам я новичок в этой теме
 
Эксперт
Статус
Оффлайн
Регистрация
3 Апр 2020
Сообщения
1,163
Реакции[?]
593
Поинты[?]
8K
DWORD pId = attachProc("League of Legends.exe"); pid правилен
mbase = 0

при этом всём код работает полностью на assault cube но не работает на этой игре.Может ли быть такое что античит не позволяет таким образом получить базовый модуль?
ну вот у тебя проблема, у тебя не получает базовый адрес, и я думаю даже не может открыть хендл игры)
 
Начинающий
Статус
Оффлайн
Регистрация
12 Сен 2016
Сообщения
28
Реакции[?]
3
Поинты[?]
0
ну вот у тебя проблема, у тебя не получает базовый адрес, и я думаю даже не может открыть хендл игры)
так вот я не понимаю как изменить подход можете ли вы задать направление какое то?, я понимаю что проблема конкретно в этом mbase но не пойму как ее даже приблизительно можно решить разве что может это как то связанно с типом данных в которых я делаю функцию получения базового модуля и то тоже хз
 
Energy Reload
Забаненный
Статус
Оффлайн
Регистрация
20 Авг 2017
Сообщения
1,206
Реакции[?]
330
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Что за античит?
Возможно придётся драйвер использовать для чтения\записи .
 
Эксперт
Статус
Оффлайн
Регистрация
3 Апр 2020
Сообщения
1,163
Реакции[?]
593
Поинты[?]
8K
так вот я не понимаю как изменить подход можете ли вы задать направление какое то?, я понимаю что проблема конкретно в этом mbase но не пойму как ее даже приблизительно можно решить разве что может это как то связанно с типом данных в которых я делаю функцию получения базового модуля и то тоже хз
тебе достаточно проверить там, чему равен Handle
 
Начинающий
Статус
Оффлайн
Регистрация
12 Сен 2016
Сообщения
28
Реакции[?]
3
Поинты[?]
0
Что за античит?
хз конкретно какое название но он палит CE тоесть если заходишь с включенным CE игра крашается но это я обошел, изменять как либо в память нельзя иначе краш, тоесть всё сводиться только к чтению
 
Эксперт
Статус
Оффлайн
Регистрация
3 Апр 2020
Сообщения
1,163
Реакции[?]
593
Поинты[?]
8K
хз конкретно какое название но он палит CE тоесть если заходишь с включенным CE игра крашается но это я обошел, изменять как либо в память нельзя иначе краш, тоесть всё сводиться только к чтению
Код:
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;
}
 
average jne main macros abuser
Начинающий
Статус
Оффлайн
Регистрация
30 Май 2021
Сообщения
80
Реакции[?]
28
Поинты[?]
0
хз конкретно какое название но он палит CE тоесть если заходишь с включенным CE игра крашается но это я обошел, изменять как либо в память нельзя иначе краш, тоесть всё сводиться только к чтению
Крч для чтения памяти тебе придётся юзать драйвер
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Начинающий
Статус
Оффлайн
Регистрация
12 Сен 2016
Сообщения
28
Реакции[?]
3
Поинты[?]
0
тебе достаточно проверить там, чему равен Handle
вопрос есть, хочу уточнить. Хендл который отвечает за доступ к чтению памяти игры?
Крч для чтения памяти тебе придётся юзать драйвер
Пожалуйста, авторизуйтесь для просмотра ссылки.
тоесть причина почему я не могу читать память напрямую ( ну точнее через винапи) заключается как раз в античите, правильно понимаю?
 
Energy Reload
Забаненный
Статус
Оффлайн
Регистрация
20 Авг 2017
Сообщения
1,206
Реакции[?]
330
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Эксперт
Статус
Оффлайн
Регистрация
3 Апр 2020
Сообщения
1,163
Реакции[?]
593
Поинты[?]
8K
вопрос есть, хочу уточнить. Хендл который отвечает за доступ к чтению памяти игры?

тоесть причина почему я не могу читать память напрямую ( ну точнее через винапи) заключается как раз в античите, правильно понимаю?
ну я думаю там кернел ач, так что да, юзермод отпадает.
 
Начинающий
Статус
Оффлайн
Регистрация
12 Сен 2016
Сообщения
28
Реакции[?]
3
Поинты[?]
0
хорошо спасибо <3
но вопрос чуть не по теме, не пользовался подобным не разу и не понимаю где тут вообще int main() xD можно в словах объяснить? как им пользоваться я понимаю как вызывать функции и т д просто где как бы начать писать код xD, можно и не отвечать не обижусь xDD
 
Energy Reload
Забаненный
Статус
Оффлайн
Регистрация
20 Авг 2017
Сообщения
1,206
Реакции[?]
330
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
хорошо спасибо <3

но вопрос чуть не по теме, не пользовался подобным не разу и не понимаю где тут вообще int main() xD можно в словах объяснить? как им пользоваться я понимаю как вызывать функции и т д просто где как бы начать писать код xD, можно и не отвечать не обижусь xDD
int main - это функция которая сама будет выполняться в консольном приложении
DLLMain - это функция которая сама будет выполняться в библиотеки динамической библиоеки (dll файл)
 
Начинающий
Статус
Оффлайн
Регистрация
12 Сен 2016
Сообщения
28
Реакции[?]
3
Поинты[?]
0
int main - это функция которая сама будет выполняться в консольном приложении
DLLMain - это функция которая сама будет выполняться в библиотеки динамической библиоеки (dll файл)
не так выразился и поэтому ты видимо статью мне кинул из гугла о мейнах, посижу щас поебу себе мозги ибо если ответ скажут,иначе не интересно будет. Но спасибо и на том что утвердил шо это я долбоеб и через винапи пытаюсь трахнуть лигу
 
Energy Reload
Забаненный
Статус
Оффлайн
Регистрация
20 Авг 2017
Сообщения
1,206
Реакции[?]
330
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
не так выразился и поэтому ты видимо статью мне кинул из гугла о мейнах, посижу щас поебу себе мозги ибо если ответ скажут,иначе не интересно будет. Но спасибо и на том что утвердил шо это я долбоеб и через винапи пытаюсь трахнуть лигу
это не из гугла)
 
Участник
Статус
Оффлайн
Регистрация
15 Дек 2018
Сообщения
1,081
Реакции[?]
213
Поинты[?]
0
хорошо спасибо <3

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