Софт Вопрос Доступ к адресам Entity List | C++

Начинающий
Статус
Оффлайн
Регистрация
9 Мар 2021
Сообщения
132
Реакции[?]
11
Поинты[?]
6K
У меня есть адрес энтити листа, если в чит энжине перейти то к чему адрес энтити листа запрашивает доступ, то там будет много адресов игроков.
Если что загвоздка в этом адресе, то что я не могу просто перебирать энтити лист по смещениям от одного энтити к другому, т.к. все энтити каждый раз находятся в рандомных местах, поэтому мне нужно именно узнавать к каким адресам энтити, адрес энтити листа смотрит.
Вопрос через какую библиотеку и как узнать у адреса энтити листа к чем он запрашивает доступ, и куда записывать эти адреса, в массив?

И ещё правильно ли у меня вообще работаем схема с поиском паттернов, может что-то изменить?

C++:
// Переменные для хранения результата поиска паттерна
static uintptr_t patternAddress = 0;
static bool patternFound = false;

// Структура для хранения паттернов и функций
struct PatternFunction {
    const char* pattern;
    const char* mask;
    void** functionPointer;
    void* hookFunction;
};

// Функция для поиска паттерна в памяти
uintptr_t FindPattern(uintptr_t start, uintptr_t size, const char* pattern, const char* mask) {
    size_t patternLength = strlen(mask);
    for (uintptr_t i = 0; i < size - patternLength; i++) {
        bool found = true;
        for (uintptr_t j = 0; j < patternLength; j++) {
            if (mask[j] != '?' && pattern[j] != *(char*)(start + i + j)) {
                found = false;
                break;
            }
        }
        if (found) {
            return start + i;
        }
    }
    return NULL;
}

uintptr_t FindPatternInModule(const char* moduleName, const char* pattern, const char* mask) {
    MODULEINFO moduleInfo = { 0 };
    HMODULE hModule = GetModuleHandle(moduleName);
    if (!hModule) return NULL;

    GetModuleInformation(GetCurrentProcess(), hModule, &moduleInfo, sizeof(MODULEINFO));

    uintptr_t base = (uintptr_t)moduleInfo.lpBaseOfDll;
    uintptr_t size = (uintptr_t)moduleInfo.SizeOfImage;

    return FindPattern(base, size, pattern, mask);
}

// Примерная инициализация паттернов и их привязка
PatternFunction patternFunctions[3] = {
    { "\xD8\x03\xD9\x5D\x00\xD9\x85", "xxxx?xx", nullptr, nullptr },
    { "\xAA\xBB\xCC\xDD\xEE\xFF\x00", "xxxxxxx", nullptr, nullptr },
    { "\x12\x34\x56\x78\x9A\xBC\xDE", "xxxxxxx", nullptr, nullptr },
};

void InitPatternFunctions() {
    for (auto& pf : patternFunctions) {
        uintptr_t address = FindPatternInModule("game.exe", pf.pattern, pf.mask);
        if (address && pf.functionPointer && pf.hookFunction) {
            kiero::bind(42, pf.functionPointer, pf.hookFunction); // kiero hook использую есличо
            Log("Pattern bound successfully.");
        }
        else {
            Log("Pattern binding failed.");
        }
    }
}
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
15 Янв 2022
Сообщения
129
Реакции[?]
18
Поинты[?]
8K
У меня есть адрес энтити листа, если в чит энжине перейти то к чему адрес энтити листа запрашивает доступ, то там будет много адресов игроков.
Если что загвоздка в этом адресе, то что я не могу просто перебирать энтити лист по смещениям от одного энтити к другому, т.к. все энтити каждый раз находятся в рандомных местах, поэтому мне нужно именно узнавать к каким адресам энтити, адрес энтити листа смотрит.
Вопрос через какую библиотеку и как узнать у адреса энтити листа к чем он запрашивает доступ, и куда записывать эти адреса, в массив?

И ещё правильно ли у меня вообще работаем схема с поиском паттернов, может что-то изменить?

C++:
// Переменные для хранения результата поиска паттерна
static uintptr_t patternAddress = 0;
static bool patternFound = false;

// Структура для хранения паттернов и функций
struct PatternFunction {
    const char* pattern;
    const char* mask;
    void** functionPointer;
    void* hookFunction;
};

// Функция для поиска паттерна в памяти
uintptr_t FindPattern(uintptr_t start, uintptr_t size, const char* pattern, const char* mask) {
    size_t patternLength = strlen(mask);
    for (uintptr_t i = 0; i < size - patternLength; i++) {
        bool found = true;
        for (uintptr_t j = 0; j < patternLength; j++) {
            if (mask[j] != '?' && pattern[j] != *(char*)(start + i + j)) {
                found = false;
                break;
            }
        }
        if (found) {
            return start + i;
        }
    }
    return NULL;
}

uintptr_t FindPatternInModule(const char* moduleName, const char* pattern, const char* mask) {
    MODULEINFO moduleInfo = { 0 };
    HMODULE hModule = GetModuleHandle(moduleName);
    if (!hModule) return NULL;

    GetModuleInformation(GetCurrentProcess(), hModule, &moduleInfo, sizeof(MODULEINFO));

    uintptr_t base = (uintptr_t)moduleInfo.lpBaseOfDll;
    uintptr_t size = (uintptr_t)moduleInfo.SizeOfImage;

    return FindPattern(base, size, pattern, mask);
}

// Примерная инициализация паттернов и их привязка
PatternFunction patternFunctions[3] = {
    { "\xD8\x03\xD9\x5D\x00\xD9\x85", "xxxx?xx", nullptr, nullptr },
    { "\xAA\xBB\xCC\xDD\xEE\xFF\x00", "xxxxxxx", nullptr, nullptr },
    { "\x12\x34\x56\x78\x9A\xBC\xDE", "xxxxxxx", nullptr, nullptr },
};

void InitPatternFunctions() {
    for (auto& pf : patternFunctions) {
        uintptr_t address = FindPatternInModule("game.exe", pf.pattern, pf.mask);
        if (address && pf.functionPointer && pf.hookFunction) {
            kiero::bind(42, pf.functionPointer, pf.hookFunction); // kiero hook использую есличо
            Log("Pattern bound successfully.");
        }
        else {
            Log("Pattern binding failed.");
        }
    }
}
каждый раз ставя бряки на этот метод хуй ты нормально проитерируешь всё равно, лучше открой метод в иде, который заполняет этот массив и просмотри алгоритм создания
 
Начинающий
Статус
Оффлайн
Регистрация
9 Мар 2021
Сообщения
132
Реакции[?]
11
Поинты[?]
6K
каждый раз ставя бряки на этот метод хуй ты нормально проитерируешь всё равно, лучше открой метод в иде, который заполняет этот массив и просмотри алгоритм создания
какой массив заполняет? пытался искать энтити они все по разным принципам находятся в ебейших разных смещениях друг от друга, в игре старый движок Refractor Engine, может энтити листа в принципе не существовало?
 
Начинающий
Статус
Оффлайн
Регистрация
6 Ноя 2023
Сообщения
16
Реакции[?]
4
Поинты[?]
4K
какой массив заполняет? пытался искать энтити они все по разным принципам находятся в ебейших разных смещениях друг от друга, в игре старый движок Refractor Engine, может энтити листа в принципе не существовало?
В любом случае адреса не из воздуха берутся, смотри как игра их получает.
 
Начинающий
Статус
Оффлайн
Регистрация
17 Авг 2024
Сообщения
18
Реакции[?]
8
Поинты[?]
8K
Можешь скинуть как именно ты понимаешь куда энтити лист щас "смотрит"? Желательно скриншотами из чит энджина. Если ты имеешь ввиду поитеры адресса в памяти то их можно прочитать, а так да тебе хорошо подсказал чел сверху глянуть в ида как именно это работает по возможности.
 
Начинающий
Статус
Оффлайн
Регистрация
9 Мар 2021
Сообщения
132
Реакции[?]
11
Поинты[?]
6K
Можешь скинуть как именно ты понимаешь куда энтити лист щас "смотрит"? Желательно скриншотами из чит энджина. Если ты имеешь ввиду поитеры адресса в памяти то их можно прочитать, а так да тебе хорошо подсказал чел сверху глянуть в ида как именно это работает по возможности.
в общем я нашел адрес координаты игрока по X, посмотрел какие адреса обращаются к X и там нашел инструкцию fld, fld показывает список с координатамиX всех игроков которые в поле зрения моей прорисовки.
на скрине видно адреса начинающиеся с 50-52 и 78-79, это список моей команды и список команды врага, но смещения между ними рандомные, например если перейти от одного адреса моего тима к другому будет смещение 860, если прибавить эти 860 ещё раз, то адрес близко не похож на струтуру игрока.

А так да, пока пытаюсь в ассемблере что-то сделать, я просто недавно начал таким заниматься, поэтому немного запарно

1724847859128.png
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
17 Авг 2024
Сообщения
18
Реакции[?]
8
Поинты[?]
8K
в общем я нашел адрес координаты игрока по X, посмотрел какие адреса обращаются к X и там нашел инструкцию fld, fld показывает список с координатамиX всех игроков которые в поле зрения моей прорисовки.
на скрине видно адреса начинающиеся с 50-52 и 78-79, это список моей команды и список команды врага, но смещения между ними рандомные, например если перейти от одного адреса моего тима к другому будет смещение 860, если прибавить эти 860 ещё раз, то адрес близко не похож на струтуру игрока.

А так да, пока пытаюсь в ассемблере что-то сделать, я просто недавно начал таким заниматься, поэтому немного запарно

Посмотреть вложение 284330
Я думаю эти адресса которые оно пытается прочитать с кординатами где-то хранятся в какой то структуре, мне самому стало интересно щас батлу 2 скачаю и гляну как оно там работает, отпишу позже если что-то получится
 
Начинающий
Статус
Оффлайн
Регистрация
17 Авг 2024
Сообщения
18
Реакции[?]
8
Поинты[?]
8K
Я думаю эти адресса которые оно пытается прочитать с кординатами где-то хранятся в какой то структуре, мне самому стало интересно щас батлу 2 скачаю и гляну как оно там работает, отпишу позже если что-то получится
У меня кароче тоже не особо что-то получилось, так можешь попробовать взять один из тех адресов памяти где хранится позиция игрока, и вбить это в поиск в чит энджене, тебе выдаст все места где хранится поинтер к этому адрессу, и можешь попробовать порыскать может там один из этих поинтеров и будет находится в структуре рядом и с другими поинтерами c позициями игроков, изучи также эту штуку в чит энджене если не знаком, сильно упращает визуально работу:
1724864213243.png
 
Начинающий
Статус
Оффлайн
Регистрация
9 Мар 2021
Сообщения
132
Реакции[?]
11
Поинты[?]
6K
У меня кароче тоже не особо что-то получилось, так можешь попробовать взять один из тех адресов памяти где хранится позиция игрока, и вбить это в поиск в чит энджене, тебе выдаст все места где хранится поинтер к этому адрессу, и можешь попробовать порыскать может там один из этих поинтеров и будет находится в структуре рядом и с другими поинтерами c позициями игроков, изучи также эту штуку в чит энджене если не знаком, сильно упращает визуально работу:
Посмотреть вложение 284348
я правильно понял, ты имеешь введу перейти по поинтеру указывающий на X и в памяти искать рядом другие похожие поинтеры по типу поинтера на Y игроков, поинтер хп игроков? Если они находятся рядом, значит это например какая-то структура которую можно на легке находить по поинтеру или сигнатуре?
Спасибо кстати большое за наводки, и я ReClass использую
Я думаю эти адресса которые оно пытается прочитать с кординатами где-то хранятся в какой то структуре, мне самому стало интересно щас батлу 2 скачаю и гляну как оно там работает, отпишу позже если что-то получится
и кстати, если у энтити есть свой энтити лист, то он либо очень большой(на скрине видно адреса от 50ххххх до 52ххххх)
либо энтити листа нет и к каждому энтити своя структура, из-за чего переходить по смещениями я хз пока как, это смотреть надо только в ассемблере наверное или по сигнатуре искать каждого энтити
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
17 Авг 2024
Сообщения
18
Реакции[?]
8
Поинты[?]
8K
я правильно понял, ты имеешь введу перейти по поинтеру указывающий на X и в памяти искать рядом другие похожие поинтеры по типу поинтера на Y игроков, поинтер хп игроков? Если они находятся рядом, значит это например какая-то структура которую можно на легке находить по поинтеру или сигнатуре?
Спасибо кстати большое за наводки, и я ReClass использую

и кстати, если у энтити есть свой энтити лист, то он либо очень большой(на скрине видно адреса от 50ххххх до 52ххххх)
либо энтити листа нет и к каждому энтити своя структура, из-за чего переходить по смещениями я хз пока как, это смотреть надо только в ассемблере наверное или по сигнатуре искать каждого энтити
Примерно да, вообще очень странный движок если честно, как то все не как у людей сделано, обычно как раз на старых движках все проще
 
Сверху Снизу