stringtranslate.com

Тренер (игры)

Тренеры игр — это программы, созданные для изменения памяти компьютерной игры , тем самым изменяя ее поведение с помощью адресов и значений, чтобы позволить мошенничество. Они могут «заморозить» адрес памяти , не позволяя игре понижать или изменять информацию, хранящуюся по этому адресу памяти (например, счетчик здоровья, счетчик боеприпасов и т. д.), или манипулировать данными по указанным адресам памяти в соответствии с потребностями человека, мошенничающего в игре.

История

В 1980-х и 1990-х годах трейнеры обычно интегрировались непосредственно в саму игру группами взломщиков . Когда игра запускалась впервые, трейнер загружался первым, спрашивая игрока, хочет ли он читерить и какие читы он хотел бы включить. Затем код переходил к самой игре. Эти встроенные трейнеры поставлялись с вступлениями о группах, выпускающих игру, и трейнер часто использовался для демонстрации навыков демо- кодирования группы взломщиков. [1] Некоторые из этих групп сегодня полностью сосредоточены на своей Демосцене . [2] В списках релизов и вступлениях групп взломщиков обученные игры были отмечены одним или несколькими знаками плюс после них, по одному для каждой опции или чита в трейнере, например: «Mega Krew представляет: Ms. Astro Chicken++ » . Современные трейнеры добавляют свои названия одним + или пишут «плюс» и номер, так как многие из них имеют несколько функций. Используемое число представляет собой количество модификаций, доступных трейнеру, например, «бесконечное здоровье» или «убийства с одного удара». Другое отличие — включение версии игры или источника цифровой загрузки игры. Например: «Hitman: Absolution Steam +11 Trainer», [3] «FEAR 3 v 1.3 PLUS 9 Trainer» и т. д. [4] [5]

Современные трейнеры также поставляются как отдельно загружаемые программы. Вместо того, чтобы напрямую изменять программирование игры, они изменяют значения, хранящиеся в памяти. Фактически, это стало настолько распространенным, что трейнеры сегодня, по определению, изменяют только память; изменение исполняемого файла игры не приветствуется, и такие программы считаются не настоящими трейнерами, а патчами.

При объектно-ориентированном программировании объекты памяти часто динамически хранятся в куче , но современные операционные системы используют рандомизацию адресного пространства (ASLR) . Поэтому единственный способ изменить такую ​​память воспроизводимым образом — получить информацию изнутри игрового процесса. Для этого требуются методы обратной разработки, такие как API-подключение malloc () и free() , внедрение кода или поиск статических указателей доступа. Тренер становится активным, когда объект был выделен, и снова деактивируется, когда объект освобождается.

Современные операционные системы также поставляются с позиционно-независимыми исполняемыми файлами (PIE) для безопасности. Вместе с ASLR двоичные файлы загружаются в другой адрес виртуальной памяти при каждом выполнении кода. Это делает надежную модификацию значений статической памяти более сложной. Адрес загрузки должен быть определен и вычтен из найденного адреса памяти, чтобы получить смещение статической памяти. Это смещение часто является в точности адресом статической переменной в двоичном файле PIE. Например, инструмент Linux scanmem поддерживает PIE таким образом. [6] Для настроенного смещения памяти игровой тренер также определяет адрес загрузки и добавляет его обратно во время выполнения. Тот же метод можно использовать и для динамических библиотек .

Статические указатели доступа против API-перехвата

Поиск и отслеживание указателей доступа, обратных указателям на статическую память, может быть обременительным. Он не предоставляет размер объекта, и если есть несколько объектов одного класса, их часто нельзя обработать правильно, так как между ними в куче могут быть, например, векторы или списки. Но преимущество в том, что этот метод можно использовать для присоединения к уже запущенному процессу, если он работает. Поддержка DMA (динамического распределения памяти) в Cheat Engine является примером этого.

API hooking работает совершенно иначе: предварительный загрузчик загружает библиотеку в игровой процесс при его запуске. Библиотека шпионит за динамическими выделениями памяти, и обнаружение начинается с их записи. При параллельном поиске в статической памяти можно сопоставить найденный адрес значения с уникальным выделением памяти. Идея состоит в том, чтобы закрыть игровой процесс сразу после того, как значение найдено, а объект все еще существует. Затем последнее совпадающее выделение памяти является правильным. Поэтому сопоставление его в обратном порядке является методом выбора. Размер объекта, а также смещение значения внутри него обнаруживаются, и адрес кода перехода назад в двоичном файле игры может быть определен с помощью обратной трассировки. Часто находится конструктор, и с его помощью можно отслеживать все объекты памяти, которые он выделяет. Библиотека в игровом процессе и игровой тренер должны взаимодействовать друг с другом посредством межпроцессного взаимодействия (IPC) . Недостаток в том, что это может быть обнаружено как вредоносное ПО . Но можно найти больше значений внутри объектов, выгрузив и сравнив их. Также адаптация к другим версиям игр и компиляторов становится простой, поскольку все, что требуется, это найти вызов библиотечной функции с известным параметром (размер объекта) в дизассемблировании. Например, бесплатный и открытый (FOSS) универсальный игровой тренажер "ugtrain" показывает, что этот метод полностью легален на примерах игр FOSS . [7]

Автоматизированные инструменты, используемые при изготовлении тренажеров

В прошлом трейнеры часто кодировались на языке ассемблера или любом другом языке высокого уровня, доступном в то время. Сегодня трейнеры также можно создавать с помощью автоматизированных инструментов создания трейнеров, которым требуется только базовая информация о читах, такая как адрес и код инъекции, затем программа компилирует трейнер, используя предопределенные значения и настройки, не требующие никаких навыков программирования от конечного пользователя. Самым популярным инструментом создания трейнеров, используемым сегодня, является Cheat Engine , который поддерживает широкий спектр типов инъекций и указателей, другими инструментами, которые использовались в прошлом, но больше не применяются, являются Trainer Maker Kit, Game Trainer Studio и Trainer Creation Kit и т. д. [8] Некоторые из передовых методов, которые поддерживает трейнер Cheat Engine, включают инъекцию кода , сдвиг кода и гибкость и универсальность, предоставляемые его скриптами Lua [9] [10], которые постепенно вытеснили другие инструменты создания трейнеров, в которых отсутствовала поддержка некоторых из этих функций. [11]

Ссылки

  1. ^ "Defacto2 Group Information Page for Fairlight". Содержит информацию об их старых демо-записях и релизах, а также статистику . Архивировано из оригинала 6 октября 2011 года . Получено 14 февраля 2014 года .
  2. ^ "Групповые демо Razor1911". Подразделение демосцены Razor1911, которое закодировало впечатляющие демо еще в ранние дни встроенных трейнеров . Получено 14 февраля 2014 г.
  3. ^ "Hitman Trainer". Наименование тренеров по группам современных тренеров . 21 ноября 2012 г. Получено 14 февраля 2014 г.
  4. ^ "GCW list of trainers" . Получено 14 февраля 2014 г. .
  5. ^ "Листинг знаменитой группы сценических тренеров DVT" . Получено 5 июня 2015 г.
  6. ^ "Scanmem: введение типа региона и поддержка адреса загрузки". GitHub . Получено 5 июня 2015 г.
  7. ^ "универсальный игровой трейнер "ugtrain"". GitHub . Получено 25 декабря 2015 г. .
  8. ^ "Инструменты для изготовления тренажеров" . Получено 14 февраля 2014 г.
  9. ^ "FearlessRevolution". Сообщество, посвященное трейнерам и таблицам чит-движков . 2020-03-25 . Получено 2020-03-25 .
  10. ^ "Lua". Cheat Engine Lua Wiki, объясняющий некоторые функции скриптинга, доступные в CE . 2013-06-11 . Получено 2014-02-14 .
  11. ^ "OPTrainers" . Получено 2021-06-23 .