Автор Тема: Нужна помощь в распаковке файла с ресурсами  (Прочитано 3506 раз)

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

Оффлайн Teffycom

  • Пользователь
  • Сообщений: 1701
  • Пол: Мужской
  • Ex-Cool-Spot
    • Просмотр профиля
Имеется следующий файл - https://mega.nz/#!cpNgDLAB!Wsy9J8FZRSymkl6c0flFN3y_NKM2WtpENewY_FvJGrQ
В нем содержатся музыкальные файлы визуальной новеллы Iwaihime Matsuri на PS Vita. В чем смысл шариться в нем? А в том, что данный файл содержит полную версию песни из опенинга, которая до сих пор не была выпущена официально (а при худшем раскладе и не будет). Таким образом, возникла необходимость в его распаковке.
Сигнатура файла - https://mega.nz/#!k1NhCLgB!t1kqySwqVdKh_WaEkuGCU0b_fT2NTnOToOgqYZIDX9M

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

Оффлайн Yoti

  • Пользователь
  • Сообщений: 4428
  • Пол: Мужской
  • Не тро-гай ме-ня
    • Steam
    • Просмотр профиля
А в чём проблема написать самому, например бмс скрипт? Первая строка каждой файловой записи после заголовка — имя, затем две пустых строки буфер под имя, затем четыре байта размер файла в реверсе, затем разделитель четыре ноля, затем смещение на файл в реверсе и ещё разделитель. Архив не качал, описал по скриншоту.
« Последнее редактирование: 02 Май 2018, 19:45:39 от Yoti »

Оффлайн Teffycom

  • Пользователь
  • Сообщений: 1701
  • Пол: Мужской
  • Ex-Cool-Spot
    • Просмотр профиля
Спасибо за ответ. Думал, что возможно есть готовое решение и можно не тратить время. Но, судя по всему, да, легче самому написать скрипт.

Оффлайн Zetper

  • Пользователь
  • Сообщений: 85
  • Пол: Мужской
  • Потерянный в пустоте
    • ВКонтакте
    • Просмотр профиля
Вот я написал распаковщик архива sound_bgm.dat https://yadi.sk/i/yxlZM7UR3VCNBV для его работы надо установить https://www.python.org/ftp/python/3.4.4/python-3.4.4.msi

Кидаешь скрипт в папку с файлом sound_bgm.dat и кликаеь по нему, появится папка Unpack и вней будут файлы. 
В начале каждого файла звука есть непонятные 16 байт возможно тебе придётся их удалить в шестнадцатеричном редакторе чтоб проиграть звук. Желательно чтоб в папке лежал только архив sound_bgm.dat, если там будут другие архивы .dat он их тоже попытается распаковать.

Оффлайн Yoti

  • Пользователь
  • Сообщений: 4428
  • Пол: Мужской
  • Не тро-гай ме-ня
    • Steam
    • Просмотр профиля
Посмотрел ради интереса архив. Первые восемь байт это сигнатура, дальше четыре байта количество файлов в реверсе и дальше четыре байта разделитель из нолей. По поводу шестнадцати байт в начале звука не разбирался, но если их оставить at9tool не конвертирует.
« Последнее редактирование: 04 Май 2018, 23:54:41 от Yoti »

Оффлайн CaH4e3

  • Пользователь
  • Сообщений: 3588
    • Twitter
    • Просмотр профиля
я в детстве как-то написал себе распаковщик однотипных видов ресурсных файлов, в которых просто заголовок и описатели структур данных. как показала практика, таким методом "упаковано" огромное количество ресурсов для разных платформ. надо только определить формат конкретного файла и прописать его параметры и программа покажет все файлы в ресурсе и сможет их вынуть поотдельности.

и это у меня проблемы или файлы на мегауплоаде уже сдохли лол?

Оффлайн Yoti

  • Пользователь
  • Сообщений: 4428
  • Пол: Мужской
  • Не тро-гай ме-ня
    • Steam
    • Просмотр профиля
CaH4e3,
да, файлы удалены. Я ради этого скачал, распаковал и дешифровал игру.
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
// заголовок 16 байт
00000000  50 53 5F 46 53 5F 56 31 48 00 00 00 00 00 00 00  PS_FS_V1H.......
// PS_FS_V1 - 8 байт сигнатура
// 48000000 > 00000048 > 72 файла

// файловая запись 64 байта (первая)
00000010  62 67 6D 30 30 30 30 31 2E 61 74 39 00 00 00 00  bgm00001.at9....
00000020  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000030  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000040  78 F3 42 00 00 00 00 00 00 16 00 00 00 00 00 00  xуB.............
// 0x10..0x3F имя файла
// 78F34200 > 0042F378 > 4387704 байт размер
// 00160000 > 00001600 > 5632-ой байт начало

// файловая запись 64 байта (вторая)
00000050  62 67 6D 30 30 30 30 32 2E 61 74 39 00 00 00 00  bgm00002.at9....
00000060  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000070  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000080  F8 FF 15 00 00 00 00 00 00 0A 43 00 00 00 00 00  шя........C.....

...

// файловая запись 64 байта (последняя)
000011D0  62 67 6D 30 30 30 37 32 2E 61 74 39 00 00 00 00  bgm00072.at9....
000011E0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000011F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00001200  F4 EA 44 00 00 00 00 00 00 76 5C 08 00 00 00 00  фкD......v\.....

Edit#1: Допускаю, что там нет разделителей, а просто числа по 16 байт вместо восьми.
Edit#2: Стоило ради интереса всё же вбить сигнатуру в Гугл, а там уже всё готово давно.
Edit#3:
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000  02 00 00 00 68 F3 42 00 80 BB 01 01 CE 38 D6 00  ....hуB.Ђ»..О8Ц.
// 0x00-0x03 что-то вроде id кодека, 1 для VAG и 2 для AT9
// 0x04-0x07 на 8 больше @RIFF+0x14 (riff wave chunk size) // хз для VAG
// 0x08-0x0b запись вида 80bb0101 (80bb=48khz, 01=может быть 00, 01=всегда 01)
// 0x0c-0x0f равно @RIFF+0x60 (fact chunk samples count) // хз для VAG
Итого, файл почти разобран, осталось разрулить байт по 0x0a (возможно там флаг наличия повтора).
Ну и скрипт для извлечения без этого дополнительного заголовка, чтобы было проще конверить в wav.
idstring "PS_FS_V1"
get FILES longlong
for i = 0 < FILES
    getdstring NAME 0x30
    get SIZE longlong
    math SIZE -= 16
    get OFFSET longlong
    math OFFSET += 16
    log NAME OFFSET SIZE
next i
« Последнее редактирование: 05 Май 2018, 02:36:13 от Yoti »