Автор Тема: Реверсинженеринг структуры файлов не использующих шифрование  (Прочитано 28181 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Altmer

  • Администратор
  • Ветеран
  • *******
  • Сообщений: 4221
Принимаю заказы на реинженеринг форматов данных не использующих шифрование.

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

Собственно мне это надо, скажем так, для апробирования некоторых программных модулей, и если кому-то нужно отреверсить конкретный формат данных, например для игр 3ДО или что-то еще, то я с удовольствием совмещу приятное с полезным.
« Последнее редактирование: 07 Декабрь 2016, 15:05:45 от Altmer »
- Разве ты не устал от борьбы, от каменистых дорог?
- Нет.
- Как странно, ведь многие так ценят покой...
                                             E. Гуляковский, "Сезон туманов"

Оффлайн Altmer

  • Администратор
  • Ветеран
  • *******
  • Сообщений: 4221
Для себя первым делом отреверсил структуру файловой системы 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.  
« Последнее редактирование: 06 Декабрь 2016, 13:53:29 от Altmer »
- Разве ты не устал от борьбы, от каменистых дорог?
- Нет.
- Как странно, ведь многие так ценят покой...
                                             E. Гуляковский, "Сезон туманов"

Оффлайн ПАУК

  • Постоялец
  • ***
  • Сообщений: 151
В следующей версии Феникса можно будет заглянуть внутрь содержимого и извлечь отдельные файлы =) А может даже и записать!
Это какие файлы? ::scratch:

Оффлайн Altmer

  • Администратор
  • Ветеран
  • *******
  • Сообщений: 4221
Это какие файлы? ::scratch:

Те, что игры в NVRAM пишут.
- Разве ты не устал от борьбы, от каменистых дорог?
- Нет.
- Как странно, ведь многие так ценят покой...
                                             E. Гуляковский, "Сезон туманов"

Оффлайн ПАУК

  • Постоялец
  • ***
  • Сообщений: 151
Каспера поправить можно? А то у него с сохранениями проблема, 2 раза чтоль нельзя сохраняться...

Оффлайн Altmer

  • Администратор
  • Ветеран
  • *******
  • Сообщений: 4221
Каспера поправить можно? А то у него с сохранениями проблема, 2 раза чтоль нельзя сохраняться...

Может у тебя просто места не хватает или игра не поддерживает. В следующей версии сможешь проверить.
- Разве ты не устал от борьбы, от каменистых дорог?
- Нет.
- Как странно, ведь многие так ценят покой...
                                             E. Гуляковский, "Сезон туманов"

Оффлайн ПАУК

  • Постоялец
  • ***
  • Сообщений: 151
Омг... Здесь читал, что баг игры => http://forum.3doplanet.ru/viewtopic.php?p=2872#p2872 Сам не проверял ::scratch:

Оффлайн Altmer

  • Администратор
  • Ветеран
  • *******
  • Сообщений: 4221
Омг... Здесь читал, что баг игры => http://forum.3doplanet.ru/viewtopic.php?p=2872#p2872 Сам не проверял ::scratch:

Дай NVRAM с сейвом - я гляну в чем дело.
- Разве ты не устал от борьбы, от каменистых дорог?
- Нет.
- Как странно, ведь многие так ценят покой...
                                             E. Гуляковский, "Сезон туманов"

Оффлайн ПАУК

  • Постоялец
  • ***
  • Сообщений: 151
Глянул щас на эмуляторе образ "Casper (U)", вроде нормально пересохраняется.
А на приставке нет возможности проверить, резак не пишет.
Фиг знает, чо у него там за проблемы были.

Оффлайн Versus

  • REALьный 3DOшник
  • Постоялец
  • *
  • Сообщений: 193
  • URSS creator
О! Хотелось бы увидеть разбор формата уровней для 3DO DeathKeep.  ::play:
IBI VICTORIA UBI CONCORDIA

Оффлайн ПАУК

  • Постоялец
  • ***
  • Сообщений: 151
Не, всё-таки в Каспере проблема есть с постоянно растущим сейвом... Ближе к концу игры файл сохранения превышает размер доступной памяти - игра перестаёт сохраняться.
Цитировать
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

Оффлайн Altmer

  • Администратор
  • Ветеран
  • *******
  • Сообщений: 4221
Не, всё-таки в Каспере проблема есть с постоянно растущим сейвом... Ближе к концу игры файл сохранения превышает размер доступной памяти - игра перестаёт сохраняться.

Если реализовать HLE для File Folio - тогда это перестанет быть проблемой и объем сохранений будет ограничен жестким диском ПК. Файлы будут просто лежать в директории а не в NVRAM.bin. Вполне можно сделать, может как-нибудь реализую.
- Разве ты не устал от борьбы, от каменистых дорог?
- Нет.
- Как странно, ведь многие так ценят покой...
                                             E. Гуляковский, "Сезон туманов"

Оффлайн Altmer

  • Администратор
  • Ветеран
  • *******
  • Сообщений: 4221
О! Хотелось бы увидеть разбор формата уровней для 3DO DeathKeep.  ::play:

Посмотрю.
- Разве ты не устал от борьбы, от каменистых дорог?
- Нет.
- Как странно, ведь многие так ценят покой...
                                             E. Гуляковский, "Сезон туманов"

Оффлайн Versus

  • REALьный 3DOшник
  • Постоялец
  • *
  • Сообщений: 193
  • URSS creator
Спасибо! Насколько я вижу, формат уровней в чем-то схож с PC-шным. Та же матрица квадратов со значениями. Вот только разобраться с форматом этих значений (что за что отвечает) у меня не получилось.
IBI VICTORIA UBI CONCORDIA

Оффлайн Altmer

  • Администратор
  • Ветеран
  • *******
  • Сообщений: 4221
Спасибо! Насколько я вижу, формат уровней в чем-то схож с PC-шным. Та же матрица квадратов со значениями. Вот только разобраться с форматом этих значений (что за что отвечает) у меня не получилось.

Можешь примерно прикинуть сколько текстур имеет в протяженности уровень? Я подозреваю уровни имеют сетку размером 128 на 128, но хотелось бы проверить.
- Разве ты не устал от борьбы, от каменистых дорог?
- Нет.
- Как странно, ведь многие так ценят покой...
                                             E. Гуляковский, "Сезон туманов"