Config Savegame: Difference between revisions

TimmSkiller (talk | contribs)
documented use of block 0x00150000
TimmSkiller (talk | contribs)
 
(12 intermediate revisions by 4 users not shown)
Line 48: Line 48:
| 0xA
| 0xA
| 0x2
| 0x2
| Flags
| Access Flags
|}
|}
===Access Flags===
{| class="wikitable" border="1"
|-
!  Bit Mask
!  Description
|-
| 0x2
| User Readable (cfg:u)
|-
| 0x4
| System Writable (cfg:s / cfg:i)
|-
| 0x8
| System Readable (cfg:s / cfg:i)
|}
Config blocks will typically either use 0xC for system readable/writable or 0xE for all 3.


==Configuration blocks==
==Configuration blocks==
Line 56: Line 74:
!  BlkID
!  BlkID
!  Size
!  Size
!  Flags
Access Flags
!  Description
!  Description
|-
|-
Line 87: Line 105:
| 0x8
| 0x8
| 0xC
| 0xC
| Settings time offset: newly set timestamp - rtc timestamp
| Difference (in nanoseconds) between UTC server time and RTC time. Updated by [[Friend_Services|the Friends sysmodule]] after every [[Online_Play|NASC]] login. Used by System settings to calculate the real current time according to the online play authentication server, in order to determine the user's actual age based on the given date of birth (related to COPPA, since this is used to check whether the user is at least 13 years old).
|-
|-
| 0x00040000
| 0x00040000
Line 202: Line 220:
| 0x8
| 0x8
| 0xE
| 0xE
| This contains a u64 ID, used by processes using [[NWMUDS:InitializeWithVersion]]. The first word is the same as [[CfgS:GetLocalFriendCodeSeed|LocalFriendCodeSeed]], while the latter is a separate word.
| u64, Current local friend code. Updated by the friends sysmodule when a local friends account is loaded with [[FRDA:LoadLocalAccount]] accordingly.
|-
|-
| 0x00090001
| 0x00090001
| 0x8
| 0x8
| 0xE
| 0xE
| Same content as 0x0009000? This console-unique u64 is used by [[Cfg:GenHashConsoleUnique|GenHashConsoleUnique]]. It is generated by <code>((0x3FFFFFFFF) & LocalFriendCodeSeed) | (random16 << 48))</code>, where random16 is generated by [[PSPXI:GenerateRandomBytes|GenerateRandomBytes]]
| u64, Local friend code base value. This value is sent by the friends sysmodule to the friends gameserver during NEX account creation and serves as a means to find PIDs (and thus "online" friend codes) for other consoles' that were registered using [[FRDA:AddFriendOffline]] when those console(s) hadn't yet registered with the friends services at the time. The lower 34 bits are from [[Nandrw/sys/LocalFriendCodeSeed_B|LocalFriendCodeSeed]], and the upper 16 bits are from the LocalFriendCodeSeed counter (see below block, 0x90002). The remaining bits are left zero. This value is initialized as described by the CFG module when the LocalFriendCodeSeed part is zero. Used by [[Cfg:GenHashConsoleUnique|GenHashConsoleUnique]].
|-
|-
| 0x00090002
| 0x00090002
| 0x4
| 0x4
| 0xE
| 0xE
| The first two bytes are the same random16 used in 0x00090001. The second two bytes are zeros.
| u16, Local friend code counter. This value is initialized by the CFG module alongside block 0x90001 to two random bytes generated by [[PS:GenerateRandomBytes]] and also serves as a component of that block. It is incremented by PTM and stored in MCU storage when PTM save data is formatted. Once incremented, upon reboot, PTM will use the counter stored in MCU storage to update the local friend code base value (block 0x90001). After updating the relevant configuration blocks, PTM sets the storage area reserved for the counter to 0.
|-
|-
| 0x000A0000
| 0x000A0000
| 0x1C
| 0x1C
| 0xE
| 0xE
| Username in UTF16
| [[#User Name Block 0x000A0000|User Name]]
|-
|-
| 0x000A0001
| 0x000A0001
Line 253: Line 271:
| 0xC0
| 0xC0
| 0xE
| 0xE
| Restricted photo exchange data, and other info (includes a mirror of Parental Restrictions PIN/Secret Answer)
| [[#Parental Control Settings Block 0x000C0000|Parental Controls - Main data]]
|-
|-
| 0x000C0001
| 0x000C0001
Line 263: Line 281:
| 0x200
| 0x200
| 0xE
| 0xE
| ? Contains the email address set during Parental Restriction setup.
| [[#Parental Control Settings Block 0x000C0002|Parental Controls - Registered e-Mail address and custom secret question]]
|-
|-
| 0x000D0000
| 0x000D0000
Line 273: Line 291:
| 0x1
| 0x1
| 0xE
| 0xE
| ?
| ? (related to SpotPass options in Internet Settings?)
|-
|-
| 0x000F0000
| 0x000F0000
Line 289: Line 307:
| 0x1
| 0x1
| 0xC
| 0xC
| ?
| Home Menu button disable
|-
|-
| 0x000F0004
| 0x000F0004
Line 359: Line 377:
| 0x4
| 0x4
| 0xE
| 0xE
| In NIM, taken as an u32, using the low u16, casted to a char, and turned lower case for the making of the url for NPNS.
| [[Friend_Services#Server_Types|NFS (Nintendo Friend Server) Environment]] in the format <code>%c%d</code>. Set by the [[ACT_Services|ACT]] sysmodule. Used in the [[NIM_Services#NIM|NIM]] sysmodule for making the NPNS URL.
|-
|-
| 0x00160000
| 0x00160000
Line 501: Line 519:
|}
|}


===0x000A0000 Block===
===User Name Block 0x000A0000===
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 507: Line 525:
!  Description
!  Description
|-
|-
| 0x0-0x13
| 0x00-0x15
| UTF-16 username, with no NULL-terminator.
| User name (UTF-16)
|-
|-
| 0x14-17
| 0x16-0x17
| Usually zero?
| u16 NGWord flag to denote that the user name is inappropriate
|-
|-
| 0x18-0x1B
| 0x18-0x1B
Line 517: Line 535:
|}
|}


 
While the user name is NULL-terminated, the terminator is not applied when the user name is 10 characters long, which leads to online access breaking (002-0109) and buffer overflows when the user name is retrieved, even in DS games.


===WiFi Slot Structure===
===WiFi Slot Structure===
Line 700: Line 718:




===Parental control Block 0x00100001===
===Parental Control Settings Block 0x00100001===
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 716: Line 734:
|-
|-
| 0x11
| 0x11
| 0x20
| 0x40
| Secret answer in UTF-16
| Secret Answer (UTF-16)
|}
|}


===Parental Control setting block 0xC0000===
===Parental Control Settings Block 0x000C0000===
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 729: Line 747:
| 0x00
| 0x00
| 0x04
| 0x04
| [[#Parental Control restriction bitmask|Parental Control restriction bitmask]]
| [[#Parental Control Restriction Bitmask|Parental Control Restriction Bitmask]]
|-
| 0x04
| 0x04
| Unknown
|-
| 0x08
| 0x01
| Rating system used for configuration
|-
| 0x09
| 0x01
| Maximum allowed age (20 = No restriction)
|-
| 0x0A
| 0x01
| Secret Question Type (0-5: Pre-defined, 6: Custom)
|-
| 0x0B
| 0x01
| Unknown
|-
|-
| 0x0C
| 0x0C
| 0x04
| 0x08
| Parental Controls PIN code
| Parental Controls PIN code (with NULL-termination, although restricted to 4 digits)
|-
| 0x14
| 0x44
| Secret Answer (UTF-16)
|}
|}


====Parental Control restriction bitmask====
====Parental Control Restriction Bitmask====
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 743: Line 785:
|-
|-
| 0
| 0
| Global Parental Controls enable
| Global Parental Controls Enable
|-
| 1
| Internet Browser
|-
| 2
| Display of 3D Images (disabled on 2DS)
|-
|-
| 3
| 3
Line 749: Line 797:
|-
|-
| 4
| 4
| Internet Browser
| Online Interaction
|-
|-
| 5
| 5
Line 756: Line 804:
| 6
| 6
| Friend Registration
| Friend Registration
|-
| 7
| DS Download Play
|-
|-
| 8
| 8
| eShop
| Nintendo 3DS Shopping Services (eShop / EC Applet)
|-
| 9
| View Distributed Videos
|-
|-
| 10
| 10
| Miiverse (view)
| Miiverse (View)
|-
|-
| 11
| 11
| Miiverse (post)
| Miiverse (Post)
|-
|-
| 31
| 31
| "Child Online Privacy Protection" (see [[Cfg:GetRegionCanadaUSA|CFG:IsCoppacsSupported]])
| "Child Online Privacy Protection" (see [[Cfg:GetRegionCanadaUSA|CFG:IsCoppacsSupported]])
|}
===Parental Control Settings Block 0x000C0002===
{| class="wikitable" border="1"
|-
!  Offset
!  Size
!  Description
|-
| 0x0000
| 0x0001
| Boolean, whether an e-Mail has been registered
|-
| 0x0001
| 0x0101
| Registered e-Mail address (Plaintext)
|-
| 0x0102
| 0x0068
| Custom Secret Question (UTF-16)
|}
|}