Загрузка...

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

Thread in C/C++ created by Lanskooyy Mar 31, 2022. 3007 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
  3. srakotanos
    srakotanos Mar 31, 2022 Banned 170 Apr 17, 2021
    Достойно уважения
     
  4. nnHoken
    nnHoken Mar 31, 2022 Banned 28 Jun 18, 2021
    Паста с другого форума.
     
  5. unnamed001
    unnamed001 Apr 2, 2022 5996 Sep 2, 2020
  6. nullptr

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