SID_AUTH_INFO
| Protocol | BNCS |
|---|---|
| Directions | Client → Server and Server → Client |
| Used by |
The client names its game, platform and version. The server replies with a session token and the version check to run.
Client → Server
The first message a client sends after the 0x01 protocol byte.
| Type | Field | Notes | Confidence |
|---|---|---|---|
UINT32 |
Protocol ID | 0. |
⚠️ Single source |
DWORD |
Platform code | IX86 for Windows. Four-character codes appear reversed on the wire. |
✅ Verified |
DWORD |
Product code | The game, such as STAR or W3XP. |
✅ Verified |
UINT32 |
Version byte | Changes with each game patch. The server uses it to choose which version-check files apply. | ✅ Verified |
UINT32 |
Product language | ⚠️ Single source | |
UINT32 |
Local IP address | The client's address as it sees it, which may be a private address behind NAT. | ⚠️ Single source |
UINT32 |
Time zone bias | Minutes from UTC. | ⚠️ Single source |
UINT32 |
Locale ID | A Windows locale ID. | ⚠️ Single source |
UINT32 |
Language ID | A Windows language ID. | ⚠️ Single source |
STRING |
Country abbreviation | For example USA. |
⚠️ Single source |
STRING |
Country name | For example United States. |
⚠️ Single source |
Server → Client
| Type | Field | Notes | Confidence |
|---|---|---|---|
UINT32 |
Logon type | Which password system the account logon uses. See the table below. | ✅ Verified |
UINT32 |
Server token | A random value for this session. The client mixes it into its CD-key and password hashes, so they can't be replayed. | ✅ Verified |
UINT32 |
UDP value | When this is not zero, the client runs its UDP connectivity test. Games keep Create and Join greyed out until that test succeeds. | ✅ Verified |
FILETIME |
Version-check file time | The time of the version-check MPQ, so a client that keeps a cached copy knows whether to download it again. | ✅ Verified |
STRING |
Version-check file name | The MPQ that holds the version-check code, such as ver-IX86-1.mpq. |
✅ Verified |
STRING |
Version-check formula | The instructions the client runs over its game files to produce the EXE hash sent in SID_AUTH_CHECK. |
✅ Verified |
VOID |
Server signature (128 bytes) | Warcraft III only. The client expects these bytes whatever the logon type, and rejects a reply without them. | ✅ Verified |
Logon types
| Value | Meaning | Confidence |
|---|---|---|
0x00 | X-SHA-1 ("Broken SHA-1") password hashing. StarCraft and Diablo II. | ✅ Verified |
0x01 | NLS (New Logon System), version 1. | ⚠️ Single source |
0x02 | NLS version 2. Warcraft III. | ✅ Verified |
Remarks
This message starts the modern Classic logon used by StarCraft 1.09 and later, Diablo II and Warcraft III. Older games (Diablo, StarCraft Shareware, Warcraft II) start with SID_STARTVERSIONING instead.
The UDP test. After this reply the server sends a UDP packet to the client's port 6112. Once that round trip completes, the client can create and join games. A server that sets the UDP value to zero, or never sends the UDP packet, leaves those buttons disabled.
Warcraft III's signature. Under NLS, Warcraft III checks the 128-byte signature against a key built into the game. Only Blizzard can produce a valid signature, which is why private Warcraft III servers need a modified client. This site does not host or link such modifications.
Appears in
Sources and credits
- Command Center: bnetccd session handling: reply layout tested with real StarCraft, Diablo II and Warcraft III clients
- Command Center: PROTOCOL-NOTES.md
- BNETDocs, SID_AUTH_INFO (client to server): documented by the original BNETDocs contributors, and edited 8 times since.
- BNETDocs, SID_AUTH_INFO (server to client): documented by the original BNETDocs contributors, and edited 11 times since.
This page is written in our own words. BNETDocs is credited for its research; none of its text is copied. See Credits.