Template:GRAFTemplate1: Difference between revisions
imported>Paul Siramy (woops, reverted back the page. I tought I was editing my page, not the template, sorry.) |
|||
| Line 16: | Line 16: | ||
=== Notes and Comments === | === Notes and Comments === | ||
'''Notes by Gregory''': | |||
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 === | ||
Revision as of 07:27, 23 June 2006
{{{file_extension}}}
Format Type: {{{format_type}}}
Endian Order: {{{endian_order}}}
Date Posted: {{{date_posted}}}
Format Specifications
{{{format_specifications}}}
Notes and Comments
Notes by Gregory:
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
{{{bms_script}}}
Supported by Programs
{{{programs}}}
Documentation
{{{documentation}}}
Games
{{{games}}}