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

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

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

C++:
Expand Collapse Copy
// Переменные для хранения результата поиска паттерна
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.");
        }
    }
}
 
Последнее редактирование:
У меня есть адрес энтити листа, если в чит энжине перейти то к чему адрес энтити листа запрашивает доступ, то там будет много адресов игроков.
Если что загвоздка в этом адресе, то что я не могу просто перебирать энтити лист по смещениям от одного энтити к другому, т.к. все энтити каждый раз находятся в рандомных местах, поэтому мне нужно именно узнавать к каким адресам энтити, адрес энтити листа смотрит.
Вопрос через какую библиотеку и как узнать у адреса энтити листа к чем он запрашивает доступ, и куда записывать эти адреса, в массив?

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

C++:
Expand Collapse Copy
// Переменные для хранения результата поиска паттерна
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.");
        }
    }
}
каждый раз ставя бряки на этот метод хуй ты нормально проитерируешь всё равно, лучше открой метод в иде, который заполняет этот массив и просмотри алгоритм создания
 
каждый раз ставя бряки на этот метод хуй ты нормально проитерируешь всё равно, лучше открой метод в иде, который заполняет этот массив и просмотри алгоритм создания
какой массив заполняет? пытался искать энтити они все по разным принципам находятся в ебейших разных смещениях друг от друга, в игре старый движок Refractor Engine, может энтити листа в принципе не существовало?
 
какой массив заполняет? пытался искать энтити они все по разным принципам находятся в ебейших разных смещениях друг от друга, в игре старый движок Refractor Engine, может энтити листа в принципе не существовало?
В любом случае адреса не из воздуха берутся, смотри как игра их получает.
 
Можешь скинуть как именно ты понимаешь куда энтити лист щас "смотрит"? Желательно скриншотами из чит энджина. Если ты имеешь ввиду поитеры адресса в памяти то их можно прочитать, а так да тебе хорошо подсказал чел сверху глянуть в ида как именно это работает по возможности.
 
Можешь скинуть как именно ты понимаешь куда энтити лист щас "смотрит"? Желательно скриншотами из чит энджина. Если ты имеешь ввиду поитеры адресса в памяти то их можно прочитать, а так да тебе хорошо подсказал чел сверху глянуть в ида как именно это работает по возможности.

в общем я нашел адрес координаты игрока по X, посмотрел какие адреса обращаются к X и там нашел инструкцию fld, fld показывает список с координатамиX всех игроков которые в поле зрения моей прорисовки.
на скрине видно адреса начинающиеся с 50-52 и 78-79, это список моей команды и список команды врага, но смещения между ними рандомные, например если перейти от одного адреса моего тима к другому будет смещение 860, если прибавить эти 860 ещё раз, то адрес близко не похож на струтуру игрока.

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

1724847859128.png
 
Последнее редактирование:
в общем я нашел адрес координаты игрока по X, посмотрел какие адреса обращаются к X и там нашел инструкцию fld, fld показывает список с координатамиX всех игроков которые в поле зрения моей прорисовки.
на скрине видно адреса начинающиеся с 50-52 и 78-79, это список моей команды и список команды врага, но смещения между ними рандомные, например если перейти от одного адреса моего тима к другому будет смещение 860, если прибавить эти 860 ещё раз, то адрес близко не похож на струтуру игрока.

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

Посмотреть вложение 284330
Я думаю эти адресса которые оно пытается прочитать с кординатами где-то хранятся в какой то структуре, мне самому стало интересно щас батлу 2 скачаю и гляну как оно там работает, отпишу позже если что-то получится
 
Я думаю эти адресса которые оно пытается прочитать с кординатами где-то хранятся в какой то структуре, мне самому стало интересно щас батлу 2 скачаю и гляну как оно там работает, отпишу позже если что-то получится
У меня кароче тоже не особо что-то получилось, так можешь попробовать взять один из тех адресов памяти где хранится позиция игрока, и вбить это в поиск в чит энджене, тебе выдаст все места где хранится поинтер к этому адрессу, и можешь попробовать порыскать может там один из этих поинтеров и будет находится в структуре рядом и с другими поинтерами c позициями игроков, изучи также эту штуку в чит энджене если не знаком, сильно упращает визуально работу:
1724864213243.png
 
У меня кароче тоже не особо что-то получилось, так можешь попробовать взять один из тех адресов памяти где хранится позиция игрока, и вбить это в поиск в чит энджене, тебе выдаст все места где хранится поинтер к этому адрессу, и можешь попробовать порыскать может там один из этих поинтеров и будет находится в структуре рядом и с другими поинтерами c позициями игроков, изучи также эту штуку в чит энджене если не знаком, сильно упращает визуально работу:
Посмотреть вложение 284348
я правильно понял, ты имеешь введу перейти по поинтеру указывающий на X и в памяти искать рядом другие похожие поинтеры по типу поинтера на Y игроков, поинтер хп игроков? Если они находятся рядом, значит это например какая-то структура которую можно на легке находить по поинтеру или сигнатуре?
Спасибо кстати большое за наводки, и я ReClass использую
Я думаю эти адресса которые оно пытается прочитать с кординатами где-то хранятся в какой то структуре, мне самому стало интересно щас батлу 2 скачаю и гляну как оно там работает, отпишу позже если что-то получится
и кстати, если у энтити есть свой энтити лист, то он либо очень большой(на скрине видно адреса от 50ххххх до 52ххххх)
либо энтити листа нет и к каждому энтити своя структура, из-за чего переходить по смещениями я хз пока как, это смотреть надо только в ассемблере наверное или по сигнатуре искать каждого энтити
 
Последнее редактирование:
я правильно понял, ты имеешь введу перейти по поинтеру указывающий на X и в памяти искать рядом другие похожие поинтеры по типу поинтера на Y игроков, поинтер хп игроков? Если они находятся рядом, значит это например какая-то структура которую можно на легке находить по поинтеру или сигнатуре?
Спасибо кстати большое за наводки, и я ReClass использую

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

Примерно да, вообще очень странный движок если честно, как то все не как у людей сделано, обычно как раз на старых движках все проще
 
8b ab ? ? ? ? 3b ab - в ebp положится энтити лист.
 
Назад
Сверху Снизу