imported>Dinoguy1000 |
imported>Dinoguy1000 |
| Line 16: |
Line 16: |
|
| |
|
| === Notes and Comments === | | === Notes and Comments === |
| '''Notes by Gregory''':
| | {{{notes}}} |
| | |
| 1.
| |
| In the version 24, the file names are encrypted as XOR 0xBE.
| |
| | |
| 2.
| |
| "BXP" + (byte) in all headers: In the version 24, the (byte)=3.
| |
| | |
| 3.
| |
| // ARCHIVE INDEX
| |
| char {8} - Header ("BXP" + (byte)2 + "INDX")
| |
| uint64 {8} - Unknown '''<----- this shuld be relative offset to the first "BXP.FILE"'''
| |
| I have used folloxing piece of C++ code:
| |
| ArchiveOffset = 0x00;
| |
| IndexOffset = 0x20;
| |
| TreeOffset = 0x60;
| |
| DirOffset = 0x80;
| |
| DataOffset = DirOffset + (__int64*) &buffer[TreeOffset + 8];
| |
| FileOffset = DirOffset + (__int64*) &buffer[IndexOffset + 8];
| |
| | |
| 4.
| |
| There are some directories containing both files and sub-directories. In such case, the files are listed prior to the sub-directories.
| |
| I guess that the structure of directory is:
| |
| {
| |
| char {8} - Header ("BXP" + (byte)2 + "SDIR")
| |
| uint64 {8} - Unknown Length/Offset
| |
| byte {16} - null
| |
| uint32 {4} - Number Of Sub-Directories in this directory
| |
| uint32 {4} - Number Of Files in this directory
| |
| uint64 {8} - Length Of Filename Directory Component (length of subDirName+null + fileNames+nulls)
| |
| byte {16} - null
| |
| for (each file)
| |
| {
| |
| uint64 {8} - Filename Offset (relative to the start of the filename directory)
| |
| uint64 {8} - null
| |
| byte {16} - CRC?
| |
| uint32 {4} - null
| |
| uint32 {4} - Unknown (1) // or (0) - a switch?
| |
| uint64 {8} - null
| |
| uint64 {8} - File Length (not including the file header fields?)
| |
| uint64 {8} - File Offset (relative to the start of the file data)
| |
| }
| |
| for (each sub-directory)
| |
| {
| |
| uint32 {4} - null // Filename Offset (relative to the start of the filename directory)
| |
| uint32 {4} - Relative Offset To This Directory? (32) (relative to the start of this subDirEntry)
| |
| }
| |
| for (each entry) // entry is file or sub-directory
| |
| {
| |
| uint32 {4} - Hash?
| |
| }
| |
| for (each entry)
| |
| {
| |
| char {X} - Filename // XOR 0xBE in version 24
| |
| byte {1} - null Filename Terminator // 0xBE in version 24
| |
| }
| |
| }
| |
| | |
| 5. I have successfuly extracted all files from the archive. Sound (*.ogg) files play well, however some other files (scripts) seems to be encrypted. Further I am wholly confused with CRCs, HASHs and Paddings for now, so I can not build an modified archive. However, I hope that my notes help you.
| |
| | |
| You may contact me at p4k@post.cz
| |
|
| |
|
| === MultiEx BMS Script === | | === MultiEx BMS Script === |