Profile:Account: Difference between revisions
Jump to navigation
Jump to search
imported>Tuxuser (Added to Category:Xbox System Software and Category:File formats) |
imported>Tuxuser m (Text replace - "Category:File formats" to "Category:Xbox360_System_Software") |
||
(10 intermediate revisions by 3 users not shown) | |||
Line 31: | Line 31: | ||
|- | |- | ||
| 0 | | 0 | ||
| | | 4 | ||
| | | UInt32 | ||
| | | Reserved(Flags)<br> | ||
|- | |||
| 4 | |||
| 4 | |||
| UInt32 | |||
| LiveFlags | |||
|- | |- | ||
| 8 | | 8 | ||
| | | 16 chars/32 bytes | ||
| Unicode | | Unicode | ||
| Gamertag | | Gamertag | ||
|- | |- | ||
| 40 | | 40 | ||
| | | 8 | ||
| ulong | | ulong | ||
| | | XUID | ||
|- | |- | ||
| 48 | | 48 | ||
| | | 4 | ||
| | | UInt32 | ||
| | | Cached User Flags | ||
|- | |- | ||
| 52 | | 52 | ||
| 4 | | 4 | ||
| ASCII string | | ASCII string | ||
| Service | | Xbox Live Service Provider | ||
|- | |- | ||
| 56 | | 56 | ||
| 4 | | 4 | ||
| | | PasscodeKeys[4] | ||
| | | Passcode | ||
|- | |- | ||
| 60 | | 60 | ||
| 20 | | 20 | ||
| ASCII string | | ASCII string | ||
| | | Online Domain | ||
|- | |- | ||
| 80 | | 80 | ||
| 24 | | 24 | ||
| ASCII string | | ASCII string | ||
| | | Online Kerberos Realm | ||
|- | |- | ||
| 104 | | 104 | ||
Line 84: | Line 79: | ||
| Bytes | | Bytes | ||
| Online Key | | Online Key | ||
|- | |||
| 120 | |||
| 114 | |||
| ASCII string | |||
| User Passport Membername | |||
|- | |||
| 234 | |||
| 32 | |||
| ASCII string | |||
| User Passport Password | |||
|- | |||
| 266 | |||
| 114 | |||
| ASCII string | |||
| Owner Passport Membername | |||
|} | |} | ||
*Note Last 3 not used anymore(if ever). | |||
==Reserved(flags)== | |||
{| border=1 | |||
|- | |||
!Name | |||
!Value | |||
|- | |||
|Passcode Enabled | |||
|0x10000000 | |||
|- | |||
|LIVE Enabled | |||
|0x20000000 | |||
|- | |||
|Recovering | |||
|0x40000000 | |||
|} | |||
The flag at bit0 seems to be always set, not sure what it means though. | |||
==Cached User Flags== | |||
{|border=1 | |||
|- | |||
!Bits Used Indices | |||
!Field Name | |||
|- | |||
|0 | |||
|Payment Instrument Credit Card | |||
|- | |||
|8-15 | |||
|Country | |||
|- | |||
|16-19 | |||
|Subscription Teir | |||
|- | |||
|24 | |||
|Parental Controls Enabled | |||
|- | |||
|25-29 | |||
|Language | |||
|- | |||
|} | |||
The other bits are used, I'm just not sure what they all represent. | |||
==Passcode== | ==Passcode== | ||
The passcode is made up of these bytes: | The passcode is made up of these bytes: | ||
Line 131: | Line 182: | ||
| Right Bumper | | Right Bumper | ||
|} | |} | ||
*Note A and B are not valid for passwords. | |||
== XUID == | |||
public class XUID | |||
{ | |||
public System.UInt64 Value; | |||
public XUID(System.UInt64 _Value) | |||
{ | |||
Value = _Value; | |||
} | |||
public System.Boolean IsOfflineXuid | |||
{ | |||
get | |||
{ | |||
return (Value & 17293822569102704640L) == 16140901064495857664L; | |||
} | |||
} | |||
public System.Boolean IsOnline | |||
{ | |||
get | |||
{ | |||
return (Value & 18446462598732840960L) == 2533274790395904L; | |||
} | |||
} | |||
public System.Boolean IsTeam//Guess this is todo with devs | |||
{ | |||
get | |||
{ | |||
return (Value & 18374686479671624000L) == 18302628885633696000L; | |||
} | |||
} | |||
public System.Boolean IsValidXuid | |||
{ | |||
get | |||
{ | |||
return IsOfflineXuid != IsOnlineXuid; | |||
} | |||
} | |||
} | |||
==Country== | |||
public enum XboxLiveCountry | |||
{ | |||
Albania = 2, | |||
Algeria = 0x1b, | |||
Argentina = 4, | |||
Armenia = 3, | |||
Australia = 6, | |||
Austria = 5, | |||
Azerbaijan = 7, | |||
Bahrain = 10, | |||
Belarus = 14, | |||
Belgium = 8, | |||
Belize = 15, | |||
Bolivia = 12, | |||
Brazil = 13, | |||
BruneiDarussalam = 11, | |||
Bulgaria = 9, | |||
Canada = 0x10, | |||
Chile = 0x13, | |||
China = 20, | |||
Colombia = 0x15, | |||
CostaRica = 0x16, | |||
Croatia = 0x29, | |||
CzechRepublic = 0x17, | |||
Denmark = 0x19, | |||
DominicanRepublic = 0x1a, | |||
Ecuador = 0x1c, | |||
Egypt = 30, | |||
ElSalvador = 0x5f, | |||
Estonia = 0x1d, | |||
FaroeIslands = 0x21, | |||
Finland = 0x20, | |||
France = 0x22, | |||
Georgia = 0x24, | |||
Germany = 0x18, | |||
Greece = 0x25, | |||
Guatemala = 0x26, | |||
Honduras = 40, | |||
HongKong = 0x27, | |||
Hungary = 0x2a, | |||
Iceland = 0x31, | |||
India = 0x2e, | |||
Indonesia = 0x2b, | |||
Iran = 0x30, | |||
Iraq = 0x2f, | |||
Ireland = 0x2c, | |||
Israel = 0x2d, | |||
Italy = 50, | |||
Jamaica = 0x33, | |||
Japan = 0x35, | |||
Jordan = 0x34, | |||
Kazakhstan = 0x3a, | |||
Kenya = 0x36, | |||
Korea = 0x38, | |||
Kuwait = 0x39, | |||
Kyrgyzstan = 0x37, | |||
Latvia = 0x3f, | |||
Lebanon = 0x3b, | |||
LibyanArabJamahiriya = 0x40, | |||
Liechtenstein = 60, | |||
Lithuania = 0x3d, | |||
Luxembourg = 0x3e, | |||
Macao = 0x45, | |||
Macedonia = 0x43, | |||
Malaysia = 0x48, | |||
Maldives = 70, | |||
Mexico = 0x47, | |||
Monaco = 0x42, | |||
Mongolia = 0x44, | |||
Morocco = 0x41, | |||
Netherlands = 0x4a, | |||
NewZealand = 0x4c, | |||
Nicaragua = 0x49, | |||
Norway = 0x4b, | |||
Oman = 0x4d, | |||
Pakistan = 0x51, | |||
Panama = 0x4e, | |||
Paraguay = 0x55, | |||
Peru = 0x4f, | |||
Philippines = 80, | |||
Poland = 0x52, | |||
Portugal = 0x54, | |||
PuertoRico = 0x53, | |||
Qatar = 0x56, | |||
Romania = 0x57, | |||
RussianFederation = 0x58, | |||
SaudiArabia = 0x59, | |||
Singapore = 0x5b, | |||
Slovakia = 0x5d, | |||
Slovenia = 0x5c, | |||
SouthAfrica = 0x6d, | |||
Spain = 0x1f, | |||
Sweden = 90, | |||
Switzerland = 0x12, | |||
SyrianArabRepublic = 0x60, | |||
Taiwan = 0x65, | |||
Thailand = 0x61, | |||
TrinidadAndTobago = 100, | |||
Tunisia = 0x62, | |||
Turkey = 0x63, | |||
Ukraine = 0x66, | |||
UnitedArabEmirates = 1, | |||
UnitedKingdom = 0x23, | |||
UnitedStates = 0x67, | |||
Unknown = 0, | |||
Uruguay = 0x68, | |||
Uzbekistan = 0x69, | |||
Venezuela = 0x6a, | |||
Vietnam = 0x6b, | |||
Yemen = 0x6c, | |||
Zimbabwe = 110 | |||
} | |||
==SubscriptionTeir== | |||
enum SubscriptionTeir | |||
{ | |||
NoSubcription, | |||
Silver = 3, | |||
Gold = 6, | |||
FamilyGold = 9 | |||
}; | |||
[[Category: | ==Language== | ||
[[Category: | enum ConsoleLanguage | ||
{ | |||
None, | |||
English, | |||
Japanese, | |||
German, | |||
French, | |||
Spanish, | |||
Italian, | |||
Korean, | |||
TChinese, | |||
Portuguese, | |||
SChinese, | |||
Polish, | |||
Russian | |||
}; | |||
[[Category:Xbox360 System Software]] | |||
[[Category:Xbox360_System_Software]] |
Latest revision as of 00:14, 7 January 2014
The Account file is a HMAC-RC4 encrypted file stored in profiles to hold things such as the profiles gamertag, PUID (Passport User ID), online key and more.
Encryption
The file is encrypted with a custom form of HMAC-RC4, which is handled by the XeKeysUnobfuscate function. The key differs between retail and development consoles and is stored in key index 0x19.
- Retail key
0xE1 0xBC 0x15 0x9C 0x73 0xB1 0xEA 0xE9 0xAB 0x31 0x70 0xF3 0xAD 0x47 0xEB 0xF3
- Devkit key
0xDA 0xB6 0x9A 0xD9 0x8E 0x28 0x76 0x4F 0x97 0x7E 0xE2 0x48 0x7E 0x4F 0x3F 0x68
To decrypt the file:
- Copy the first 16 bytes of the file to a buffer. This is the HMAC-SHA1 hash of the file which is made using one of the keys above.
- Use HMAC-SHA1 on that buffer with a key from above to create the RC4 key, which is 0x10 bytes.
- Decrypt 8 bytes after the hash of the file (at offset 0x10) using RC4. This is the confounder.
- Decrypt 380 bytes after the confounder using RC4. This is the decrypted account data.
- Make a hash of the confounder and decrypted data using HMAC-SHA1 and a key above and compare it to the first 16 bytes of the file, if it doesn't match then the decryption failed.
To encrypt the file:
- Copy the decrypted data to offset 0x18
- Create a random 8 byte confounder and copy this to offset 0x10.
- Make a hash of the confounder and decrypted data using HMAC-SHA1 and a key above, resize it to 16 bytes and then copy that to the beginning of the file.
- Use HMAC-SHA1 on that hash with a key from above to create the RC4 key, which is 0x10 bytes.
- Encrypt 388 bytes from position 0x10 using RC4.
Decrypted File
Offset | Length | Type | Information |
---|---|---|---|
0 | 4 | UInt32 | Reserved(Flags) |
4 | 4 | UInt32 | LiveFlags |
8 | 16 chars/32 bytes | Unicode | Gamertag |
40 | 8 | ulong | XUID |
48 | 4 | UInt32 | Cached User Flags |
52 | 4 | ASCII string | Xbox Live Service Provider |
56 | 4 | PasscodeKeys[4] | Passcode |
60 | 20 | ASCII string | Online Domain |
80 | 24 | ASCII string | Online Kerberos Realm |
104 | 16 | Bytes | Online Key |
120 | 114 | ASCII string | User Passport Membername |
234 | 32 | ASCII string | User Passport Password |
266 | 114 | ASCII string | Owner Passport Membername |
- Note Last 3 not used anymore(if ever).
Reserved(flags)
Name | Value |
---|---|
Passcode Enabled | 0x10000000 |
LIVE Enabled | 0x20000000 |
Recovering | 0x40000000 |
The flag at bit0 seems to be always set, not sure what it means though.
Cached User Flags
Bits Used Indices | Field Name |
---|---|
0 | Payment Instrument Credit Card |
8-15 | Country |
16-19 | Subscription Teir |
24 | Parental Controls Enabled |
25-29 | Language |
The other bits are used, I'm just not sure what they all represent.
Passcode
The passcode is made up of these bytes:
Byte | Button |
---|---|
0 | Null |
1 | DPad Up |
2 | DPad Down |
3 | DPad Left |
4 | DPad Right |
5 | X |
6 | Y |
7 | A |
8 | B |
9 | Left Trigger |
10 | Right Trigger |
11 | Left Bumper |
12 | Right Bumper |
- Note A and B are not valid for passwords.
XUID
public class XUID { public System.UInt64 Value; public XUID(System.UInt64 _Value) { Value = _Value; } public System.Boolean IsOfflineXuid { get { return (Value & 17293822569102704640L) == 16140901064495857664L; } } public System.Boolean IsOnline { get { return (Value & 18446462598732840960L) == 2533274790395904L; } } public System.Boolean IsTeam//Guess this is todo with devs { get { return (Value & 18374686479671624000L) == 18302628885633696000L; } } public System.Boolean IsValidXuid { get { return IsOfflineXuid != IsOnlineXuid; } } }
Country
public enum XboxLiveCountry { Albania = 2, Algeria = 0x1b, Argentina = 4, Armenia = 3, Australia = 6, Austria = 5, Azerbaijan = 7, Bahrain = 10, Belarus = 14, Belgium = 8, Belize = 15, Bolivia = 12, Brazil = 13, BruneiDarussalam = 11, Bulgaria = 9, Canada = 0x10, Chile = 0x13, China = 20, Colombia = 0x15, CostaRica = 0x16, Croatia = 0x29, CzechRepublic = 0x17, Denmark = 0x19, DominicanRepublic = 0x1a, Ecuador = 0x1c, Egypt = 30, ElSalvador = 0x5f, Estonia = 0x1d, FaroeIslands = 0x21, Finland = 0x20, France = 0x22, Georgia = 0x24, Germany = 0x18, Greece = 0x25, Guatemala = 0x26, Honduras = 40, HongKong = 0x27, Hungary = 0x2a, Iceland = 0x31, India = 0x2e, Indonesia = 0x2b, Iran = 0x30, Iraq = 0x2f, Ireland = 0x2c, Israel = 0x2d, Italy = 50, Jamaica = 0x33, Japan = 0x35, Jordan = 0x34, Kazakhstan = 0x3a, Kenya = 0x36, Korea = 0x38, Kuwait = 0x39, Kyrgyzstan = 0x37, Latvia = 0x3f, Lebanon = 0x3b, LibyanArabJamahiriya = 0x40, Liechtenstein = 60, Lithuania = 0x3d, Luxembourg = 0x3e, Macao = 0x45, Macedonia = 0x43, Malaysia = 0x48, Maldives = 70, Mexico = 0x47, Monaco = 0x42, Mongolia = 0x44, Morocco = 0x41, Netherlands = 0x4a, NewZealand = 0x4c, Nicaragua = 0x49, Norway = 0x4b, Oman = 0x4d, Pakistan = 0x51, Panama = 0x4e, Paraguay = 0x55, Peru = 0x4f, Philippines = 80, Poland = 0x52, Portugal = 0x54, PuertoRico = 0x53, Qatar = 0x56, Romania = 0x57, RussianFederation = 0x58, SaudiArabia = 0x59, Singapore = 0x5b, Slovakia = 0x5d, Slovenia = 0x5c, SouthAfrica = 0x6d, Spain = 0x1f, Sweden = 90, Switzerland = 0x12, SyrianArabRepublic = 0x60, Taiwan = 0x65, Thailand = 0x61, TrinidadAndTobago = 100, Tunisia = 0x62, Turkey = 0x63, Ukraine = 0x66, UnitedArabEmirates = 1, UnitedKingdom = 0x23, UnitedStates = 0x67, Unknown = 0, Uruguay = 0x68, Uzbekistan = 0x69, Venezuela = 0x6a, Vietnam = 0x6b, Yemen = 0x6c, Zimbabwe = 110 }
SubscriptionTeir
enum SubscriptionTeir {
NoSubcription, Silver = 3, Gold = 6, FamilyGold = 9
};
Language
enum ConsoleLanguage { None, English, Japanese, German, French, Spanish, Italian, Korean, TChinese, Portuguese, SChinese, Polish, Russian };