Как стать автором
Обновить

Введение в реверс-инжиниринг: взламываем формат данных игры

Время на прочтение 48 мин
Количество просмотров 25K
Всего голосов 49: ↑48 и ↓1 +47
Комментарии 8

Комментарии 8

НЛО прилетело и опубликовало эту надпись здесь
Как то приходилось расковыривать один формат 3D файлов, но я разбирался декомпилируая программу его использующую. Потом некоторые моменты стали заметны на глаз, но это очень увлекательное занятие.

Первая часть The Elder Scrolls, Daggerfall, имеет огромный игровой мир. И при том что разработана игра была в далеком 1996м и даже учитывая тот факт, что часть игрового мира — процедурно генерируется, мир все равно огромен. И при этом, здания в игре — многокомнатные и многоэтажные. И вот последнее время задумался: в каком же виде сохранен мир? Игра занимает 155 МБ в формате ZIP-архива, а там ведь кроме мира еще же предметы, диалоги, квесты, персонажи… Очень хотелось бы почитать где-нибудь! Ну, или на крайний случай, самому разобрать файлы.

Поправка: когда искал данную тему в интернете (с телефона), коим-то образом обошел стороной вот эту страничку, которая описывает в общем-то весь сыр-бор (больше деталей про каждый конкретный элемент данных — по ссылкам из главной статьи) https://en.uesp.net/wiki/Daggerfall:BSA_file_formats

Очень замечательно описано, как стоит подходить к расшифровке неизвестных форматов. Все расписано очень логично и виден четкий план действий.


Тем более становится удивительным, неужели, ну неужели никто еще не автоматизировал этот процесс? Ну очевидно же, что большинство форматов файлов содержать какие-то заголовки, в которых содержатся или размеры данных, или их смещения — это все ведь можно и нужно искать автоматизировано. Где эти программы и почему люди ими не пользуются?

Есть Kaitai Struct, есть hexinator/synalyze
habr.com/ru/post/281595
habr.com/en/post/442580

Полной автоматизации конечно нет, но сильно упростить себе жизнь можно. Насколько помню, под винду что-то было, автоматически пытающееся распаковать бинарники самыми распространенными алгоритмами.
Есть Kaitai Struct,

Ну нет же, это же опять ручная работа. Это просто генератор парсеров из приятного языка разметки. Задача в том, чтобы эту самую разметку найти автоматически. Люди, которые реверсом занимаются, ведь знают, с чего начать, действуют по какому-то алгоритму, который можно попытаться формализовать. Например:


  • Файлы обычно содержат заголовок, в начале или в конце, обычно в начале
  • Файлы часто состоят из секций, их длина и начальное смещение часто где-то описана, обычно в заголовке
  • Длина может выражаться или количеством байт, или количеством записей — значит нужно искать похожие блоки
  • и т.д., практикующие люди наверняка смогут еще накидать десяток эвристик
Вероятно задача парсить разные типы файлов в промышленных масштабах возникает не так часто. Ниша узкая, выхлоп невнятный.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории