| Разработка и ромхакинг > Ромхакинг и программирование |
| Нужна помощь в распаковке файла с ресурсами |
| (1/1) |
| Teffycom:
Имеется следующий файл - https://mega.nz/#!cpNgDLAB!Wsy9J8FZRSymkl6c0flFN3y_NKM2WtpENewY_FvJGrQ В нем содержатся музыкальные файлы визуальной новеллы Iwaihime Matsuri на PS Vita. В чем смысл шариться в нем? А в том, что данный файл содержит полную версию песни из опенинга, которая до сих пор не была выпущена официально (а при худшем раскладе и не будет). Таким образом, возникла необходимость в его распаковке. Сигнатура файла - https://mega.nz/#!k1NhCLgB!t1kqySwqVdKh_WaEkuGCU0b_fT2NTnOToOgqYZIDX9M Судя по сигнатуре, это очень похоже на какой-то стандартный архив для витовских игровых ресурсов. Возможно кто-нибудь знает готовое решение для распаковки? |
| Yoti:
А в чём проблема написать самому, например бмс скрипт? Первая строка каждой файловой записи после заголовка — имя, затем две пустых строки буфер под имя, затем четыре байта размер файла в реверсе, затем разделитель четыре ноля, затем смещение на файл в реверсе и ещё разделитель. Архив не качал, описал по скриншоту. |
| Teffycom:
Спасибо за ответ. Думал, что возможно есть готовое решение и можно не тратить время. Но, судя по всему, да, легче самому написать скрипт. |
| Zetper:
Вот я написал распаковщик архива 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:
Посмотрел ради интереса архив. Первые восемь байт это сигнатура, дальше четыре байта количество файлов в реверсе и дальше четыре байта разделитель из нолей. По поводу шестнадцати байт в начале звука не разбирался, но если их оставить at9tool не конвертирует. |
| CaH4e3:
я в детстве как-то написал себе распаковщик однотипных видов ресурсных файлов, в которых просто заголовок и описатели структур данных. как показала практика, таким методом "упаковано" огромное количество ресурсов для разных платформ. надо только определить формат конкретного файла и прописать его параметры и программа покажет все файлы в ресурсе и сможет их вынуть поотдельности. и это у меня проблемы или файлы на мегауплоаде уже сдохли лол? |
| Yoti:
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 --- Конец кода --- |
| Навигация |
| Главная страница сообщений |