Загрузка...

We create our first Internal cheat with a menu and working functionality.

Thread in C/C++ created by Lanskooyy Mar 31, 2022. 3,406 views

  1. Lanskooyy
    Lanskooyy Topic starter Mar 31, 2022 Banned 204 Apr 26, 2020
    Добрый день. В этом гайде я бы хотел показать Вам как создаются Internal читы, как они работают, немного показать их отличие от External, ну и вообщем прочее обилие информации. Разумеется научить делать Ваши собственные читы, рассказать один из самых простых способов. Приступим. В данном гайде я покажу вам как сделать простейший internal чит для игры Among Us, ее выбрал по причине отсутствия античита(как такового защищающего от инжекта и работы с памятью например, о серверсайд защите и других аспектах поговорим в самом гайде), низкой требовательности, быстрым запуском и удобным поиском нужных нам значений. Существует миллион и один способ заставить ваш чит работать и в большинстве своем для этого требуются адреса, смещения или же оффсеты, методы для работы с памятью. Наиболее простой вариант, как таковой искать все эти вещи для работы с памятью -
    это СЕ, программа обладает громадным и без преувеличения гениальным функционалом. Почему именно CE?
    Cheat Engine - позволяет вам независимо от ЯП на котором написана игра искать значения в реалтайме любым удобным вам способом. То есть шифрованые значения, протект и тому подобные вещи в реалтайме не особо страшны, в отличие от обфускации условных структур, классов и их полей, которые довести до нормального вида зачастую просто невозможно. Даже при условии, что тот же Among Us написан на С++ и конвертирован в Il2cpp, то даже использовав дампер мы увидим непонятные наборы символов в структурах и классах и опять же их полях.
    [IMG]
    Понять, что там написано и как оно нам в будущем поможет мы конечно не сможем, потому что восстановить это нам не под силу, а вот найти значение в реалтайме, как раз таки является самым простым путем. В простых играх не защищенных мощными античитами грех не воспользоваться столь простым способом, разумеется что для кулебяк, которые вновь будут писать гневные отзывы под этим гайдом поясню, что мы не берем в расчет игры с кернел античитами по типу EAC, BE и т.д. Знание языка программирования тоже обязательно, желательно тот на котором написана игра, либо универсальный - С++. Для создания чита нам разумеется понадобится меню. Самый простой способ - ImGui, максимально простая и понятная библиотека с открытым исходным кодом и бла-бла-бла. Для старта нам подойдет какой-нибудь условный DirectX Hook от Kiero, данная вещь позволит вам рисовать свое собственное меню. Например: https://github.com/rdbo/ImGui-DirectX-11-Kiero-Hook
    Учтите версию DirectX на котором написана игра, посмотреть можно в интернете. Among Us например работает на версии 11. Настроив проект под себя, добавив паник кей, кнопку открытия и закрытия меню, пару переменных, немного работы с самим сурсом мы получим базу. Пожалуйста, учтите что все это нужно уметь делать самому, т.к это базовые навыки работы с IDE и исходным кодом. Финальный вид моей работы выглядит примерно вот так:
    [IMG]
    Имея свой опыт написания читов с нуля я прекрасно пониманию как это делать. Сделав неплохую базу под себя и немного поработав с меню я получил вот такой результат:
    [IMG]
    На функционал не смотрите, я набросал его для будущей работы. Создав пару переменных и наброски функций приступим к работе с памятью.
    Если вы не можете организовать собственное рабочее пространство и воспользоваться информацией расписанной во многих гайдах на этом форуме, то пожалуйста не нужно писать, что гайд вам чем-то не помог. Приступим к написанию функциональной части. Так как гайд сделан не для совсем нубов и вы должны понимать хотя бы немного, что такое геймхакинг и программирование, то пожалуйста приступайте. Открываем CE и игру. Заходим в локалку.
    [IMG]
    Видим значение скорости, в конце находится плавающая точка, значит значение имеет тип float. Используя поиск ищем и отсеиваем нужный адрес.
    [IMG]
    После поисков я нашел данный адрес, перезайдя в игру можно понять, что он не статичен, а нам нужно как раз наоборот. Поменяв значение мы видим что оно изменилось на наше.
    [IMG]
    Создаем поинтер. ПКМ по адресу, затем:
    [IMG]
    Тут ставим 250, так как оффсеты зачастую короче 250 символов.
    [IMG]
    Жмем ОК, ****аем рандомное название нашего скана и сохраняем, ждем пока все просканиться и мы не дойдем до этого этапа.
    [IMG]
    Мы видим здесь обилие адресов и смещений, которые нам не нужны. Выходим из игры, **** и сам Cheat Engine не закрываем. Перезаходим в игру, снова подключаемся к ней в СЕ и снова ищем адрес нашего значения.
    [IMG]
    Вот два наших адреса. Как видим первый больше не работает. Открываем окно поинтер скана и жмем сюда.
    [IMG]
    Выбираем Addres to find, и ****аем наш второй адрес.
    [IMG]
    Сохраняем с другим названием и видим уже нормальные адреса.
    Главное не забудьте выставить здесь корректный тип данных.
    [IMG]
    Нажимаем на Offset 0, Offset 1, Offset 2, Offset 3 по очереди пока не увидите адрес с меньшим количеством смещений. Вот например:
    [IMG]
    Статический адрес и три смещения. Выбираем любой и нажимаем на него два раза. Закрываем окно поинтер скана. Наш **** перенесется в адрес лист и мы увидим его там.
    [IMG]
    Нажимаем дважды на адрес и видим такую картину.
    [IMG]
    Базовый адрес, модуль + адрес. Затем адрес + смещение + смещение + смещение = стат. адрес нашей скорости. Перезайдя в игру и вновь подергав наш поинтер, если сделали все правильно, он будет давать и менять верное значение. Открываем сурс и начинаем шаманить функции. Создаем функцию:

    #include "vars.h"
    #include "../includes.h"
    #include <vector>
    #include <thread>
    #include <chrono>
    namespace funcs {
    DWORD find_addr(uintptr_t ptr, std::vector<unsigned int> offsets) {
    uintptr_t addr = ptr;
    for (unsigned int i = 0; i < offsets.size(); ++i)
    {
    addr = *(uintptr_t*)addr;
    addr += offsets[i];
    }
    return addr;
    } // Функция для перебора смещений и получения стат. адреса
    void speed_hack() {
    DWORD module = (DWORD)GetModuleHandleA("GameAssembly.dll"); //получаем хендл модуля игры, работа с процессом не нужна, ведь мы и есть модуль игры
    std::vector<unsigned int> speed_offsets = { 0x5C, 0x58, 0x14 }; //смещения
    DWORD speed_addres = module + 0x1BB2D8C; //базовый адрес

    DWORD speed_addr = find_addr(speed_addres, speed_offsets); //получаем стат. адрес
    *(float*)speed_addr = player::speed; //записываем сразу напрямую, т.к мы в интернале и непосредственно являемся модулем игры.
    }
    }

    Обратите внимание на порядок смещений, они должны идти в строго верном порядке, как показано тут:
    [IMG]
    Справа виден полный порядок получения адреса. Функция find_addr ищет статический адрес добавляя к нему смещения с помощью цикла, так что порядок в массиве тут непосредственно важен.
    Создаем свои приколы для вызова функций, например:

    namespace calls {
    void call_function() {
    if (player::impostor) {
    funcs::impostor_hack();
    }
    if (player::crewmate) {
    funcs::crewmate_hack();
    }
    if (player::ghost) {
    funcs::ghost_hack();
    }
    if (player::cooldown) {
    funcs::cooldown_hack();
    }
    if (player::speedhack) {
    funcs::speed_hack();
    }
    }
    }

    И дальше вызываем в нашей инициализации, там где вам удобно наше меню, функции и т.д.
    [IMG]
    [IMG]
    Проверяем, видим что наша скорость изменилась после включения функции в меню. Profit!
    По аналогии с данным методом ищем другие значения и делаем свои функции. Если что-то не понятно спрашиваем. На этом у меня всё, многое пришлось упустить да бы гайд не стал еще более огромным по своему содержанию, в будущем если будет желание расскажу все нюансы. Удачи!:donate:
    :donate:
    Взято с https://yougame.biz
     
  2. Вучич
    Достойно уважения
     
    1. Qyulik
      avatarВучич , [IMG] Ты 5 тысяч слов в секунду читаешь?
  3. srakotanos
    srakotanos Mar 31, 2022 Banned 168 Apr 17, 2021
    Достойно уважения
     
  4. nnHoken
    nnHoken Mar 31, 2022 Banned 28 Jun 18, 2021
    Паста с другого форума.
     
  5. unnamed001
    unnamed001 Apr 2, 2022 5,989 Sep 2, 2020
  6. nullptr

    :roflanFacepalm:
     
  7. potompridumayu
    potompridumayu Apr 2, 2022 Banned 596 Jan 19, 2020
    паста
     
  8. LORD_Max
    LORD_Max Apr 2, 2022 https://lolz.guru/threads/6489648/ - Оплата сервис 263 Jan 23, 2021
    достойно пасті
     
Loading...