1157
1
0
5 сентября
15:59
декабрь
2015

Программист, чья специальность/область нередко называется гордо обобщенно Reverse Engineering (RE), анализирует структуру файлов и памяти игры либо же её защиты.

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

Так как программа хранится в виде испольняемых файлов (это принципиально для любой платформы), с момента ее запуска, её псевдокод начинает выполнятся. Для этого система загружает программу в оперативную память. Например, исполняемый файл весом в 80 Мб занимает первичное пространство около 80 мб, далее, с помощью динамического выделения памяти, игра загружает все остальные нужные ей ресурсы (текстуры, меши, звуки, скрипты и прочее). Современные игры занимают уже в среднем около 4-5 гб оперативной памяти, так как количество загружаемых ресурсов растет с повышением производительности компьютеров, позволяя программистам создавать все более сложные миры и модели в своих играх.

Эти условные 5 ГБ, занимаемые игрой в оперативной памяти - обыкновенная память, имеющая недокументированную структуру, то есть не более чем огромный блок данных. Лишь программа умеет правильно его использовать и использует. В задачи хакера входит анализ и поиск ключевых мест в этой памяти, разложение памяти на осмысленные блоки, связанные с нужными процессами.

http://computer.forensikblog.de/media/dmp-struct-1.png

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

Для изучения вирусов и незнакомых программ хакеры используют отладчик - программу, которая интерпретирует испольняемые файлы и память программ, служит для диагностики и исправления проблем, как хирургия у людей.

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

Reverse Engineering - самая сложная наука, известная мне на практике. Она требует не только понимания архитектуры процессора, навыков программирования и отладки, но и понимания моделей, которые разработчики использовали в своей игре. Все описанное выше позволяет взламывать любые программы, писать многофункциональные патчи, вирусы, кейгены (анализируя принцип построения серийных кодов в активаторах программ).

Растет и сложность кода в программах и уровень защит, общая сложность систем. Например, во многих играх используются скриптовые языки для программирования игровой логики (Python, LUA и другие), появились игры на ненативных языках (.NET), хотя это чаще упрощает работу хакеру, чем усложняет - достаточно раз разобраться с конкретной технологией. Защиты именно от отладки - упаковщики - так же прогрессируют: так называемые упаковщики, используемые во многих дорогих играх сегодня, не позволяют изучить себя кому попало, но стоит разобраться в том, как работают упаковщики, и это тоже не составит проблемы.

Взлом защиты видео игры является не более чем игрой для опытных программистов. Иногда мы даже делаем это общими усилиями. Некоторые за это получали сроки, а-ля криминале.

Dmitrij Igorevichотвечает на ваши вопросы в своейПрямой линии
7
0
Если вы знаете ответ на этот вопрос и можете аргументированно его обосновать, не стесняйтесь высказаться
Ответить самому
Выбрать эксперта