Packets/Login/TheBurningCrusade: Difference between revisions
Jump to navigation
Jump to search
m (Add to Login category) |
(Add server challenge packets) |
||
Line 75: | Line 75: | ||
|- | |- | ||
| FAIL_LOCKED_ENFORCED || 0x10 || Does not appear to be valid on 1.12.1. | | FAIL_LOCKED_ENFORCED || 0x10 || Does not appear to be valid on 1.12.1. | ||
|} | |||
{| class="wikitable" | |||
|+ Security Flags | |||
! Name | |||
! Value | |||
! Description | |||
|- | |||
| NONE || 0x00 || No additional checks verification. | |||
|- | |||
| PIN || 0x01 || TOTP verification entered as a PIN. | |||
|- | |||
| UNKNOWN0 || 0x02 || Unknown. Referred to as "Matrix input" in Mangos source. | |||
|- | |||
| AUTHENTICATOR || 0x04 || Authenticator. | |||
|} | |} | ||
==Challenge packets== | ==Challenge packets== | ||
=== Client === | |||
{| class="wikitable" | {| class="wikitable" | ||
Line 112: | Line 129: | ||
|- | |- | ||
| 0x22 || account_name_len / Big || uint8[account_name_len] || account_name || UTF-8 encoded uppercase string of the username.<br> Not all unicode characters are uppercased correctly. | | 0x22 || account_name_len / Big || uint8[account_name_len] || account_name || UTF-8 encoded uppercase string of the username.<br> Not all unicode characters are uppercased correctly. | ||
|} | |||
=== Server === | |||
{| class="wikitable" | |||
|+ AuthLogonChallenge_Server | |||
! Offset | |||
! Size / Endianness | |||
! Type | |||
! Name | |||
! Description | |||
|- | |||
!colspan="5"| Header | |||
|- | |||
| 0x1 || 1 / - || uint8 || command || LOGIN_CHALL (0x0) | |||
|- | |||
| 0x2 || 1 / - || uint8 || protocol_version || Must be 0. | |||
|- | |||
| 0x3 || 1 / - || uint8 || result || The fields below are only included if this is LOGIN_OK (0x0). | |||
|- | |||
!colspan="5"| Body | |||
|- | |||
| 0x4 || 32 / Little || uint8[32] || B || SRP public server ephemeral.<br>All SRP operations are performed with little endian values. | |||
|- | |||
| 0x24 || 1 / - || uint8 || g_len || SRP generator length.<br> Should always be 1 since the generator is never larger than 255. | |||
|- | |||
| 0x25 || g_len / - || uint8 || g || SRP generator. All SRP operations are performed with little endian values. | |||
|- | |||
| (0x26) || 1 / - || uint8 || n_len || SRP modulus length. Client will not read more than 32.<br>All SRP operations are performed with little endian values. | |||
|- | |||
| (0x27) || n_len / Little || uint8[n_len] || n || SRP modulus. All SRP operations are performed with little endian values. | |||
|- | |||
| (0x47) || 32 / Little || uint8[32] || srp_salt || SRP user's salt. All SRP operations are performed with little endian values. | |||
|- | |||
| (0x47) || 16 / Little || uint8[16] || crc_salt || A salt to be used in AuthLogonProof_Client.crc_hash.<br>Can be all zeros. | |||
|- | |||
| (0x57) || 1 / - || uint8 || security_flags || Bit pattern for optional authentication features.<br>More than one feature can be used,<br> and the fields are just appended in the bit pattern order from lowest first. See security_flag. tables below for specifics. If 0 the packet ends here. | |||
|} | |||
The offsets in parentheses are not fixed since they depend on the lengths of previous fields, but these fields are most often the default values so the offsets are presented as semi-fixed. | |||
{| class="wikitable" | |||
|+ security_flags.PIN Fields | |||
! Offset | |||
! Size / Endianness | |||
! Type | |||
! Name | |||
! Description | |||
|- | |||
| 0x00 || 4 / Little || uint32 || pin_grid_seed || Seed value for the PIN grid on the client.<br> Only here if the two_factor_authentication field is true. | |||
|- | |||
| 0x04 || 16 / Little || uint8[16] || pin_salt || Salt value for the client.<br> Only here if the two_factor_authentication field is true. | |||
|} | |||
{| class="wikitable" | |||
|+ security_flags.Unknown0 Fields | |||
! Offset | |||
! Size / Endianness | |||
! Type | |||
! Name | |||
! Description | |||
|- | |||
| 0x00 || 1 / - || uint8 || unknown0 || Unknown. Statically set to 0 in Mangos. | |||
|- | |||
| 0x01 || 1 / - || uint8 || unknown1 || Unknown. Statically set to 0 in Mangos. | |||
|- | |||
| 0x02 || 1 / - || uint8 || unknown2 || Unknown. Statically set to 0 in Mangos. | |||
|- | |||
| 0x03 || 1 / - || uint8 || unknown3 || Unknown. Statically set to 0 in Mangos. | |||
|- | |||
| 0x04 || 8 / - || uint64 || unknown4 || Unknown. Statically set to 0 in Mangos. | |||
|} | |||
{| class="wikitable" | |||
|+ security_flags.Authenticator Fields | |||
! Offset | |||
! Size / Endianness | |||
! Type | |||
! Name | |||
! Description | |||
|- | |||
| 0x00 || 1 / - || uint8 || unknown0 || Statically set to 1 in Mangos. | |||
|} | |} | ||
Revision as of 23:04, 17 May 2021
Opcodes and Errors
Name | Value | Description |
---|---|---|
Authentication | ||
LOGIN_CHALL | 0x00 | Intial information sent by client and then challenge by server. |
LOGIN_PROOF | 0x01 | Proof sent by client and then server. |
RECON_CHALL | 0x02 | Reconnect challenge sent by client and then server. |
RECON_PROOF | 0x03 | Reconnect proof sent by client and then server. |
SURVEY_RESULT | 0x04 | Used for hardware survey. |
Realmlist | ||
REALMLIST | 0x10 | Realmlist request sent by client and realmlist information sent by server. |
Patching | ||
XFER_INITIATE | 0x30 | Used for patching. |
XFER_DATA | 0x31 | Used for patching. |
XFER_ACCEPT | 0x32 | Used for patching. |
XFER_RESUME | 0x33 | Used for patching. |
XFER_CANCEL | 0x34 | Used for patching. |
Name | Value | Client Message |
---|---|---|
SUCCESS | 0x00 | |
FAIL_UNKNOWN0 | 0x01 | "Unable to Connect" |
FAIL_UNKNOWN1 | 0x02 | "Unable to Connect" |
FAIL_BANNED | 0x03 | "The World of Warcraft account has been closed and is no longer available for use. Please go to http://www.wow-europe.com/en/misc/banned.html for further information. |
FAIL_UNKNOWN_ACCOUNT | 0x04 | "The information you have entered is not valid. Please check the spelling of the account name and password. If you need help in retrieving a lost or stolen password and account, see http://www.wow-europe.com for more information." |
FAIL_INCORRECT_PASSWORD | 0x05 | "The information you have entered is not valid. Please check the spelling of the account name and password. If you need help in retrieving a lost or stolen password and account, see http://www.wow-europe.com for more information." |
FAIL_ALREADY_ONLINE | 0x06 | "This account is already logged into World of Warcraft. Please check the spelling and try again." |
FAIL_NO_TIME | 0x07 | "You have used up your prepaid time for this account. Please purchase more to continue playing." |
FAIL_DB_BUSY | 0x08 | "Could not log in to World of Warcraft at this time. Please try again later." |
FAIL_VERSION_INVALID | 0x09 | "Unable to validate game version. This may be caused by file corruption or the interference of another program. Please visit http://www.wow-europe.com/en/support/ for more information and possible solutions to this issue." |
LOGIN_DOWNLOAD_FILE | 0x0A | "Downloading" |
FAIL_INVALID_SERVER | 0x0B | "Unable to Connect" |
FAIL_SUSPENDED | 0x0C | "The World of Warcraft account has been temporarily suspended. Please go to http://www.wow-europe.com/en/misc/banned.html for further information. |
FAIL_NO_ACCESS | 0x0D | "Unable to Connect" |
SUCCESS_SURVEY | 0x0E | "Success!" Pressing cancel either shows a cached realmlist or "Retrieving realm list". |
FAIL_PARENTALCONTROL | 0x0F | "Access to this account has been blocked by parental controls. Your settings may be changed in your account preferences at http://www.worldofwarcraft.com." |
FAIL_LOCKED_ENFORCED | 0x10 | Does not appear to be valid on 1.12.1. |
Name | Value | Description |
---|---|---|
NONE | 0x00 | No additional checks verification. |
PIN | 0x01 | TOTP verification entered as a PIN. |
UNKNOWN0 | 0x02 | Unknown. Referred to as "Matrix input" in Mangos source. |
AUTHENTICATOR | 0x04 | Authenticator. |
Challenge packets
Client
Offset | Size / Endianness | Type | Name | Description |
---|---|---|---|---|
0x0 | 1 / - | uint8 | command | LOGIN_CHALL (0x0), AuthReconnectionChallenge_Client has RECON_CHALL (0x2). |
0x1 | 1 / - | uint8 | protocol_version | 3 for 1.12 connection attempts and 2 for 1.12 reconnection attempts. Unknown for 1.1. |
0x2 | 2 / Little | uint16 | size | length of package minus the size of the command, protocol_version and size fields (4 bytes). The size can be calculated as 30 (0x1E) + account_name_len, see that field for a maximum. |
0x4 | 4 / Little | uint8[4] | gamename | Always null terminated 'WoW\0' string. |
0x8 | 3 / - | uint8[3] | version | [0x02, 0x04, 0x03] for 2.4.3. |
0xB | 2 / Little | uint16 | build | 4125, aka Revision |
0xD | 4 / Big | uint8[4] | platform | eg '\0x86'. Has a leading zero for 'x86'. |
0x11 | 4 / Big | uint8[4] | os | eg '\0Win'. Has a leading zero for 'Win'. |
0x15 | 4 / Big | uint8[4] | locale | eg 'enUS' |
0x19 | 4 / Little | uint32 | worldregion_bias | Offset in minutes from UTC time, eg. 180 means 180 minutes |
0x1D | 4 / Big | uint32 | ip | client_ip |
0x21 | 1 / - | uint8 | account_name_lenth | Length of the account_name field in bytes. The client can only send 16 characters, but this can still be more than 16 bytes if non-ASCII characters are used. |
0x22 | account_name_len / Big | uint8[account_name_len] | account_name | UTF-8 encoded uppercase string of the username. Not all unicode characters are uppercased correctly. |
Server
Offset | Size / Endianness | Type | Name | Description |
---|---|---|---|---|
Header | ||||
0x1 | 1 / - | uint8 | command | LOGIN_CHALL (0x0) |
0x2 | 1 / - | uint8 | protocol_version | Must be 0. |
0x3 | 1 / - | uint8 | result | The fields below are only included if this is LOGIN_OK (0x0). |
Body | ||||
0x4 | 32 / Little | uint8[32] | B | SRP public server ephemeral. All SRP operations are performed with little endian values. |
0x24 | 1 / - | uint8 | g_len | SRP generator length. Should always be 1 since the generator is never larger than 255. |
0x25 | g_len / - | uint8 | g | SRP generator. All SRP operations are performed with little endian values. |
(0x26) | 1 / - | uint8 | n_len | SRP modulus length. Client will not read more than 32. All SRP operations are performed with little endian values. |
(0x27) | n_len / Little | uint8[n_len] | n | SRP modulus. All SRP operations are performed with little endian values. |
(0x47) | 32 / Little | uint8[32] | srp_salt | SRP user's salt. All SRP operations are performed with little endian values. |
(0x47) | 16 / Little | uint8[16] | crc_salt | A salt to be used in AuthLogonProof_Client.crc_hash. Can be all zeros. |
(0x57) | 1 / - | uint8 | security_flags | Bit pattern for optional authentication features. More than one feature can be used, and the fields are just appended in the bit pattern order from lowest first. See security_flag. tables below for specifics. If 0 the packet ends here. |
The offsets in parentheses are not fixed since they depend on the lengths of previous fields, but these fields are most often the default values so the offsets are presented as semi-fixed.
Offset | Size / Endianness | Type | Name | Description |
---|---|---|---|---|
0x00 | 4 / Little | uint32 | pin_grid_seed | Seed value for the PIN grid on the client. Only here if the two_factor_authentication field is true. |
0x04 | 16 / Little | uint8[16] | pin_salt | Salt value for the client. Only here if the two_factor_authentication field is true. |
Offset | Size / Endianness | Type | Name | Description |
---|---|---|---|---|
0x00 | 1 / - | uint8 | unknown0 | Unknown. Statically set to 0 in Mangos. |
0x01 | 1 / - | uint8 | unknown1 | Unknown. Statically set to 0 in Mangos. |
0x02 | 1 / - | uint8 | unknown2 | Unknown. Statically set to 0 in Mangos. |
0x03 | 1 / - | uint8 | unknown3 | Unknown. Statically set to 0 in Mangos. |
0x04 | 8 / - | uint64 | unknown4 | Unknown. Statically set to 0 in Mangos. |
Offset | Size / Endianness | Type | Name | Description |
---|---|---|---|---|
0x00 | 1 / - | uint8 | unknown0 | Statically set to 1 in Mangos. |