ACT Services: Difference between revisions

TimmSkiller (talk | contribs)
added information about password management
TimmSkiller (talk | contribs)
No edit summary
 
(17 intermediate revisions by 2 users not shown)
Line 200: Line 200:


It is also possible to change the account slot number of an account by using [[ACTA:SwapAccounts]].
It is also possible to change the account slot number of an account by using [[ACTA:SwapAccounts]].
Account slot -2 (0xFE) always refers to the currently loaded account.


== Console Accounts ==
== Console Accounts ==
Line 211: Line 213:
Associating a console account with a Nintendo Network ID (server-side) is facilitated by the commands [[ACTA:BindToNewServerAccount]] (to create and link an NNID) or [[ACTA:BindToExistentServerAccount]] (to log into an existing linked NNID).
Associating a console account with a Nintendo Network ID (server-side) is facilitated by the commands [[ACTA:BindToNewServerAccount]] (to create and link an NNID) or [[ACTA:BindToExistentServerAccount]] (to log into an existing linked NNID).


Account slot -2 (0xFE) always refers to the currently loaded account.
Nintendo Network IDs can be transferred to other consoles using [[ACTA:ReserveTransfer]] initially, and then [[ACTA:CompleteTransfer]].
 
NNIDs can be deleted using either [[ACTA:DeleteServerAccount]], [[ACTA:InactivateAccountDeviceAssociation]], [[ACTA:DeleteAccountDeviceAssociation]] or [[ACTA:ReserveServerAccountDeletion]].


= Password Management =
= Password Management =
Line 259: Line 263:


See below how these types are determined by default. These types can also be overridden using [[ACTA:SetHostServerSettings]], [[ACTA:SetDefaultHostServerSettings]], [[ACTA:SetHostServerSettingsStr]], and [[ACTA:SetDefaultHostServerSettingsStr]].
See below how these types are determined by default. These types can also be overridden using [[ACTA:SetHostServerSettings]], [[ACTA:SetDefaultHostServerSettings]], [[ACTA:SetHostServerSettingsStr]], and [[ACTA:SetDefaultHostServerSettingsStr]].
Nintendo Network IDs can be transferred to other consoles using [[ACTA:ReserveTransfer]] initially, and then [[ACTA:CompleteTransfer]].
NNIDs can be deleted using either [[ACTA:DeleteServerAccount]], [[ACTA:InactivateAccountDeviceAssociation]], [[ACTA:DeleteAccountDeviceAssociation]] or [[ACTA:ReserveServerAccountDeletion]].


The base URL for the Nintendo Network Account Server (NNAS) is: <code>https://[<prefix>]account.nintendo.net</code>.
The base URL for the Nintendo Network Account Server (NNAS) is: <code>https://[<prefix>]account.nintendo.net</code>.
Line 411: Line 411:
| 0x3 || 0x1 || [[ACTU:GetCommonInfo|GetCommonInfo]] || Default account slot
| 0x3 || 0x1 || [[ACTU:GetCommonInfo|GetCommonInfo]] || Default account slot
|-
|-
| 0x4 || 0x8 || [[ACTU:GetCommonInfo|GetCommonInfo]] || Difference between server time and UTC device time (in nanoseconds)
| 0x4 || 0x8 || [[ACTU:GetCommonInfo|GetCommonInfo]] || NetworkTimeDifference: Difference between server time and UTC device time (in nanoseconds)
|-
|-
| 0x5 || 0x4 || [[ACTU:GetAccountDataBlock|GetAccountInfo]] || PersistentId
| 0x5 || 0x4 || [[ACTU:GetAccountDataBlock|GetAccountInfo]] || PersistentId
Line 417: Line 417:
| 0x6 || 0x8 || [[ACTU:GetCommonInfo|GetCommonInfo]]/[[ACTU:GetAccountDataBlock|GetAccountInfo]] || CommonTransferableIdBase on GetCommonInfo / TransferableIdBase on GetAccountInfo
| 0x6 || 0x8 || [[ACTU:GetCommonInfo|GetCommonInfo]]/[[ACTU:GetAccountDataBlock|GetAccountInfo]] || CommonTransferableIdBase on GetCommonInfo / TransferableIdBase on GetAccountInfo
|-
|-
| 0x7 || 0x60 || [[ACTU:GetAccountDataBlock|GetAccountInfo]] || [[ACT_Services#CFLStoreData|Mii CFLStoreData]]
| 0x7 || 0x60 || [[ACTU:GetAccountDataBlock|GetAccountInfo]] || [[Mii#CFLStoreData|Mii CFLStoreData]]
|-
|-
| 0x8 || 0x11 || [[ACTU:GetAccountDataBlock|GetAccountInfo]] || AccountId (ASCII NULL-terminated Nintendo Network ID)
| 0x8 || 0x11 || [[ACTU:GetAccountDataBlock|GetAccountInfo]] || AccountId (ASCII NULL-terminated Nintendo Network ID)
Line 423: Line 423:
| 0x9 || 0x101 || [[ACTU:AcquireAccountInfo|AcquireAccountInfo]] || Mail address
| 0x9 || 0x101 || [[ACTU:AcquireAccountInfo|AcquireAccountInfo]] || Mail address
|-
|-
| 0xA || 0x4 || [[ACTU:GetAccountDataBlock|GetAccountInfo]] || Birthdate
| 0xA || 0x4 || [[ACTU:GetAccountDataBlock|GetAccountInfo]] || [[ACT_Services#Birthdate|Birth Date]]
{| class="wikitable" border="1"
|-
! Offset !! Size !! Description
|-
| 0x0 || 0x2 || Year
|-
| 0x2 || 0x1 || Month
|-
| 0x3 || 0x1 || Day
|}
|-
|-
| 0xB || 0x3 || [[ACTU:GetAccountDataBlock|GetAccountInfo]] || ASCII NULL-terminated Country Name
| 0xB || 0x3 || [[ACTU:GetAccountDataBlock|GetAccountInfo]] || ASCII NULL-terminated Country Name
Line 454: Line 444:
| 0x8 || 0x8 || u64 TransferableIDBase
| 0x8 || 0x8 || u64 TransferableIDBase
|-
|-
| 0x10 || 0x60 || [[Mii#Mii_format|Mii]]
| 0x10 || 0x60 || [[Mii#CFLStoreData|Mii CFLStoreData]]
|-
|-
| 0x70 || (10 + 1) * 2 || 10-character UTF-16 Mii Display Name
| 0x70 || (10 + 1) * 2 || 10-character UTF-16 Mii Display Name
Line 462: Line 452:
| 0x97 || 1 || padding
| 0x97 || 1 || padding
|-
|-
| 0x98 || 0x4 || Birthdate
| 0x98 || 0x4 || [[ACT_Services#Birthdate|Birth Date]]
{| class="wikitable" border="1"
|-
! Offset !! Size !! Description
|-
| 0x0 || 0x2 || Year
|-
| 0x2 || 0x1 || Month
|-
| 0x3 || 0x1 || Day
|}
|-
|-
| 0x9C || 0x4 || u32, PrincipalID
| 0x9C || 0x4 || u32, PrincipalID
|}
|}
|-
|-
| 0x12 || 0x4 || [[ACTU:GetAccountDataBlock|GetAccountInfo]] ||  
| 0x12 || 0x4 || [[ACTU:GetAccountDataBlock|GetAccountInfo]] || Account server types
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Offset !! Size !! Description
! Offset !! Size !! Description
|-
|-
| 0x0 || 0x1 || NNAS (Nintendo Network Authentication Server) Type
| 0x0 || 0x1 || [[ACT_Services#NNAS_.28Nintendo_Network_Authentication_Server.29_Types|NNAS (Nintendo Network Authentication Server) Type]]
|-
|-
| 0x1 || 0x1 || [[Friend_Services#Server_Types|NFS (Nintendo Friend Server) Type Value]]
| 0x1 || 0x1 || [[ACT_Services#NFS_.28Nintendo_Friend_Server.29_Types|NFS (Nintendo Friend Server) Type Value]]
|-
|-
| 0x2 || 0x1 || [[Friend_Services#Server_Types|NFS (Nintendo Friend Server) Number]]
| 0x2 || 0x1 || [[ACT_Services#NFS_.28Nintendo_Friend_Server.29_Types|NFS (Nintendo Friend Server) Number]]
|-
|-
| 0x3 || 0x1 || padding (0)
| 0x3 || 0x1 || padding (0)
Line 503: Line 483:
| 0x19 || 0x8 || [[ACTU:GetAccountDataBlock|GetAccountInfo]] || UtcOffset
| 0x19 || 0x8 || [[ACTU:GetAccountDataBlock|GetAccountInfo]] || UtcOffset
|-
|-
| 0x1A || 0x1 || [[ACTU:GetAccountDataBlock|GetAccountInfo]] || IsCommited
| 0x1A || 0x1 || [[ACTU:GetAccountDataBlock|GetAccountInfo]] || IsCommitted
|-
|-
| 0x1B || 0x16 || [[ACTU:GetAccountDataBlock|GetAccountInfo]] || 10-character UTF-16 Mii Name (10 characters + NULL termination)
| 0x1B || 0x16 || [[ACTU:GetAccountDataBlock|GetAccountInfo]] || 10-character UTF-16 Mii Name (10 characters + NULL termination)
|-
|-
| 0x1C || 0x11 || [[ACTU:GetAccountDataBlock|GetAccountInfo]] || ASCII NULL-termiinated NfsPassword
| 0x1C || 0x11 || [[ACTU:GetAccountDataBlock|GetAccountInfo]] || ASCII NULL-terminated NfsPassword
|-
|-
| 0x1D || 0x1 || [[ACTU:GetAccountDataBlock|GetAccountInfo]] || HasEciVirtualAccount (checks whether EciVirtualAccount has a value)
| 0x1D || 0x1 || [[ACTU:GetAccountDataBlock|GetAccountInfo]] || HasEciVirtualAccount (checks whether EciVirtualAccount has a value)
Line 527: Line 507:
|-
|-
| 0x22 || 0x29 || ASCII NULL-terminated refresh token
| 0x22 || 0x29 || ASCII NULL-terminated refresh token
|-
| 0x4B || 0x1 || padding
|}
|-
| 0x22 || 0x1 || [[ACTU:GetCommonInfo|GetCommonInfo]] || IsApplicationUpdateRequired
|-
| 0x23 || 0x4 || [[ACTU:GetCommonInfo|GetCommonInfo]] || Default account server types
{| class="wikitable" border="1"
|-
! Offset !! Size !! Description
|-
| 0x0 || 0x1 || [[ACT_Services#NNAS_.28Nintendo_Network_Authentication_Server.29_Types|NNAS (Nintendo Network Authentication Server) Type]]
|-
| 0x1 || 0x1 || [[ACT_Services#NFS_.28Nintendo_Friend_Server.29_Types|NFS (Nintendo Friend Server) Type Value]]
|-
| 0x2 || 0x1 || [[ACT_Services#NFS_.28Nintendo_Friend_Server.29_Types|NFS (Nintendo Friend Server) Number]]
|-
| 0x3 || 0x1 || padding (0)
|}
|}
|-
|-
Line 542: Line 540:
! Offset !! Size !! Description
! Offset !! Size !! Description
|-
|-
| 0x0 || 0x21 || ASCII NULL-terminated NNAS subdomain
| 0x0 || 0x21 || ASCII NULL-terminated [[ACT_Services#NNAS_.28Nintendo_Network_Authentication_Server.29_Types|NNAS]] subdomain
|-
|-
| 0x21 || 0x3 || [[Friend_Services#Server_Types|NFS (Nintendo Friend Server) Environment]]
| 0x21 || 0x3 || [[ACT_Services#NFS_.28Nintendo_Friend_Server.29_Types|NFS (Nintendo Friend Server) Type]]
|}
|}
|-
|-
Line 552: Line 550:
! Offset !! Size !! Description
! Offset !! Size !! Description
|-
|-
| 0x0 || 0x21 || ASCII NULL-terminated NNAS subdomain
| 0x0 || 0x21 || ASCII NULL-terminated [[ACT_Services#NNAS_.28Nintendo_Network_Authentication_Server.29_Types|NNAS]] subdomain
|-
|-
| 0x21 || 0x3 || [[Friend_Services#Server_Types|NFS (Nintendo Friend Server) Environment]]
| 0x21 || 0x3 || [[ACT_Services#NFS_.28Nintendo_Friend_Server.29_Types|NFS (Nintendo Friend Server) Type]]
|}
|}
|-
|-
| 0x2A || 0x8 || [[ACTU:GetCommonInfo|GetCommonInfo]] || first 8 bytes of <code>SHA256 ( [[AM:GetDeviceId]]() as 4 little endian bytes + 'A2257354' )</code>
| 0x2A || 0x8 || [[ACTU:GetCommonInfo|GetCommonInfo]] || DeviceHash: first 8 bytes of <code>SHA256 ( [[AM:GetDeviceId]]() as 4 little endian bytes + A2257354 )</code>
|-
|-
| 0x2B || 0x1 || [[ACTU:GetAccountDataBlock|GetAccountInfo]] || FpLocalAccountId (local account ID of [[Friend_Services|friends sysmodule]])
| 0x2B || 0x1 || [[ACTU:GetAccountDataBlock|GetAccountInfo]] || FpLocalAccountId (local account ID of [[Friend_Services|friends sysmodule]])
Line 571: Line 569:


= Types =
= Types =
== CFLStoreData ==
== Birthdate ==
This is the Mii format used in ACT commands.
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Offset !! Size !! Description
! Offset !! Size !! Description
|-
|-
| 0x0 || 0x5C || [[Mii#Mii_format|Mii Data]]
| 0x0 || 0x2 || u16, Year
|-
|-
| 0x5C || 0x2 || padding
| 0x2 || 0x1 || u8, Month
|-
|-
| 0x5E || 0x2 || CRC16 over the above 0x5E bytes (see [[Mii#Checksum|Mii Checksum]] for details on the algorithm)
| 0x3 || 0x1 || u8, Day
|}
|}
== Mii Image Types ==
{| class="wikitable" border="1"
|-
! Value !! Description
|-
| 0 || Primary Mii Image
|-
| 1 || Unknown
|-
| 2 || Unknown
|-
| 3 || Unknown
|-
| 4 || Unknown
|-
| 5 || Unknown
|-
| 6 || Unknown
|-
| 7 || Unknown
|-
| 8 || Unknown
|}


== Timezone ==
== Timezone ==
Line 598: Line 620:
|-
|-
| 0x88 || 0x8 || s64, UtcOffset in seconds
| 0x88 || 0x8 || s64, UtcOffset in seconds
|}
== AcquireTimeZoneListData ==
{| class="wikitable" border="1"
|-
! Offset !! Size !! Description
|-
| 0x0 || 0x4 || u32, Capacity (32)
|-
| 0x4 || 0x4 || u32, Count
|-
| 0x8 || 0x90 * Capacity || [[ACT_Services#Timezone|Timezones]]
|}
|}


Line 610: Line 644:
|-
|-
| 0x6 || 0x2 || u16, EULA version
| 0x6 || 0x2 || u16, EULA version
|}
== InquireBindingToExistentServerAccountData ==
Represents the device information for the console linked to the NNID.
{| class="wikitable" border="1"
|-
! Offset !! Size !! Description
|-
| 0x0 || 0x1 || bool, HasMii
|-
| 0x1 || 0x3 || padding
|-
| 0x4 || 0x60 || [[Mii#CFLStoreData|Mii CFLStoreData]]
|-
| 0x64 || 0x4 || u32, PrincipalId
|-
| 0x68 || 0x1 || bool, CoppaRequiredFlag
|-
| 0x69 || 0x3 || padding
|-
| 0x6C || 0x5 + 1 || ASCII 5-character CoppaCode + NULL termination
|-
| 0x72 || 0x100 + 1 || ASCII 256-character ParentEmail + NULL termination
|-
| 0x173 || 0x1 || padding
|-
| 0x174 || 0x4 || [[ACT_Services#Birthdate|Birth Date]]
|}
==SendCoppaCodeMailData==
{| class="wikitable" border="1"
|-
! Offset !! Size !! Description
|-
| 0x0 || 0x5 + 1 || 5-character ASCII CoppaCode + NULL termination
|-
| 0x6 || 0x100 + 1 || 256-character ASCII ParentEmail + NULL termination
|}
==AcquireEulaData/AcquireEulaListData==
Data returned from [[ACTU:AcquireEula]] and [[ACTU:AcquireEulaList]] uses a special format.
===EulaHeader===
{| class="wikitable" border="1"
|-
! Offset !! Size !! Description
|-
| 0x0 || 0x3 || 2-character Country code + NULL termination
|-
| 0x3 || 0x1 || padding
|-
| 0x4 || 0x3 || 2-character Language code + NULL termination
|-
| 0x7 || 0x1 || padding
|-
| 0x8 || 0x2 || u16, Version
|-
| 0xA || 0x2 || padding
|-
| 0xC || 0x4 || u32, end offset of this EULA within full data blob
|-
| 0x10 || 0x4 || EulaType offset
|-
| 0x14 || 0x4 || AgreeText offset
|-
| 0x18 || 0x4 || NonAgreeText offset
|-
| 0x1C || 0x4 || LanguageName offset
|-
| 0x20 || 0x4 || MainTitle offset
|-
| 0x24 || 0x4 || MainText offset
|-
| 0x28 || 0x4 || SubTitle offset
|-
| 0x2C || 0x4 || SubText offset
|}
<code>X offset</code> refers to an offset to a NULL-terminated ASCII string value for <code>X</code> within the full EULA data blob (see below).
===EulaList===
This is the full data blob retrieved using [[ACTU:GetAsyncResult]].
Each EULA list entry is appended at the very end of the previous one. The end offset in the header can be used to get to subsequent EULA list entries.
{| class="wikitable" border="1"
|-
! Offset !! Size !! Description
|-
| 0x0 || 0x1 || u8, Number of EULA list entries (n)
|-
| 0x1 || n * (...) || concatenated EULA list entries
{| class="wikitable" border="1"
|-
! Offset !! Size !! Description
|-
| 0x0 || 0x30 || [[ACT_Services#EulaHeader|EulaHeader]]
|-
| 0x30 || ... || EULA data
|}
|}
|}