Profile:Account

From Xenon Wiki
Revision as of 17:36, 16 February 2012 by imported>Godzcheater (→‎Decrypted File: Country)
Jump to navigation Jump to search

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 2 ushort Status (Recovering: 0, Offline: 0x1000, Online: 0x2000, Password Protected: 0x3000)
8 16 chars/32 bytes Unicode Gamertag
40 8 ulong XUID
48 1 byte unknown(XVER?)
49 0x1 byte Membership type (Offline: 0, Silver: 0x30, Gold: 0x60, Gold Family: 0x90)
50 1 byte Country
52 1 byte unknown
52 4 ASCII string Service
56 4 Bytes Password
60 20 ASCII string Server
80 24 ASCII string Passport
104 16 Bytes Online Key

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
       }