Arts-Union

Мастерская => Стол заказов и предложений => Тема начата: Altmer от 06 Декабрь 2016, 11:48:00

Название: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Altmer от 06 Декабрь 2016, 11:48:00
Принимаю заказы на реинженеринг форматов данных не использующих шифрование.

Если справляюсь - получаете код на С++ под ZLIB-лицензией для работы с файлом.

Собственно мне это надо, скажем так, для апробирования некоторых программных модулей, и если кому-то нужно отреверсить конкретный формат данных, например для игр 3ДО или что-то еще, то я с удовольствием совмещу приятное с полезным.
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Altmer от 06 Декабрь 2016, 13:46:07
Для себя первым делом отреверсил структуру файловой системы NVRAM для 3ДО. В следующей версии Феникса можно будет заглянуть внутрь содержимого и извлечь отдельные файлы =) А может даже и записать!

Код: C++
  1. struct nvram_header //очень похоже на файловую систему в дисках 3ДО
  2. {
  3.   u8   record_type; // 1
  4.   c8   synk[5]; // "ZZZZZ"
  5.   u8   version; // 2
  6.   u8   flags; // 0
  7.   c8   comment[32]; //пусто
  8.   c8   id[32]; //"NVRAM"
  9.   u32b volume_uniq;
  10.   u32b volume_size; // 1
  11.   u32b volume_count; //должно быть 32768
  12.   u32b root_uniq; //уникальный идентификатор корня
  13.   u32b root_count; //ноль - корневой директории нет, NVRAM вообще не поддерживает директории
  14.   u32b root_size; //размер блока корневой директории
  15.   u32b last_avatar_index; //всегда ноль, дублирование в NVRAM не используется
  16.   u32b avatar;  //адрес первой записи в двусвязном списке
  17. }
  18.  
  19. //каждая запись имеет следующий формат
  20. struct nvram_record
  21. {
  22.   u32b uniq;  //уникальный идентификатор записи
  23.   u32b next; //адрес следующей записи (если он равен avatar, значит это последняя запись)
  24.   u32b prev; //адрес предыдущей
  25.   u32b size; //размер сегмента памяти связанного с записью включая саму структуру record
  26.   u32b head_size; //размер заголовка включая саму структуру record (нас интересуют только заголовки размером 64 байта)
  27.  
  28.   //поля ниже - только для структур с размером 64 байта
  29.   u32b fsize; //размер данных файла, которые следуют сразу же за заголовком и их размер не должен превышать size-head_size
  30.   u32b zero; //ничего кроме нуля не встречал, но возможно это место для каких-либо флагов
  31.   c8   ext[4]; //по умолчанию там обычно пробелы, но иногда бывают 4 символа - похоже на аналог расширения у файлов, но расширения бывают и в имени
  32.   c8   file_name[32]; //имя файла
  33. }
  34.  
  35.  
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: ПАУК от 07 Декабрь 2016, 05:50:57
В следующей версии Феникса можно будет заглянуть внутрь содержимого и извлечь отдельные файлы =) А может даже и записать!
Это какие файлы? ::scratch:
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Altmer от 07 Декабрь 2016, 08:03:44
Это какие файлы? ::scratch:

Те, что игры в NVRAM пишут.
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: ПАУК от 08 Декабрь 2016, 07:29:58
Каспера поправить можно? А то у него с сохранениями проблема, 2 раза чтоль нельзя сохраняться...
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Altmer от 08 Декабрь 2016, 13:39:48
Каспера поправить можно? А то у него с сохранениями проблема, 2 раза чтоль нельзя сохраняться...

Может у тебя просто места не хватает или игра не поддерживает. В следующей версии сможешь проверить.
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: ПАУК от 10 Декабрь 2016, 17:30:29
Омг... Здесь читал, что баг игры => http://forum.3doplanet.ru/viewtopic.php?p=2872#p2872 Сам не проверял ::scratch:
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Altmer от 10 Декабрь 2016, 17:57:16
Омг... Здесь читал, что баг игры => http://forum.3doplanet.ru/viewtopic.php?p=2872#p2872 Сам не проверял ::scratch:

Дай NVRAM с сейвом - я гляну в чем дело.
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: ПАУК от 10 Декабрь 2016, 18:53:49
Глянул щас на эмуляторе образ "Casper (U)", вроде нормально пересохраняется.
А на приставке нет возможности проверить, резак не пишет.
Фиг знает, чо у него там за проблемы были.
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Versus от 11 Декабрь 2016, 09:31:07
О! Хотелось бы увидеть разбор формата уровней для 3DO DeathKeep.  ::play:
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: ПАУК от 11 Декабрь 2016, 09:40:33
Не, всё-таки в Каспере проблема есть с постоянно растущим сейвом... Ближе к концу игры файл сохранения превышает размер доступной памяти - игра перестаёт сохраняться.
Цитировать
Casper
File manager bug:
The game's file manager may lock up when attempting to scroll down the list of saved games. The system will have to be reset, causing the loss of everything accomplished in the current session.
Save game bug:
The game keeps track of everything that was changed as it is played. As more of the house is explored more things are changed, which results in a larger save game file. After over 80% of the maps are explored, the size of save game file can actually exceed the 16K limit of the 3DO nvRAM. At this point, only one save game can be present. This is a design flaw from the original Saturn version from which the 3DO version was based. When quitting the game, the file will be lost instead of being saved. Since there is no warning when a save is made, everything appears to be normal.
Use the The 3DO Game Guru to compress all save game files that can not be deleted. Before saving, use the "Storage" option to check how much nvRAM is used and available. Exit the "Storage" option (without scrolling) and save the current session. Use the "Storage" option to verify that the nvRAM numbers have changed. If the save was successful, the bytes available should decrease and the bytes used should increase.
http://www.3do.cdinteractive.co.uk/viewtopic.php?t=1233
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Altmer от 11 Декабрь 2016, 11:38:39
Не, всё-таки в Каспере проблема есть с постоянно растущим сейвом... Ближе к концу игры файл сохранения превышает размер доступной памяти - игра перестаёт сохраняться.

Если реализовать HLE для File Folio - тогда это перестанет быть проблемой и объем сохранений будет ограничен жестким диском ПК. Файлы будут просто лежать в директории а не в NVRAM.bin. Вполне можно сделать, может как-нибудь реализую.
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Altmer от 11 Декабрь 2016, 11:41:46
О! Хотелось бы увидеть разбор формата уровней для 3DO DeathKeep.  ::play:

Посмотрю.
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Versus от 11 Декабрь 2016, 12:03:41
Спасибо! Насколько я вижу, формат уровней в чем-то схож с PC-шным. Та же матрица квадратов со значениями. Вот только разобраться с форматом этих значений (что за что отвечает) у меня не получилось.
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Altmer от 11 Декабрь 2016, 12:39:43
Спасибо! Насколько я вижу, формат уровней в чем-то схож с PC-шным. Та же матрица квадратов со значениями. Вот только разобраться с форматом этих значений (что за что отвечает) у меня не получилось.

Можешь примерно прикинуть сколько текстур имеет в протяженности уровень? Я подозреваю уровни имеют сетку размером 128 на 128, но хотелось бы проверить.
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Versus от 11 Декабрь 2016, 13:15:14
Была у меня мысль, что там 128*128, но вот эта карта уровня Astral (PC версия) выбила из колеи:

(http://savepic.org/6305245m.jpg) (http://savepic.org/6305245.htm)
Если нужно, наклепаю таких скринов по всем уровням.
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Altmer от 11 Декабрь 2016, 13:37:40
Была у меня мысль, что там 128*128, но вот эта карта уровня Astral (PC версия) выбила из колеи:
Если нужно, наклепаю таких скринов по всем уровням.

Почему? Я насчитал в длинку 64 сегмента, влазит вполне. Уровни на PC идентичные?
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Versus от 11 Декабрь 2016, 13:57:42
Карты на 3DO нет, поэтому сравнить точно нет возможности. По остаточной памяти уровни такие же. 64? А, блин, че-то я не туда посмотрел. Тогда, вроде, укладывается.
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Altmer от 11 Декабрь 2016, 14:00:21
Карты на 3DO нет, поэтому сравнить точно нет возможности. По остаточной памяти уровни такие же. 64? А, блин, че-то я не туда посмотрел. Тогда, вроде, укладывается.

А ресурсы ПК версии не ковырял? Может они идентичные?
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Versus от 11 Декабрь 2016, 14:08:16
Не идентичные. В 3DO версии вид текстуры, тип поверхности (наклонная, прямая) закодированы по-другому. В PC версии просто текст и параметры как бы разнесены друг от друга. Во вложении файлы PC версии.
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Altmer от 11 Декабрь 2016, 14:29:13
Похоже семантика уровня (точки входа/выхода, плюшки и враги) в 3ДО содержится в исполняемом файле.
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Versus от 11 Декабрь 2016, 14:36:19
Это плохо... Стоп. Ну, в таком случае, в exe нужно хранить эту инфу по всем уровням, а судя по его размеру, вряд ли это так. Размер экзешника, как в Doom.
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Altmer от 11 Декабрь 2016, 14:48:26
Это плохо... Стоп. Ну, в таком случае, в exe нужно хранить эту инфу по всем уровням, а судя по его размеру, вряд ли это так. Размер экзешника, как в Doom.

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

Что значат параметры в ПК версии?

Код: Text
  1. #CUBES 1786
  2.  0 0 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 255
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Versus от 11 Декабрь 2016, 15:05:50
Не знаю. Определил единственный доступный для себя способ: взять нулевой уровень (он бонусный, самый простой прямоугольник), и последовательно менять параметры. Но до этого руки пока не дошли, да и неэффективно это. ::thumbdown:
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Altmer от 11 Декабрь 2016, 15:39:14
Когда сделаю карту - можно будет проверять аномалии в игре и большую часть вычислить, а потом уже можно и менять параметры для проверки оставшихся вещей.
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Altmer от 21 Декабрь 2016, 18:15:51
Не успел допилить функционал для визуализации карт, поэтому скорее всего на следующих выходных.
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Versus от 21 Декабрь 2016, 21:16:02
Это будет отдельное приложение?
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Altmer от 22 Декабрь 2016, 08:54:41
Это будет отдельное приложение?

Нет, но можно будет и отдельное сделать.
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Altmer от 25 Декабрь 2016, 02:34:05
Если нужно, наклепаю таких скринов по всем уровням.

Сделай для нулевого уровня.
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Altmer от 25 Декабрь 2016, 08:55:16
Разобрался с габаритами уровней. Каждый "воксель" уровня кодируется 8-ю байтами, всего 64х32х8 "вокселей" - длина 64, ширина 32 и высота 8.
В аттаче раскадровка по 8-ми этажам уровня 11а (цвета получены просто по сырым данным), который по идее сответствует тому скрину, что ты приводил.
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Versus от 25 Декабрь 2016, 17:04:04
О! Класс. Да, конфигурация очень похожа.  ::thumpup:
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Altmer от 25 Декабрь 2016, 19:50:10
Прежде чем до конца разобраться, надо доработать всякие удобные фичи для ускорения разбора в визуальном режиме. Но это теперь только на следующих выходных.
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Versus от 28 Декабрь 2016, 13:37:58
Че-то я совсем протупил. Прочитал еще раз тему и только увидел, что ты просил скрин нулевого уровня. Вот он, если еще актуально.
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Altmer от 28 Декабрь 2016, 14:29:38
Вроде совпадает. А второй этаж можешь добавить?
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Versus от 28 Декабрь 2016, 17:15:55
На этом уровне нет второго этажа. Просто прямоугольная здоровая комната и 1 телепорт выхода.
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Altmer от 28 Декабрь 2016, 19:24:46
странно, потому что в данных вроде как есть еще этаж, хотя может он идет как потолок?
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Versus от 28 Декабрь 2016, 21:51:44
Потолок присутствует, да. Может, там один этаж в данных ограничивающий полом, другой потолком. Т.е. в данных как бы заданы ограничивающие габариты, а то, что внутри, движок не интересует?
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Altmer от 29 Декабрь 2016, 06:42:51
Возможно, вот скрин. Там 2 этажа с данными, остальные 6 без флуктуаций.
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Versus от 29 Декабрь 2016, 07:11:11
Похоже. Светлые полосы - куча разных предметов. Из разных уровней игры. Единственное, мне не совсем понятна горизонтальная полоса по короткой стороне прямоугольника на первом скрине и вертикальная полоса по длинной стороне на втором.
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Altmer от 29 Декабрь 2016, 07:20:58
Эти полосы скорее всего дают разряды отвечающие за стены, если присмотреться полосы есть с каждой стороны, просто менее выраженные.
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Altmer от 29 Декабрь 2016, 07:22:17
Кстати потолок в этом уровне высокий? Если да, тогда понятно почему 2 этажа в данных.
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Versus от 29 Декабрь 2016, 07:32:33
А, ну, наверное, из-за низкого разрешения такой эффект. Хотя, цвета разные, если смотреть границы со всех сторон.
Вот скрины уровня:
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Versus от 29 Декабрь 2016, 07:33:31
-
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Versus от 29 Декабрь 2016, 07:35:07
-
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Versus от 29 Декабрь 2016, 07:39:25
-
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Altmer от 29 Декабрь 2016, 08:30:26
А, ну, наверное, из-за низкого разрешения такой эффект. Хотя, цвета разные, если смотреть границы со всех сторон.
Вот скрины уровня:

Так это не цвета - это просто данные карты абы как засунутые в цвет.
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Versus от 29 Декабрь 2016, 11:54:25
Я это понял. Просто визуально цвета верхней и левой границ похожи, поэтому мне показалось, что должно также быть и снизу/справа. А так, цвета для каждой из ограничивающих поверхностей должны быть индивидуальны.
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Versus от 28 Январь 2017, 18:30:49
Есть какой-нибудь прогресс по сабжу? ;)
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Altmer от 28 Январь 2017, 19:48:38
Есть какой-нибудь прогресс по сабжу? ;)

Я пока-что другим делом занят, но с картой все достаточно тривиально, позже к этому вернусь.
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Versus от 09 Июль 2017, 20:13:12
Доброго времени суток! Хотел напомнить о теме, есть ли подвижки? :)
Название: Re: Реверсинженеринг структуры файлов не использующих шифрование
Отправлено: Altmer от 10 Июль 2017, 06:41:28
Да, инструмент совершенствуется =)