Парсим квары легко и просто

Начинающий
Статус
Оффлайн
Регистрация
4 Май 2023
Сообщения
15
Реакции[?]
4
Поинты[?]
4K
Простой код для парсинга смещений и названий игровых кваров, для автоматического обновления можно и нужно использовать паттерн для поиска функции инициализации кваров.

Паттерн: "48 8B C4 48 89 58 08 48 89 68 10 48 89 70 18 48 89 78 20 41 56 48 81 EC ? ? ? ? 0F 29 70 E8 48 8B F9"
Размер функции: 0xF988

Begin - Адрес начала функции SCVars::InitCVars()
End - Разумеется конец этой функции.


C++:
bool IsAscii(std::string String) {
    auto Ascii = [](char ch) -> bool { return ch >= 0 && ch < 128; };
    for (auto It : String) { if (!Ascii(It)) { return false; } }
    return true;
};

std::map< std::string, std::uintptr_t > ParseCVars() {

    auto CVars = std::map< std::string, std::uintptr_t >();

    auto Begin = std::uintptr_t { 0x1412E9F90 };
    auto End = Begin + std::uintptr_t{ 0xF988 };

    char* Name = 0;
    auto Offset = std::uintptr_t{ 0x0 };

    for (auto It = Begin; It != End; It++) {

        if (::IsBadReadPtr(reinterpret_cast<void*>(It), 4)) {
            continue;
        }

        auto Opcode = reinterpret_cast<std::uint8_t*>(It);
        /* lea r8, rdi */
        if (Opcode[0] == 0x4C && Opcode[1] == 0x8D &&
            (Opcode[2] == 0x47 || Opcode[2] == 0x87)) {

            Offset = *reinterpret_cast<int*>(It + 0x3);
            if (!Offset) {
                continue;
            }

            if (Offset >= (End - Begin)) {
                Offset = *reinterpret_cast<unsigned char*>(It + 0x3);
            }
        }

        /* lea rdx */
        if (Opcode[0] == 0x48 && Opcode[1] == 0x8d) {
            Name = reinterpret_cast<char*>(reinterpret_cast<std::uintptr_t*>(
                It + *reinterpret_cast<std::uint32_t*>(It + 0x3) + 0x7));

            if (::IsBadReadPtr(reinterpret_cast<void*>(Name), 4) || !IsAscii(Name)) {
                continue;
            }

            CVars.insert(std::pair < std::string, std::uintptr_t >(Name, Offset));
        }
    }

    return CVars;
}
Пример использования:

C++:
auto CVars = ParseCVars();
CVars.find("cl_fov")->second;
Вариант второй:
- Ставим хук на IConsole::Register(virtual index 7), парсим 1 и 2 аргументы.
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
27 Окт 2022
Сообщения
76
Реакции[?]
7
Поинты[?]
5K
Простой код для парсинга смещений и названий игровых кваров, для автоматического обновления можно и нужно использовать паттерн для поиска функции инициализации кваров.

Паттерн: "48 8B C4 48 89 58 08 48 89 68 10 48 89 70 18 48 89 78 20 41 56 48 81 EC ? ? ? ? 0F 29 70 E8 48 8B F9"
Размер функции: 0xF988

Begin - Адрес начала функции SCVars::InitCVars()
End - Разумеется конец этой функции.


C++:
bool IsAscii(std::string String) {
    auto Ascii = [](char ch) -> bool { return ch >= 0 && ch < 128; };
    for (auto It : String) { if (!Ascii(It)) { return false; } }
    return true;
};

std::map< std::string, std::uintptr_t > ParseCVars() {

    auto CVars = std::map< std::string, std::uintptr_t >();

    auto Begin = std::uintptr_t { 0x1412E9F90 };
    auto End = Begin + std::uintptr_t{ 0xF988 };

    char* Name = 0;
    auto Offset = std::uintptr_t{ 0x0 };

    for (auto It = Begin; It != End; It++) {

        if (::IsBadReadPtr(reinterpret_cast<void*>(It), 4)) {
            continue;
        }

        auto Opcode = reinterpret_cast<std::uint8_t*>(It);
        /* lea r8, rdi */
        if (Opcode[0] == 0x4C && Opcode[1] == 0x8D &&
            (Opcode[2] == 0x47 || Opcode[2] == 0x87)) {

            Offset = *reinterpret_cast<int*>(It + 0x3);
            if (!Offset) {
                continue;
            }

            if (Offset >= (End - Begin)) {
                Offset = *reinterpret_cast<unsigned char*>(It + 0x3);
            }
        }

        /* lea rdx */
        if (Opcode[0] == 0x48 && Opcode[1] == 0x8d) {
            Name = reinterpret_cast<char*>(reinterpret_cast<std::uintptr_t*>(
                It + *reinterpret_cast<std::uint32_t*>(It + 0x3) + 0x7));

            if (::IsBadReadPtr(reinterpret_cast<void*>(Name), 4) || !IsAscii(Name)) {
                continue;
            }

            CVars.insert(std::pair < std::string, std::uintptr_t >(Name, Offset));
        }
    }

    return CVars;
}
Пример использования:

C++:
auto CVars = ParseCVars();
CVars.find("cl_fov")->second;
Вариант второй:
- Ставим хук на IConsole::Register(virtual index 7), парсим 1 и 2 аргументы.
НУ БЛ РЕСПЕКТ но они все равно не будут делать, так как они не будут ебаться с всеми функциями
 
Пользователь
Статус
Оффлайн
Регистрация
5 Июл 2022
Сообщения
1,000
Реакции[?]
86
Поинты[?]
23K
Начинающий
Статус
Оффлайн
Регистрация
27 Окт 2022
Сообщения
76
Реакции[?]
7
Поинты[?]
5K
Смейся больше* покажи хоть один твой софт без детекта) пве и пвп не считается рм ты там ,так и так отлетишь тебе даже не удовалось играть с софтом месяц 2-3, вот например я бегал спокойно с аимом и палился, отлетал через месяц 1-2
 
Начинающий
Статус
Оффлайн
Регистрация
27 Фев 2020
Сообщения
420
Реакции[?]
19
Поинты[?]
14K
Смейся больше* покажи хоть один твой софт без детекта) пве и пвп не считается рм ты там ,так и так отлетишь тебе даже не удовалось играть с софтом месяц 2-3, вот например я бегал спокойно с аимом и палился, отлетал через месяц 1-2
А где смех то? Ты крассавчик что рассказал как банится, надеемся что по твоей теме в будущем сделают хороший софт без банов примерно год, который не обнаружится мраком, ведь кто-то будет соблюдать все твои слова в твоей теме. Крассавчик ты! Желаю тебе продвижения и успехов! Спасибо за информацию!
 
Начинающий
Статус
Оффлайн
Регистрация
13 Май 2023
Сообщения
159
Реакции[?]
26
Поинты[?]
26K
Смейся больше* покажи хоть один твой софт без детекта) пве и пвп не считается рм ты там ,так и так отлетишь тебе даже не удовалось играть с софтом месяц 2-3, вот например я бегал спокойно с аимом и палился, отлетал через месяц 1-2
Твоя тема - это набор слов, не несущая не какой полезной информации.
 
Начинающий
Статус
Оффлайн
Регистрация
2 Янв 2024
Сообщения
56
Реакции[?]
0
Поинты[?]
1K
Начинающий
Статус
Оффлайн
Регистрация
13 Май 2023
Сообщения
159
Реакции[?]
26
Поинты[?]
26K
Начинающий
Статус
Оффлайн
Регистрация
27 Окт 2022
Сообщения
76
Реакции[?]
7
Поинты[?]
5K
Начинающий
Статус
Оффлайн
Регистрация
27 Окт 2022
Сообщения
76
Реакции[?]
7
Поинты[?]
5K
Начинающий
Статус
Оффлайн
Регистрация
22 Дек 2023
Сообщения
267
Реакции[?]
16
Поинты[?]
17K
аххаха, аим я не покупал и во 2 делал сам *так сказать брал готовый с юга переделывал реализацию и все)
Сначала говоришь, что сам делал, а потом, что это с каких-то сурсов взято. Выходит, ты сам подтверждаешь, что не сам делал.
с твоим уровнем ты никуда выше пасты не уйдешь
 
Начинающий
Статус
Оффлайн
Регистрация
27 Окт 2022
Сообщения
76
Реакции[?]
7
Поинты[?]
5K
Сначала говоришь, что сам делал, а потом, что это с каких-то сурсов взято. Выходит, ты сам подтверждаешь, что не сам делал.
с твоим уровнем ты никуда выше пасты не уйдешь
ты внатуре не понял?* пастыл давно потом перешел на свои реализации это 2 большые разницы
 
Сверху Снизу