Не говорите много, особенно во время драк. Постоянный разговор отвлекает от игры – скорее всего, игрок просто замутит вас вместо того, чтобы получать советы. Во время замеса используйте микрофон только в экстренных ситуациях – например, когда команде срочно надо отступать.
Как сделать трейнер в Cheat Engine
Программа Cheat Engine помогает пользователям взламывать любимые игры, приобретая бесконечное количество игровых денег и нескончаемую шкалу жизни игрового персонажа. Для удобства использования, разработчики программы добавили опцию создания трейнеров. С помощью трейнеров пользователь сохраняет алгоритм взлома игры, который будет использоваться в следующих сессиях. В этой статье создан гид по тому, как сделать трейнер в cheat engine. Дополнительно, авторы статьи рассказывают об инструментах программы, которые влияют на работоспособность трейнера.
Трейнер экономит время игрока. С помощью такого устройства, игроку нет необходимости каждый день настраивать параметры Cheat Engine и делать изменения в файлах игры. Трейнер — это плагин, который создается один раз и используется каждый раз по необходимости. В такой плагин настраивается список функций. Это — увеличение очков игрока, уменьшение сил и выносливости соперника, сокращение карты, появление бустеров и др.
Этапы создания трейнера. Выбор процесса
Меню для создания трейнера расположено во вкладке «File».
Нажав кнопку «Generate graphic trainer» пользователю открываются два окна. В одном окне создается трейнер. В другом окне демонстрируется визуализация трейнера, а также, прописываются горячие клавиши.
В строке «Processname» прописывается класс процессов, которые будет выполнять трейнер. Для взлома программ используется процесс cheatengine-x86_64.exe.
Ниже расположена опция для установки горячей клавиши вызова трейнера. Пользователем выбирается сочетание клавиш по собственному усмотрению.
Так как динамическое размещение данных в памяти мешает записать нужные адреса и постоянно к ним обращаться, можно использовать технику поиска AOB. Жизненный цикл external-чита выглядит так:
Основная концепция
Когда мы запускаем игру на нашем ПК, данные хранятся в оперативной памяти, и им присваивается физический адрес памяти, например «00E0E990». Однако этот адрес не всегда содержит одно и то же значение, поскольку при каждом запуске процесса адреса назначаются по-разному. Поэтому нам нужно найти определенную функцию или «указатель» внутри процесса, который указывает нам на нужное значение. Именно этим мы, по сути, и занимаемся при создании трейнера: Мы ищем функцию в игровом процессе, которая всегда будет указывать нам на значение, которое мы хотим изменить, независимо от того, где в физической памяти хранится это значение. Я знаю, что это звучит сложно, но вы поймете, когда создадите свой первый трейнер.
Лучше всего посмотреть видео, чтобы увидеть своими глазами, как это делается, но в общих чертах: Мы сканируем значение, которое хотим изменить, и убеждаемся, что оно правильное. После этого мы выполняем сканирование указателя по этому адресу и, вероятно, получим множество указателей. Чтобы сузить выбор указателей, мы перезапускаем игру и снова сканируем, используя то же значение и его новый физический адрес в памяти. Мы повторяем этот процесс, пока не получим менее 300 или, в идеале, даже менее 100 указателей. После этого мы берем либо все указатели, либо обширную выборку из них и импортируем их в нашу таблицу читов, дважды щелкнув по ним. Теперь мы снова перезапускаем игру, подключаем Cheat Engine и теперь можем легко найти нужные указатели, сравнивая их значения с отображаемыми в игре.
Проблемы
Это работает только для статических адресов и не будет работать для динамических. Также трейнеры, созданные таким образом, будут быстро устаревать после даже самых незначительных обновлений и изменений в игре. Для того, чтобы обойти эту проблему, нам нужно будет создать трейнер AoB Scan Cheat Table Trainer. Я как можно скорее узнаю, как это сделать, и обновлю эту статью, когда смогу научить вас этому. Вот как сделать трейнер на русском.
Чтобы создать трейнер для игры, вам понадобится чит-движок под названием «Cheat Engine» и конечно же сама игра для которой и будет создаваться ваш трейнер. С помощью Cheat Engine отследите нужный вам процесс игры и создайте по нему трейнер в разделе специального меню.
Мы возьмём в качестве примера игру: Веселая ферма 2, наша задача сделать трейнер на бесконечные монеты. Запускаем игру и начинаем играть, видим что у нас 71 монета, ставим игру на паузу и сворачиваем игру на (Alt+Tab) — не в коем случаи не закрывайте игру и не выходите из неё.
Открываем чит-движок Cheat Engine, и нажимаем иконку в виде монитора, из выпадающего окна выбираем процесс нашей игры ferm2.wrp.exe и нажимаем открыть.
Дальше нам нужно найти наши монеты 71, в поле “Значение” вписываем 71 и нажимаем кнопку “Поиск”.
Далее нам нужно уточнить искомое значение, так как у нас получилось много адресов, а нам нужно оставить только одно. Разворачиваем нашу игру тем же способом на (Alt+Tab) либо нажмите на иконку игры на панели задач вашего компьютера и она развернется. Продолжите игру и потратьте деньги либо заработайте, чтобы монеты наши поменяли значение, у нас их стало 84, нажимаем паузу в игре и снова сворачиваем, но не закрываем игру.
Переходим Cheat Engine в поле значение вписываем 84 и нажимаем кнопку “Отсев”.
Как только мы отсеяли, у нас остался 1 адрес — это и есть наши заветные монеты, нажмите правой кнопкой мыши на значение из меню выберите “Найти инструкции, записывающие по этому адресу” по умолчанию (Ctrl+F6).
У вас откроется всплывающее окно “Следующие инструкции записывают в XXXXXXXX”, в нём ничего не будет. Для того чтобы в нём появился процесс для нашего тренера нужно снова открыть игру и изменить значение монет. Развернув игру с панели мы купили воду из колодца и получили значение 65 золота. Сворачиваем игру и переключаемся на Cheat Engine, как видим в поле появился процесс. Выберите его и нажмите кнопку «Показать в дизассемблере».
По скринам видно, где заменяются слова «About» и «Close» на «Справка» и «Закрыть» соответственно, «Hotkey» и «Effect» на «Клавиши» и «Эффект» соответственно.
Нажимаем «Применить» ( ).
Пишем игру на C
Про читы лучше всего рассказывать на практике. Мы напишем свою небольшую игру, на которой сможем потренироваться. Я буду писать игру на C#, но постараюсь максимально приблизить структуру данных к игре на C++. По моему опыту читерить в играх на C# очень просто.
Принцип игры прост: нажимаешь Enter и проигрываешь. Не особо честные правила, да? Попробуем их изменить.
Приступим к реверс-инжинирингу
У нас есть файл игры. Но вместо исходного кода мы будем изучать память и поведение приложения.
При каждом нажатии Enter жизни игрока уменьшаются на 15. Начальное количество жизней — 100.
Изучать память мы будем при помощи Cheat Engine. Это приложение для поиска переменных внутри памяти приложения, а еще хороший дебаггер. Перезапустим игру и подключим к ней Cheat Engine.
Первым делом мы получаем список всех значений 85 в памяти.
Все значения, которые нашел CE
Нажмем Enter, и показатель жизней будет равен 70 . Отсеем все значения.
Вот и нужное значение! Изменим его и нажмем Enter для проверки результата.
Проблема в том, что после перезапуска игры значение будет уже по другому адресу. Каждый раз отсеивать его нет никакого смысла. Необходимо прибегнуть к сканированию AOB (Array Of Bytes — массив байтов).
При каждом новом открытии приложения из-за рандомизации адресного пространства (ASLR) структура, описывающая игрока, будет находиться на новом месте. Чтобы найти ее, необходимо сначала обнаружить сигнатуру. Сигнатура — это набор не меняющихся в структуре байтов, по которым можно искать в памяти приложения.
После нескольких нажатий на Enter количество жизней изменилось на 55 . Снова найдем нужное значение в памяти и откроем регион, в котором оно находится.
Выделенный байт и есть начало нашего int32 -числа. 37 00 00 00 — число 55 в десятичной форме.
Я скопирую небольшой регион памяти и вставлю в блокнот для дальнейшего изучения. Теперь перезапустим приложение и снова найдем значение в памяти. Снова скопируем такой же регион памяти и вставим в блокнот. Начнем сравнение. Цель — найти байты рядом с этой сигнатурой, которые не будут меняться.
Начинаем сравнивать байты
Проверим байты перед структурой.
Как видишь, выделенные байты не изменились, значит, можно попробовать использовать их как сигнатуру. Чем меньше сигнатура, тем быстрее пройдет сканирование. Сигнатура 01 00 00 00 явно будет слишком часто встречаться в памяти. Лучше взять 03 00 00 01 00 00 00 . Для начала найдем ее в памяти.
Сигнатура найдена, но она повторяется. Необходима более уникальная последовательность. Попробуем ED 03 00 00 01 00 00 00 .
В подтверждение уникальности получим такой результат:
Нам необходимо найти отступ от сигнатуры, чтобы получить ее стартовый адрес, а не адрес жизней. Пока сохраним найденную сигнатуру и отложим на некоторое время. Не беспокойся, мы к ней еще вернемся.
Испытание тренера – самая спорная новинка Боевого Пропуска. В пабликах люди не слушают тиммейтов и берут на фп керри, даже когда проиграли /roll, а тут какой-то тренер будет им советы давать. Тем не менее, при грамотном подходе к роли, можно нафармить не только дополнительные уровни Пропуска, но и отличные эмоции. Как? Сейчас расскажу.
Делаем трейнер на Visual C++
Программа типа GameHack или TSearch для поиска нужных нам значений в памяти. Я предпочитаю TSearch, поскольку, на мой взгляд, она наиболее функциональна из всех подобных программ. Хотя дело выбора каждого. (берем отсюда)
Visual C++. У меня стоит версия 6.0, поэтому туториал будет сделан на ней. Версия не особо принципиальна, как ты понимаешь 🙂
Для начала соберем необходимую нам информацию, а именно найдем адреса в которых лежат нужные нам значения. Думаю с этим проблем у Тебя не будет, поэтому приведу уже готовые данные:
HP первого character’a 0x00C1C050 2 байта
MP первого character’a 0X00C1C054 4 байта
HP второго character’a 0x00C1C420 2 байта
MP второго character’a 0x00C1C424 4 байта
HP третьего character’a 0x00C1C7F0 2 байта
MP третьего character’a 0x00C1C7F4 4 байта
HP четвертого character’a 0x00C1CBC0 2 байта
MP четвертого character’a 0x00C1CBC4 4 байта
К нашему счастью игрушка не является DMA, то есть адреса наших переменных останутся неизменными все время. Конечно можно было найти ещё кучу полезных адресов, таких как, к примеру, опыт каждого из персонажей или их характеристики, но это уже дополнения, которые можно будет сделать потом. Сейчас главное понять принцип, а уж наворачивать будем позже.
SetTimer
FindWindow
GetThreadProcessId
OpenProcess
WriteProcessMemory
GetAsyncKeyState
KillTimer
CloseHandle
и нажми Edit code. Поскольку эта функция уже создана, попадем на кусок кода этой функции, которая вызывается когда создается наше окно. Там мы и инициализируем наш таймер. Добавляй перед строчкой return TRUE строку:
OK, перейдем к обработчику таймера. Ctrl+W и добавляй функцию WM_TIMER и перейди на её код. Вот. Эта функция будет вызываться каждый раз, когда сработает таймер. Как ты уже понял, тут мы будем писать код, который будет отвечать за отлов нажатия нужных нам клавиш и делать то, для чего, собственно, создается трейнер 🙂
CWnd *FindWindow(LPCTSTR lpszClassName, LPCTSTR plszWindowName);
и сравни ее с тем, что нам нужно:
HWND FindWindow(LPCTSTR lpszClassName, LPCTSTR plszWindowName);
Справа, в окне выбери вкладку ClassView и кликни на Avernum3tr classes правой кнопкой. Выбери New Class. В появившемся окне выбирай:
Class type Generic Class
Name CProcess
Function Type HANDLE
Function Declarations cOpenProcess(char *p_ClassName, char *p_WindowName)
Access Public
hWindow = FindWindow(p_ClassName, p_WindowName);
if(hWindow)
return NULL;
У тебя должно получится следующее:
HANDLE CProcess::cOpenProcess(char *p_ClassName, char *p_WindowName)
return NULL;
>
Таким же макаром пиши следующие функции:
bool CProcess::FindProcess(char *p_WindowTitle)
cOpenProcess(NULL, p_WindowTitle);
>
if(process)
else
return FALSE;
bool CProcess::IsKeyPressed(int key)
bool CProcess::WriteByteToProcess(DWORD p_Adress, BYTE p_Value)
else
Руководство по Magic Trainer Creator
В журнале действует рубрика “КОДекс”, включающая в себя раздел “Шестнадцатеричные коды”. Они применяются с помощью программы Magic Trainer Creator либо любой ей подобной. Ниже приводится инструкция по работе с MTC.
Я скопирую небольшой регион памяти и вставлю в блокнот для дальнейшего изучения. Теперь перезапустим приложение и снова найдем значение в памяти. Снова скопируем такой же регион памяти и вставим в блокнот. Начнем сравнение. Цель — найти байты рядом с этой сигнатурой, которые не будут меняться.
Как узнать версию вашей игры
— Версию вашей игры можно узнать там, где вы ее скачивали(если это пиратка).
— Иногда разработчики пишут версию в главном меню игры.
— Еще можно попробовать посмотреть в свойствах экзешника игры на вкладке детали (смотрите скриншот ниже).
Для этого кликните правой кнопкой мыши по иконке игры, выберите пункт свойства и перейдите в свойствах на вкладку детали.
Если вы не смогли узнать версию игры — тогда попробуйте все трейнеры, возможно какой-то из них у вас заработает.
Насколько я понимаю это происходит из-за того, что:
— Одна программа (трейнер) лезет в другую (игра) и изменяет там какие-то данные прямо находу, во время работы. Видимо такие действия софта характерны для вирусов.
— Программисты, которые пишут трейнеры используют такие же\похожие библиотеки, которые используются при написании вирусов\троянов.
Почему я установил пароль на все архивы с трейнерами?
Пароль пришлось установить как раз из-за ложных срабатываний антивирусов. Когда антивирусы считают, что на сайте выложены вирусы они сообщают это поисковикам (yandex, google и т.п.), после чего поисковики перестают показывать такой сайт в поиске. Чтобы этого избежать можно установить пароль на архивы (антивирусы не умеют открывать архивы, на которых установлен пароль).
И еще раз — пароль на архивы с трейнерами — gamesave.su
Покупаю только те, в которые без лицензии особо не поиграешь (например, GTA 5 Online, Battlefield, COD и т.д.)
Покупаю только самые лучшие, несмотря на то, что можно поиграть и в пиратку (например, Ведьмак 3, CS 1.6 и т.д.)
Если адрес не работает. Прежде всего убедитесь, что вы все правильно делаете. Если правильно, но все равно почему-то не работает, значит, скорее всего, игра использует динамически обновляемую память или конфигурация вашей машины значительно отличается от моей. Тогда придется искать адрес самостоятельно, как написано выше.
Игровые советы
Пойдем с самого начала игры.
Кто-то из игроков обязательно встретит вас ироничной фразочкой типа: «О, тренер! Что же мне делать, тренер, я не могу понять!». Отнеситесь к этому с юмором – люди еще не привыкли к тому, что в игре есть еще один непонятный человек, который чего-то требует. Как-то раз мой тиммейт только на третьей минуте спросил: «Слушай, а ты вообще кто, на каком герое-то играешь?».
Один из главных советов – не будьте навязчивыми. Конечно, иногда нужно стоять на своем и объяснять, почему Магнусу стоит максить Empower, если у него Phantom Assassin на керри. Но на стадии драфта вы можете лишь советовать, но не настаивать. Вы можете прекрасно знать мету и представлять, что мидер X и саппорт Y закроют драфт врага. Но вы не уверены в том, умеют ли ваши игроки исполнять на конкретных героях. Опять же, держите в голове – эти люди изначально вам не доверяют.
Следите за расстановкой по линиям. Возможно, вам стоит отправить триплу в сложную? А что, если мы поменяем местами мидера и оффлейнера? Когда подобная инициатива исходит от игроков, ее часто расценивают как попытку этого самого игрока выбить себе лучшие условия на линии. Но если голос со стороны аргументированно докажет, почему стоит так или иначе поменять лайнапы, к нему прислушаются.
Разгрузите команду, следя за приобретениями соперника. У керри противника появился Blck King Bar? Обязательно сообщите об этом команде. Любая важная покупка – повод не только рассказать об этом команде, но и придумать контрмеры. Вам кажется очевидной покупка Manta Style из-за Орчида у врага? Возможно, ваш керри так не думает. Подскажите, только вежливо.
Постоянно отслеживайте передвижения вражеского саппорта, чтобы увидеть месторасположение вардов. Игроки сконцентрированы на своем герое – они могут не заметить, как Bane бежит по реке, останавливается, и в этот момент у него пропадает Observer из инвентаря.
Возьмите за правило записывать тайминг Рошана и ультимейтов типа Black Hole. Во-первых, это поможет вам выработать привычку, когда вы будете играть сами. Во-вторых, знания о кулдауне важных способностей не раз выигрывали карту.
Если два игрока устраивают трэшток – вмешивайтесь. Ситуация, когда два человека на линии не понимают друг друга или матерят друг друга из-за взаимных ошибок, случается почти что каждую игру. Если этот срач не прекратить, возможно, дело дойдет до фида/фарма леса/рофлоартефактов.
Колесо чата – ваше главное оружие по поддержки морали и быстрым советам. Три моих самых используемых кнопки во время тренерства: звук «Аплодисменты» и фразы «Проверьте руны, пожалуйста» и «Успокойся, все в порядке». Используйте колесо на максимум – можно набрать туда смешных фраз, можно отдавать команды по типу «Разделитесь и фармите» и так далее. А еще не забывайте про типы – вы можете их кидать любому игроку, равно как и они вам.
Не говорите много, особенно во время драк. Постоянный разговор отвлекает от игры – скорее всего, игрок просто замутит вас вместо того, чтобы получать советы. Во время замеса используйте микрофон только в экстренных ситуациях – например, когда команде срочно надо отступать.
Что делать, если кто-то из игроков не хочет меня слушать?
Не пытаться донести свои мысли до него, но сконцентрироваться на других игроках. Вас не слушает мидер? Хорошо, тогда подумайте вместе с саппортом, куда ставить варды. Лучше вы будете полезны для 1-2 игроков, чем потратите час на бесполезные разговоры с токсиком. И да, будьте готовы к тому, что вы не понравитесь всем и сразу. Обычно уже к середине игры понятно, нравится ли игрокам то, что с ними сидит тренер. Есть такой тип игроков, которые никогда не поставят лайк – так что не всегда красный палец вниз означает, что вы где-то были неправы.
Получайте кайф от менторства. Если вы запустили этот режим только ради уровней, вам будет тяжело. Даже если вам нравятся стримы по доте, в случае с тренерством вы будете наблюдать отнюдь не зрелищную доту (попробуйте запустить собственный реплей – ужаснетесь от нелогичности действий как команды, так и себя).
Испытание тренера подарило нам возможность почувствовать себя Арсзиками и Пуппеями, оценить свой уровень понимания игры. А вы уже пробовали привести пятерых незнакомцев к победе? Делитесь своим опытом в комментариях.