Трейнер

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Тре́нер, тре́йнер (англ. trainer) — программа, предназначенная для изменения игровых параметров (например, «очков жизни», чтобы сделать игрока «бессмертным»), обычно они работают непосредственно с оперативной памятью компьютера. Наиболее полезен для игр, в которых не предусмотрены чит-коды.

В 1980-х и 1990-х годах трейнеры обычно встраивались хакерами прямо в код игр. При запуске игры, сначала запускался трейнер с диалоговым окном «Вы хотите использовать читы?» Дальше выполнялся код игры. В названии трейнера использовались знаки сложения (+), по одному на каждую опцию трейнера. Например, «Группа Хакеров представляет: Игра+++» (три опции, например, бессмертие, бесконечные боеприпасы и телепортация).

Современные трейнеры обычно запускаются как отдельная программа (до игры) и в своих названиях используют один знак сложения с числом опций после него, например, «Doom 3 Trainer +15». Кроме того, современные трейнеры работают с оперативной памятью игры, а не её исполняемым файлом, поскольку внесение изменений в исполняемый файл осложняется системами защиты от копирования.

Методы создания трейнеров[править | править вики-текст]

Для создания трейнеров используются дамперы памяти, отладчики и дизассемблеры. Самый простой способ создать трейнер — поискать в памяти значения, совпадающие с нужным игровым параметром. Затем изменить его и поискать в получившемся списке снова. После нескольких итераций скорее всего останется небольшой список адресов, значения по которым можно попытаться изменить. Существует множество утилит (ArtMoney, Cheat’o’Matic…), автоматизирующих процесс поиска и изменения значений.

В некоторых случаях нужное игровое значение постоянно меняет свое положение в памяти. В этом случае можно попытаться найти указатель на него (возможно с небольшим смещением, если игровое значение находится в какой-либо структуре данных). Если и указатель меняет положение в памяти, то можно поискать указатель на этот указатель и т. д. Также можно поставить точки останова на обращение к адресу игрового значения и проанализировать код, который их читает или изменяет.

Если игровое значение является полем некоторого класса, то можно искать экземпляры этого класса по указателю на таблицу виртуальных методов. Найти таблицы виртуальных методов не сложно из-за их специфической структуры. Кроме того, они часто содержат указатель на имя класса. При поиске экземпляров класса желательно определять не удален ли он по флагам менеджера памяти (который зависит от языка программирования, на котором написана игра).

Создание трейнера[править | править вики-текст]

Трейнеры создаются следующими способами:

  1. С помощью программ
    • сканер памяти (TSearch, ArtMoney, Cheat Engine, GodGame)
    • отладчик (SoftIce, OllyDbg, встроенный в TSearch, Cheat Engine, GodGame)
    • Написание трейнера на различных языках программирования.
  2. С помощью программ для автоматического создания трейнеров (TMK, GTS, Trainer Creation Kit, Cheat Engine, GodGame)

Существует 3 типа игр, для которых трейнеры могут создаваться разными способами:

  1. простая (запись в память осуществляется напрямую по адресу)
  2. DMA (динамическое распределение памяти. Если в игре присутствует DMA «технология», то адрес с необходимым для вас значением будет изменяться при каждом перезапуске или переходе на новый уровень)
  3. защищенная (игра, которая защищена каким-либо протектором, создание трейнеров для таких игр бывает трудоёмким)

Защита от трейнеров[править | править вики-текст]

Если в игре имеется официальная таблица рекордов или игра является сетевой (и не все расчёты идут на стороне сервера), то существование трейнеров губит дух игры. В этом случае приходится встраивать систему защиты от трейнеров, поскольку системы защиты от копирования не справляются с этой задачей. Для этого важнейшие игровые параметры шифруются (и расшифровываются на короткое время перед использованием) или создается зашифрованная копия (с которой оригинальный параметр постоянно сравнивается). Для обхода таких защит не обойтись без дизассемблирования программы.