grudnok Posted May 6 Share Posted May 6 (edited) solved it myself. Edited May 9 by grudnok Link to comment Share on other sites More sharing options...
Solution ikskoks Posted May 7 Solution Share Posted May 7 First of all, FrostyToolsuite is the software which can handle FBMOD files. It's open source and it's code can be found here https://github.com/CadeEvs/FrostyToolsuite I've spent some time analyzing the code, but anyone can do it, especially you - since you're seem to be desperate you should at least try to do this. You can go even further and download the code and try to debug the program and see how it works during runtime. File format is not so complicated, but it may be hard to parse without full knowledge of the FrostyToolsuite code. It looks like this: // FBMOD file format // Based on format version 3 // header 8 bytes (uint64) - signature // "FROSTY\x00\x01" / 46 52 4F 53 54 59 00 01 4 bytes (uint32) - version // 3, 4 - ?? // 5 - Frosty Toolsuite v1.0.7 8 bytes (uint64) - info offset 4 bytes (uint32) - number of files 1 byte (uint8) - profile name length x bytes (char) - profile name // e.g. "FIFA19" 4 bytes (uint32) - unknown // mod info x bytes (char) - mod title x bytes (char) - mod author x bytes (char) - mod category x bytes (char) - mod version x bytes (char) - mod description // resources 4 bytes (uint32) - number of resources number_of_resources * { 1 byte (uint8) - resource type // 0 - Embedded e.g. Icon // 1 - EBX // 2 - Resources // 3 - Chunk // 4 - Bundle x bytes - resource data e.g. // Base Resource // same as EBX, Embedded (e.g.Icon) 4 bytes (uint32) - resource index x bytes (char) - resource name // e.g. "Icon" 20 bytes - SHA1 8 bytes (uint64) - file uncompressed size 1 byte (uint8) - flags 4 bytes (uint32) - handler hash x bytes (char) - user data + null // FrostyPlugin/Mod/BaseModResource.cs lines 76-86 for more details if version <= 3: { 4 bytes (uint32) - count1 count1 * { 4 bytes (uint32) - some value { 4 bytes (uint32) - count2 count2 * { 4 bytes (uint32) - some value { } if version > 3: { 4 bytes (uint32) - count3 count3 * { 4 bytes (uint32) - some value { } } // info table (resource data table) number_of_files * { 8 bytes (uint64) - file relative offset 8 bytes (uint64) - file compressed size } // data number_of_files * { number_of_chunks * { // FrostySDK/Utils.cs lines 935-940 for more details 4 bytes (uint32) - buffer size (big endian) 2 bytes (uint16) - compression code (big endian) 2 bytes (uint16) - compressed chunk size (big endian) x bytes - compressed chunk data } } I tried to create a script with automatic decompression of the data, but it turned out to be too complicated task, so I've just created a simple script for extraction instead https://github.com/bartlomiejduda/Tools/blob/master/NEW Tools/FrostyToolsuite/Frosty_Toolsuite_FBMOD_script.bms I hope that all this info will help you in your reverse engineering research. 🙂 Link to comment Share on other sites More sharing options...
grudnok Posted May 8 Author Share Posted May 8 Thanks for trying, hopefully someone will be able to modify the fifa script as that's what i used last time. Link to comment Share on other sites More sharing options...
grudnok Posted May 9 Author Share Posted May 9 finally done the stuff in the editor myself after a week of fiddling, no need to unpack a mod anymore. Link to comment Share on other sites More sharing options...
Kayhotic Posted June 22 Share Posted June 22 On 5/7/2024 at 5:01 PM, ikskoks said: First of all, FrostyToolsuite is the software which can handle FBMOD files. It's open source and it's code can be found here https://github.com/CadeEvs/FrostyToolsuite I've spent some time analyzing the code, but anyone can do it, especially you - since you're seem to be desperate you should at least try to do this. You can go even further and download the code and try to debug the program and see how it works during runtime. File format is not so complicated, but it may be hard to parse without full knowledge of the FrostyToolsuite code. It looks like this: // FBMOD file format // Based on format version 3 // header 8 bytes (uint64) - signature // "FROSTY\x00\x01" / 46 52 4F 53 54 59 00 01 4 bytes (uint32) - version // 3, 4 - ?? // 5 - Frosty Toolsuite v1.0.7 8 bytes (uint64) - info offset 4 bytes (uint32) - number of files 1 byte (uint8) - profile name length x bytes (char) - profile name // e.g. "FIFA19" 4 bytes (uint32) - unknown // mod info x bytes (char) - mod title x bytes (char) - mod author x bytes (char) - mod category x bytes (char) - mod version x bytes (char) - mod description // resources 4 bytes (uint32) - number of resources number_of_resources * { 1 byte (uint8) - resource type // 0 - Embedded e.g. Icon // 1 - EBX // 2 - Resources // 3 - Chunk // 4 - Bundle x bytes - resource data e.g. // Base Resource // same as EBX, Embedded (e.g.Icon) 4 bytes (uint32) - resource index x bytes (char) - resource name // e.g. "Icon" 20 bytes - SHA1 8 bytes (uint64) - file uncompressed size 1 byte (uint8) - flags 4 bytes (uint32) - handler hash x bytes (char) - user data + null // FrostyPlugin/Mod/BaseModResource.cs lines 76-86 for more details if version <= 3: { 4 bytes (uint32) - count1 count1 * { 4 bytes (uint32) - some value { 4 bytes (uint32) - count2 count2 * { 4 bytes (uint32) - some value { } if version > 3: { 4 bytes (uint32) - count3 count3 * { 4 bytes (uint32) - some value { } } // info table (resource data table) number_of_files * { 8 bytes (uint64) - file relative offset 8 bytes (uint64) - file compressed size } // data number_of_files * { number_of_chunks * { // FrostySDK/Utils.cs lines 935-940 for more details 4 bytes (uint32) - buffer size (big endian) 2 bytes (uint16) - compression code (big endian) 2 bytes (uint16) - compressed chunk size (big endian) x bytes - compressed chunk data } } I tried to create a script with automatic decompression of the data, but it turned out to be too complicated task, so I've just created a simple script for extraction instead https://github.com/bartlomiejduda/Tools/blob/master/NEW Tools/FrostyToolsuite/Frosty_Toolsuite_FBMOD_script.bms I hope that all this info will help you in your reverse engineering research. 🙂 using the script with quickBMS, spits out all .dat files. where would i go from there? Link to comment Share on other sites More sharing options...
ikskoks Posted June 22 Share Posted June 22 This script is for extracting only. Data is still compressed after extraction, so you would need to decompress it manually (or write another script to do it automatically). You can see FrostySDK/Utils.cs on repository https://github.com/CadeEvs/FrostyToolsuite for more details. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now