Profile/Burnout Revenge: Difference between revisions

Updated with Xbox info.
mNo edit summary
(Updated with Xbox info.)
 
Line 7:
All profiles use EA's proprietary MC02 header to protect the data. Following any edits, the profile must be rehashed using a program such as [https://www.thetechgame.com/Downloads/id=175971/mc02-package-tool.html MC02 Package Tool].
 
The following information is from symbols in [[Burnout Revenge (Alpha 7 build)]]., Signature_tDead isSpace a2 typedef(2010-11-19 ofbuild), uint32_tand The Godfather (2006-04-10 build).
 
==== PlayStation 2, Xbox 360 ====
TheSignature_t is a typedef of uint32_t. It is used to hold CRC32 checksums. The algorithm used is nonstandard. See [https://gist.github.com/Experiment5X/5025310 this gist] for an example implementation.
 
{| class="wikitable"
Line 22 ⟶ 25:
| 0xC || 0x4 || uint32_t || mUserBodySize || Save data length in bytes ||
|-
| 0x10 || 0x4 || Signature_t || mUserHeaderSignature || Save header CRC32signature ||
|-
| 0x14 || 0x4 || Signature_t || mUserBodySignature || Save data CRC32signature ||
|-
| 0x18 || 0x4 || Signature_t || mFileHeaderSignature || MC02 header CRC32signature || Hashes everything prior to this field
|}
 
==== Xbox ====
The CRC32 algorithm used is nonstandard. See [https://gist.github.com/Experiment5X/5025310 this gist] for an example implementation.
Identical to normal MC02 but with HMAC-SHA1 signatures (denoted by the XCALC_SIGNATURE type) instead of CRC32.
 
=== Checksum ===
A proprietary checksum is appended to each profile for validation purposes. This is calculated by summing every 4 bytes (read as unsigned 32-bit integers) in the [[#CB4SaveGameData|CB4SaveGameData]] structure, excluding the checksum itself and any padding after it.
 
= Structures =
=== Data ===
This defines the de facto structure of the save file. The game does not treat it as a structure, instead reading the names and saves into the memory card manager, which is what the information below is based on.
 
==== PlayStation 2 ====
{| class="wikitable"
|+ RealmcCore::FileHeader
|-
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x4 || uint32_t || mFileHeaderVersion || Magic || Must be 'MC02'<br />MC = Memory Card<br />02 = version 2
| 0x0 || 0xC0 || GtUTF8[3][64] || maaSaveNames || Save names ||
|-
| 0x4 || 0x4 || uint32_t || mFileSize || Length of the save in bytes || Includes the MC02 header
| 0xC0 || 0x4FE0 || [[#CB4SaveGameData|CB4SaveGameData]][3] || maSaveGameData || Saves ||
|}
 
==== Xbox ====
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x00x8 || 0x300x4 || ?uint32_t || ?mUserHeaderSize || 384-bitSave key?header length in bytes || Multiplayer-related?
|-
| 0x300xC || 0xC00x4 || GtUTF8[3][64]uint32_t || maaSaveNamesmUserBodySize || Save namesdata length in bytes ||
|-
| 0x10 || 0x14 || XCALC_SIGNATURE || mUserHeaderSignature || Save header signature ||
| 0xF0 || 0x5010 || [[#CB4SaveGameData|CB4SaveGameData]][3] || maSaveGameData || Saves ||
|}-
| 0x24 || 0x14 || XCALC_SIGNATURE || mUserBodySignature || Save data signature ||
|-
| 0x38 || 0x14 || XCALC_SIGNATURE || mFileHeaderSignature || MC02 header signature || Hashes everything prior to this field
|}
 
==== XboxChecksum 360 ====
A proprietary checksum is appended to each profile for validation purposes. This is calculated by summing every 4 bytes (read as unsigned 32-bit integers) in the [[#CB4SaveGameData|CB4SaveGameData]] structure, excluding the checksum itself and any padding after it.
 
Xbox has an additional checksum after the aforementioned checksum. It uses the same algorithm as the MC02 signatures.
 
= Structures =
=== ChecksumData ===
ThisThe following table defines the de facto structure of the save file. The game does not treat it as a structure, instead separately reading the names and saves into the memory card manager, which is what the information below is based on.
 
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
Line 64 ⟶ 69:
| 0x0 || 0xC0 || GtUTF8[3][64] || maaSaveNames || Save names ||
|-
| 0xC0 || 0x5268Platform dependent || [[#CB4SaveGameData|CB4SaveGameData]][3] || maSaveGameData || Saves ||
|}
 
Line 95 ⟶ 100:
| 0x1A98 || 0x4 || RwUInt32 || munCheckSum || ||
|-
| 0x1A9C || 0x40x14 || ? || ? || Padding?HMAC-SHA1 checksum ||
|-
| 0x1AA0 || 0x10 || ? || ? || 128-bit key? || Multiplayer-related?
|}