Как сделать трейнер для игры самому
Как сделать трейнер для игры самому
Здравствуйте! Я решил написать подробнейший гайд по взлому одиночных игр и созданию трейнеров для них. В этом гайде должны разобраться даже новички.
Конечно, одиночные игры начинают проигрывать многопользовательским, но их век ещё долго не закончится. Пока все онлайн игры до ужаса однообразны!
Готовые трейнеры можно скачать с этого сайта. Трейнер для игры, рассматриваемой здесь, делает бесконечное супер-оружие, которое позволяет очень легко выиграть игру.
Взлом на бесконечное здоровье
Так как в этой игре здоровье обозначается полоской (шкалой), и мы не знаем значение здоровья, придётся искать неизвестное значение.
Тип сканирования выбираем «Unknown initial value». Тип значения оставляем «4 Bytes».
Он найдёт 70774784 значения. Теперь нам надо уменьшить количество значений, то есть отсеять лишние.
Уменьшаем количество здоровья в игре:
По логике, скорее всего, нужное значение 17207 или 16031. Методом тыка выясняем, что нужное значение 17207. Поменяем его на 17400.
Здоровье стало полным:
Более лёгкий способ поиска здоровья
Теперь, когда мы узнали количество здоровья, можно искать сначала точное значение в 4 байта, а потом уменьшенное. Находит 3 значения. Зелёное из них только одно, оно-то нам и нужно.
Зелёным цветом выделяются адреса, которые по мнению программы, не изменяют своё расположение. То есть при каждом запуске игры, они одинаковые и подходят для создания трейнеров.
Здоровье можно «заморозить», то есть программа сама будет восстанавливать указанное значение. Для этого нужно поставить слева галочку. Скрин будет ниже.
Если Вы не поняли, как ставить значение, скрин тоже будет ниже.
Взлом на 1 000 000 очков
По вышесказанному материалу попробуйте по скринам сами догадаться, как надо делать. Если не получится, пишите в комментариях, поможем.
Взлом 1-ого вида ракет
(со всеми остальными и с супер-оружием всё аналогично)
Опять попытайтесь разобраться по скринам.
Когда таблица создана, можно сделать трейнер. В меню «File» выбираем «Save». Тип файла: «Cheat Engine Trainer (*.EXE)».
Нам предлагают создать новый трейнер, изменяющий данные в запущенной игре. Нажимаем «ОК».
Нажимаем «Add». У адресов можно было изменить описание, чтобы тут выбрать его и вписать значение. Переключатель стоит в положение заморозки. Жмём «Add».
Адрес появляется в списке. В поле «Description» можно вписать описание действия, я в поле «Hotkey» горячую клавишу, активирующую действие.
Если замораживать не надо, то ставим второй пункт переключателя.
Всё добавляем и генерируем трейнер.
Полный перевод трейнера
Трейнер, созданный в СЕ, содержит английские надписи, как на скрине:
По скринам видно, где заменяются слова «About» и «Close» на «Справка» и «Закрыть» соответственно, «Hotkey» и «Effect» на «Клавиши» и «Эффект» соответственно.
Нажимаем «Применить» () и «Сохранить» (
).
Пояснения по типам сканирования переменных
Я постарался объяснить как можно лучше. Если что-то непонятно или есть дополнения, пишите в комментариях. Для лучшего понимания размеров переменных, попробуйте изучить какой-нибудь простенький язык программирования (Basic, Pascal) по какой-нибудь книжке для «чайников». Но, если Вы этого не поняли, то ничего страшного. В начале читерского пути это не будет мешать.
Делаем трейнер на 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 строку:
SetTimer(1, 100, NULL);
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
HWND hWindow;
DWORD pid;
hWindow = FindWindow(p_ClassName, p_WindowName);
if(hWindow)
<
GetWindowThreadProcessId(hWindow, &pid);
return ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
>
return NULL;
У тебя должно получится следующее:
HANDLE CProcess::cOpenProcess(char *p_ClassName, char *p_WindowName)
<
HWND hWindow;
DWORD pid;
hWindow = FindWindow(p_ClassName, p_WindowName);
if(hWindow)
<
GetWindowThreadProcessId(hWindow, &pid);
return ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
>
return NULL;
>
Таким же макаром пиши следующие функции:
bool CProcess::FindProcess(char *p_WindowTitle)
<
if(process==NULL)
<
process=this->cOpenProcess(NULL, p_WindowTitle);
>
if(process)
<
isrunning = TRUE;
return isrunning;
>
else
return FALSE;
bool CProcess::IsRunning()
<
return isrunning;
>
bool CProcess::IsKeyPressed(int key)
<
if (IsRunning()) return ((GetAsyncKeyState(key) & 1) == 1);
return FALSE;
>
bool CProcess::WriteByteToProcess(DWORD p_Adress, BYTE p_Value)
<
DWORD bytes;
HANDLE pocess
bool isrunning
Открой во вкладке (справа) FileView файл Avernum3trDlg.cpp и в самом верху (после всех #include’ов напиши:
Это создаст глобальную переменную типа CProcess с названием game. Так мы будем общаться с нашим классом и с игрой (через него)
if(!check)
<
game.FindProcess(«Avernum 3»);
>
else
<
if(game.IsKeyPressed(VK_F4))
<
game.WriteByteToProcess(0x00c1c050, 0xFF);
game.WriteByteToProcess(0x00c1c051, 0x10);
>
Создание трейнера своими руками
Представьте себе ситуацию: вы никак не можете пройти уровень в любимой игрушке, и при этом к ней не существует читов. Что делать? Правильно, нужно воспользоваться трейнером.
Трейнер — это небольшая программа, с помощью которой можно изменять некоторые параметра игры.
Предположим, вы запустили игру, в которой у вас 10 жизней. С помощью трейнера можно изменить количество жизней, например, с 10 до 100, или вовсе сделаться бессмертным. Трейнеры предоставляют несравнимо большие возможности, чем обыкновенные коды. Вообще большинство геймеров старается пользоваться именно трейнерами, а не обычными кодами.
Принцип работы этой программы таков. Игра загружает некоторые данные в оперативную память. В их число входят количество жизней, деньги и многие другие игровые параметры. Трейнер, включаемый после запуска игры, занимается тем, что меняет или «замораживает» эти параметры прямо в оперативной памяти.
Как искать неизвестные значения
Например, вы хотите бесконечные жизни в GTA Vice city. Сначала запускаем MTC, затем игру. Запоминаем количество жизней и переключаемся в MTC нажатием ALT+TAB. Далее следуйте инструкции:
1. Переключитесь в режим PID LOCK (рис. 1) и выберите из списка запущенную игру.
2. Выберите алгоритм поиска Normal.
3. В окне ввода значения для поиска (Value to search) наберите количество жизней в игре.
4. Нажмите кнопку Start.
5. После того, как поиск будет закончен, переключитесь обратно в игру.
6. Потратьте немного жизней. К примеру, их у вас осталось 90.
7. Переключитесь в MTC.
8. В окне ввода значения для поиска наберите 90.
9. Нажмите кнопку Continue.
10. По окончании поиска переключитесь в игру.
11. Повторяйте эти действия, пока не останется только одно значение.
Находить и «замораживать» таким образом можно не только численные значения, но и бары (полоски силы, выносливости и т.д.)
Когда вы нашли нужное значение, вы можете изменить его или «заморозить» — не давать ему изменяться:
1. Выберите частоту обновления значения. Чем правее указатель, тем быстрее будет обновляться адрес. Если вы не знаете, что выбрать, — доведите указатель до правой границы.
2. Сделайте двойной щелчок по кнопке Freeze.
Теперь значение не должно меняться.
Изменить значение на нужное вам:
1. Выберите адрес.
2. Введите нужное значение.
3. Нажмите Poke.
4. Если вы изменили значения по нескольким адресам, то можете нажать кнопку Poke All, чтобы внести сразу все изменения.
Помните, что значения тоже должны вводится в HEX-формате. То есть цифра 75, которую вы видите на картинке, вовсе не будет 75 жизнями в игре (рис. 2). На самом деле их будет 117, т.к. 75 в шестнадцатеричной системе исчисления (которая и называется HEX) равно 117 в десятичной. Чтобы вы не запутались, в программу встроен калькулятор. Как правило, аналогичные программы позволяют вводить значения в десятеричной системе исчисления.
Создание трейнера
Теперь, когда мы научились находить значения и работать с ними, пора приступить к созданию трейнера. Перед этим надо сохранить «замороженное» или измененное вами значение. Нажмите кнопку save и сохраните значение параметра в файл, место которого нужно указать на диске. Он может быть сохранен в любую папку.
Файл будет иметь расширение *.gtc. Теперь приступим непосредственно к созданию трейнера.
Нажмите на кнопку, изображенную на рис. 3. Откроется окно создания трейнера.
Теперь вам необходимо ввести следующую информацию:
TITLE: заголовок трейнера.
MADE BY: кем сделан.
DATE: когда был создан.
FOR: для какой игры.
INFO: пишите, что хотите.
EXE NAME: имя файла, который сгенерирует MTC.
EMPTY: здесь мы открываем сохраненные значения и даем им имя, которое хотим видеть на кнопке трейнера (ее тоже нужно указать). Важно, чтобы эти клавиши не совпадали с клавишами управления в самой игре. Очень часто модерируемые параметры заводятся на F1-F12, которые могут использоваться игрой.
Рядом с этой надписью — место для галочки. Если галочка стоит, значение по данному адресу будет заморожено. Если галочки нет, значение будет записано лишь один раз и потом может измениться.
В левом нижнем углу находится опция Auto PID: если она не отмечена, то в получившемся трейнере можно будет использовать только горячие клавиши, если отмечена — можно управлять действиями трейнера из него самого, нажимая кнопки.
Когда все будет заполнено, нажмите на кнопку генерации трейнера, и он будет записан в директорию с MTC. Вы узнаете его по названию и иконке, изображающей молнии на зеленом фоне.
Конечно, Magic Trainer Creator далеко не единственная программа такого рода. Есть и аналогичные, например, ArtMoney или DetectiveStory. Принцип работы у них одинаков. Если вы захотите воспользоваться другими программами для создания трейнера, то вот линки на них:
Как создать трейнер для игр?
Чтобы сделать игру более интересной и адаптивной, изменить значение каких-либо параметров, воспользуйтесь специальными программами для создания трейнеров, помогающих в этом. Magic Trainer Creator – проста, удобна, понятна.
Как создать трейнер
Вам понадобится
Программа Magic Trainer Creator
Инструкция
1
Загрузите программу Magic Trainer Creator и игру. Перейдите в режим PID LOCK, выберите из перечня название игры. Затем обозначьте алгоритм поиска Normal. В окне ввода значения для поиска укажите количество жизней в игре. Запустите процесс.
2
После завершения поиска переключитесь в игру. «Истратьте» часть жизней, снова зайдите в Magic Trainer Creator. Введите в окне ввода значения для поиска конкретное число жизней, нажмите Continue.
Реклама 25
3
Перейдите в игру. Эти действия повторяйте до тех пор, пока не останется только одно значение. Далее выберите частоту обновления значения. Для этого укажите точное значение или доведите указатель до правой границы. Нажмите два раза на Freeze.
4
Выберите адрес, введите требуемое значение. Запустите Poke. Сохраните значение параметра в файл, указав его место на диске. Его расширение будет *.gtc.
5
Откройте окно создания трейнера. Введите в соответствующие поля заголовок трейнера; сведения о том, кем, когда и для какой игры он сделан. Укажите имя файла, который сгенерирует Magic Trainer Creator.
6
Откройте сохраненные значения, обозначьте их каким-то именем. Нажмите на кнопку генерации трейнера.
Совет 2: Как создавать трейнеры
Тема: Создаем трейнер на основе ArtMoney
Социальные закладки
Опции темы
Отображение
Хочу сказать, что статья посвящена новичкам и прошу профессионалов не закидывать тапками за возможные ошибки.
Дальше заходим в магазин (B) и покупаем одну гранату, Жмем ок и рождаемся, теперь у нас 200 баксов, сворачиваем игру, разворачиваем ArtMoney, и теперь нажимаем кнопочку «Отсеять». Значение уже ставим 200 и нажимаем ок. Дальше в табличке слева появилось одно значение (если их больше, то умрите, у вас отнимется 100, и отсейте снова), которое можно легко изменить, и которое является нашими деньгами. Нажимаем на зеленую стрелочку, и у нас появилась возможность редактировать значение. Называем ячейку «Бабло», и попробуем поставить его значение 3000. Жмем «Ентер» и возвращаемся в сталкер.
Адрес указателя при перезагрузке игры не меняется. То есть, если адреса в таблице привязать к указателю, то получим таблицу, значения в которой всегда актуальны.
Итак, выделяем ячейку с опытом, кликаем правой кнопкой мыши и делаем команду «Искать указатель на этот адрес» (в подразделе «Больше»). Находим этот указатель и привязываем командой «Установить указатель на все» или «на группу». Упс, но мы ничего не находим! Это значит что указатель не на адрес с опытом, а на структуру, начало которой мы не знаем. Итак, опять выделяем ячейку с опытом и делаем команду «Искать указатель на начало блока памяти».
Тем самым мы найдем все указатели на диапазон адресов между началом блока и ячейкой с опытом. Таких указателей нашлось 2610 штук.
Перезапускаем игру. Нажимаем кнопку «Отсеять» и делаем «Отсеивание указателей» на значение 300 (Это сколько денег стандартно).
Такой указатель один. Если указатель не один, то перезапускаем игру и опять делаем «Отсеивание указателей». И так несколько раз. Если все равно получается несколько адресов, то выбираем любой. В левой таблице выделяем указатель, в правой таблице выделяем ячейку с опытом и делаем команду «Установить указатель на все».
Мы имеем таблицу, адреса которой не меняются при перезагрузке игры. Теперь сохраняем таблицу куда-нибудь, например, на рабочий стол.
Теперь перейдем к самому главному, созданию тренера на основе полученной уже таблицы в ArtMoney. В окне редактирования адреса можно назначить специальные клавиши для каждого адреса в таблице, что позволяют изменить значение по этому адресу из самой игры, не переключаясь на ArtMoney. Эти клавиши буду работать только, если использование клавиш разрешено в настройках. Для этого выделяем Адрес «Бабло», жмем правой кнопкой мыши, изменить, переходим на вкладку специальные клавиши, и выставляем все как нужно, заходим в игру и проверяем.