December 27, 20232 yr Localization Hello, i'm here to ask if anyone can help me solve this .spd audio archive format? It's a format used by Honey ∞ Parade Games in games such as Senran Kagura: New Link and Dolphin Wave to store audio files (in the case of DW, it stores a bunch of .ogg files from what i have seen so far from digging the PC version's files). At first i check if my foobar2000 with the vgmstream component can extract the content but failed. I then tried to see if this format have been solved before but all i could find was another format with similar name for some GameCube games. Since i'm a complete noob at reverse engineering, i can only explain things in the header section: From what i have seen so far, every files starts with a bunch of headers like "HEAD", "SNHD", "SNIF" and "SNDT" with some bytes between each header. The amount of "SNHD" is different in each file, which led me to believe that the amount of "SNHD" headers is the amount of files contain inside the archive, and the bytes after each "SNHD" header is some soft of id labelling. If anyone can furthering research this format and share it here, thank you so much for that in advance. The sample included here is from Dolphin Wave (the PC version if anyone's asking) and stores a bunch of sound effects used in the game. Thank you so much in advance. samples.zip Edited December 27, 20232 yr by PlsSendHelp
December 27, 20232 yr Solution From a quick look at the file: The "HEAD" section contains the number of files (8) Each "SNHD" section contains the offset to each file - first one is 0x90, then 0x20590, etc. Each file begins with a "SNIF" header, which contains channels and sample rate info, and then the "SNDT" section is the audio data. The audio here is 16-bit PCM Attached is a QuickBMS script to extract them as playable .wav files - I've made some assumptions about the format so I'm not sure if it's 100% correct, but give it a try and see if it sounds correct. spd.zip Edited December 27, 20232 yr by DKDave Added QuickBMS script
December 27, 20232 yr Supporter File format: // Dolphin Wave (PC) // SPD file format // header 4 bytes (char) - signature // "HEAD" 4 bytes (uint32) - chunk header size // 8 4 bytes (uint32) - unknown // 1 4 bytes (uint32) - number of files // index number_of_files * { 4 bytes (char) - chunk signature // "SNHD" 4 bytes (uint32) - chunk header size // 8 8 bytes (uint64) - SNIF chunk offset } // data number_of_files * { 4 bytes (char) - chunk signature // "SNIF" 4 bytes (uint32) - chunk header size // 16 2 bytes (uint16) - number of channels // e.g. 2 2 bytes (uint16) - bits? // e.g. 16 4 bytes (uint32) - rate // e.g. 22050 8 bytes (uint64) - unknown 4 bytes (char) - chunk signature // "SNDT" 4 bytes (uint32) - chunk size x bytes - audio data }
December 27, 20232 yr 10 minutes ago, ikskoks said: File format: // Dolphin Wave (PC) // SPD file format // header 4 bytes (char) - signature // "HEAD" 4 bytes (uint32) - chunk header size // 8 4 bytes (uint32) - unknown // 1 4 bytes (uint32) - number of files // index number_of_files * { 4 bytes (char) - chunk signature // "SNHD" 4 bytes (uint32) - chunk header size // 8 8 bytes (uint64) - SNIF chunk offset } // data number_of_files * { 4 bytes (char) - chunk signature // "SNIF" 4 bytes (uint32) - chunk header size // 16 2 bytes (uint16) - number of channels // e.g. 2 2 bytes (uint16) - bits? // e.g. 16 4 bytes (uint32) - rate // e.g. 22050 8 bytes (uint64) - unknown 4 bytes (char) - chunk signature // "SNDT" 4 bytes (uint32) - chunk size x bytes - audio data } For the unknown 1 value in the HEAD chunk, I could refer to the audio codec being PCM16, but would need files with different audio codecs to compare - the android version of "se_sys" is identical to the PC sample posted here. The unknown in the SNIF chunk is the data size, although it's sometimes just slightly different to the actual data size in the SNDT chunk.
October 16, 20241 yr Hello, do you know how to decrypt the asset files of Dolphin Wave, they end with .lza and are encrypted, here are some sample files, thank you very much.assets.zip
October 27, 20241 yr the asset folder has some duplicates, one lza file and one lzs file for the same asset in some cases it seems, I wonder if it can be used to figure out the encryption as not all the files are available in lzs format which can be extracted with the lzss0 script from chrrox, here are some samples if anyone wants to take a look at the model and texture files: un01002_under.7z Edited October 27, 20241 yr by GDL
April 23, 20251 yr Looks like someone figured out the encryption for the lza files, it turns out is just AES-CBC with a specific key, LukeFZ shared some code to decrypt the files via Discord. source.zip
June 3, 20251 yr what about this .pak file that contains the filelist for downloading the game files through the cdn like this? it's neither an .lza nor an .lzs file but with a weird compression and encryption. and the game cdn download format has some sort of md5 hash at the end of the link form. for example: https://x-cdn-dolphin.marv-games.jp/prd001/resources/Assets/Cmn/Master/ActiveSkill.pak.b2ac96225f52c76e9f2182791ac01d3cc656d6a1 25053000-116-0.ziphttps://x-cdn-dolphin.marv-games.jp/prd001/fileList/Pc/25053000-116-0.pak Neither the tool above nor the DolphinWaveSAEx tool will open them. Edited June 3, 20251 yr by FrayaBoop
May 30May 30 The game file url is PC or Phone /filename.ext+sha1 hash. The texture in phone is astc format. but in pc that's bc7 format. Hope have solution to open the filelist pak to download the game files without real play.
Create an account or sign in to comment