Комментарии 8
Первая часть The Elder Scrolls, Daggerfall, имеет огромный игровой мир. И при том что разработана игра была в далеком 1996м и даже учитывая тот факт, что часть игрового мира — процедурно генерируется, мир все равно огромен. И при этом, здания в игре — многокомнатные и многоэтажные. И вот последнее время задумался: в каком же виде сохранен мир? Игра занимает 155 МБ в формате ZIP-архива, а там ведь кроме мира еще же предметы, диалоги, квесты, персонажи… Очень хотелось бы почитать где-нибудь! Ну, или на крайний случай, самому разобрать файлы.
Поправка: когда искал данную тему в интернете (с телефона), коим-то образом обошел стороной вот эту страничку, которая описывает в общем-то весь сыр-бор (больше деталей про каждый конкретный элемент данных — по ссылкам из главной статьи) https://en.uesp.net/wiki/Daggerfall:BSA_file_formats
Очень замечательно описано, как стоит подходить к расшифровке неизвестных форматов. Все расписано очень логично и виден четкий план действий.
Тем более становится удивительным, неужели, ну неужели никто еще не автоматизировал этот процесс? Ну очевидно же, что большинство форматов файлов содержать какие-то заголовки, в которых содержатся или размеры данных, или их смещения — это все ведь можно и нужно искать автоматизировано. Где эти программы и почему люди ими не пользуются?
habr.com/ru/post/281595
habr.com/en/post/442580
Полной автоматизации конечно нет, но сильно упростить себе жизнь можно. Насколько помню, под винду что-то было, автоматически пытающееся распаковать бинарники самыми распространенными алгоритмами.
Есть Kaitai Struct,
Ну нет же, это же опять ручная работа. Это просто генератор парсеров из приятного языка разметки. Задача в том, чтобы эту самую разметку найти автоматически. Люди, которые реверсом занимаются, ведь знают, с чего начать, действуют по какому-то алгоритму, который можно попытаться формализовать. Например:
- Файлы обычно содержат заголовок, в начале или в конце, обычно в начале
- Файлы часто состоят из секций, их длина и начальное смещение часто где-то описана, обычно в заголовке
- Длина может выражаться или количеством байт, или количеством записей — значит нужно искать похожие блоки
- и т.д., практикующие люди наверняка смогут еще накидать десяток эвристик
Введение в реверс-инжиниринг: взламываем формат данных игры