bnet_protocol.h
上传用户:tany51
上传日期:2013-06-12
资源大小:1397k
文件大小:141k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /*
  2.  * Copyright (C) 1998  Mark Baysinger (mbaysing@ucsd.edu)
  3.  * Copyright (C) 1998,1999,2000  Ross Combs (rocombs@cs.nmsu.edu)
  4.  *
  5.  * This program is free software; you can redistribute it and/or
  6.  * modify it under the terms of the GNU General Public License
  7.  * as published by the Free Software Foundation; either version 2
  8.  * of the License, or (at your option) any later version.
  9.  *
  10.  * This program is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  * GNU General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program; if not, write to the Free Software
  17.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  18.  */
  19. #ifndef INCLUDED_BNET_PROTOCOL_TYPES
  20. #define INCLUDED_BNET_PROTOCOL_TYPES
  21. #ifdef JUST_NEED_TYPES
  22. # include "common/bn_type.h"
  23. #else
  24. # define JUST_NEED_TYPES
  25. # include "common/bn_type.h"
  26. # undef JUST_NEED_TYPES
  27. #endif
  28. /*
  29.  * The "bnet" protocol (previously known as "normal") that is used for
  30.  * chatting, ladder info, game listings, etc.
  31.  * FIXME: put the #define's into the PROTO section
  32.  */
  33. /******************************************************/
  34. typedef struct
  35. {
  36.     bn_short type;
  37.     bn_short size;
  38. } t_bnet_header PACKED_ATTR();
  39. /******************************************************/
  40. // [zap-zero] 20020529 - added support for war3 anongame routing packets
  41. /******************************************************/
  42. typedef struct
  43. {
  44.     bn_short type;
  45.     bn_short size;
  46. } t_w3route_header PACKED_ATTR();
  47. /******************************************************/
  48. /******************************************************/
  49. typedef struct
  50. {
  51.     t_bnet_header h;
  52. } t_bnet_generic PACKED_ATTR();
  53. /******************************************************/
  54. /******************************************************/
  55. typedef struct
  56. {
  57.     t_w3route_header h;
  58. } t_w3route_generic PACKED_ATTR();
  59. /******************************************************/
  60. /* for unhandled pmap packets */
  61. #define CLIENT_NULL 0xfeff
  62. /******************************************************/
  63. /*
  64. 14: recv class=w3route[0x0c] type=unknown[0x00f7] length=53
  65. 0000:   F7 1E 35 00 02 02 00 00   68 BF 0B 08 00 E0 17 01    ..5.....h.......
  66. 0010:   00 00 00 42 6C 61 63 6B   72 61 74 00 08 81 3E 0C    ...Blackrat...>.
  67. 0020:   00 20 00 00 00 02 00 17   E1 C0 A8 00 01 00 00 00    . ..............
  68. 0030:   00 00 00 00 00                                       .....
  69. */
  70. #define CLIENT_W3ROUTE_REQ 0x1ef7
  71. typedef struct
  72. {
  73. t_w3route_header h;
  74. bn_int unknown1;
  75. bn_int id; // unique id sent by server
  76. bn_byte unknown2;
  77. bn_short port;
  78. bn_int handle; // handle/descriptor for client <-> client communication
  79. // player name, ...
  80. } t_client_w3route_req PACKED_ATTR();
  81. /******************************************************/
  82. /******************************************************/
  83. /*
  84. f7 23 04 00
  85. */
  86. #define CLIENT_W3ROUTE_LOADINGDONE 0x23f7
  87. typedef struct
  88. {
  89. t_w3route_header h;
  90. } t_client_w3route_loadingdone PACKED_ATTR();
  91. /******************************************************/
  92. /******************************************************/
  93. /*
  94. f7 14 05 00 00
  95. */
  96. #define SERVER_W3ROUTE_READY 0x14f7
  97. typedef struct
  98. {
  99. t_w3route_header h;
  100. bn_byte unknown1;
  101. } t_server_w3route_ready PACKED_ATTR();
  102. /******************************************************/
  103. /******************************************************/
  104. /*
  105. f7 21 08 00 01 00 00 00 
  106. */
  107. #define CLIENT_W3ROUTE_ABORT 0x21f7
  108. typedef struct
  109. {
  110.         t_w3route_header h;
  111.         bn_int unknown1;       // count?
  112. } t_client_w3route_abort PACKED_ATTR();
  113. /******************************************************/
  114. /*
  115. f7 08 05 00 02
  116. */
  117. #define SERVER_W3ROUTE_LOADINGACK 0x08f7
  118. typedef struct
  119. {
  120. t_w3route_header h;
  121. bn_byte playernum;
  122. } t_server_w3route_loadingack PACKED_ATTR();
  123. /******************************************************/
  124. /******************************************************/
  125. /*
  126. f7 3b 06 00 09 00
  127. */
  128. #define CLIENT_W3ROUTE_CONNECTED 0x3bf7
  129. typedef struct
  130. {
  131. t_w3route_header h;
  132. bn_short unknown1;
  133. } t_client_w3route_connected PACKED_ATTR();
  134. /******************************************************/
  135. /******************************************************/
  136. /*
  137. f7 01 08 00 2e 85 2d 7b 
  138. */
  139. #define SERVER_W3ROUTE_ECHOREQ 0x01f7
  140. typedef struct
  141. {
  142. t_w3route_header h;
  143. bn_int ticks;
  144. } t_server_w3route_echoreq PACKED_ATTR();
  145. /******************************************************/
  146. #define CLIENT_W3ROUTE_ECHOREPLY 0x46f7
  147. /******************************************************/
  148. /*
  149. 13: recv class=w3route[0x0c] type=unknown[0x2ef7] length=107
  150. 0000:   F7 2E 6B 00 01 01 03 00   00 00 20 00 00 00 5C 01    ..k....... ....
  151. 0010:   00 00 00 05 00 00 00 00   00 00 00 00 00 00 00 1A    ................
  152. 0020:   04 00 00 00 00 00 00 00   00 00 00 05 00 00 00 00    ................
  153. 0030:   00 00 00 01 00 00 00 00   00 00 00 05 00 00 00 00    ................
  154. 0040:   00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00    ................
  155. 0050:   00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00    ................
  156. 0060:   00 00 00 00 00 00 00 00   00 00 00                   ...........
  157. */
  158. #define CLIENT_W3ROUTE_GAMERESULT 0x2ef7
  159. /*
  160.                            F7 3A-84 00 02 01 04 00 00 00  
  161. 0x0040   20 00 00 00 83 09 00 00-00 00 00 00 02 03 00 00  
  162. 0x0050   00 20 00 00 00 2C 01 00-00 00 00 00 00 5C 04 00 
  163. 0x0060   00 00 03 00 00 00 00 00-00 00 01 00 00 00 CC 0B  
  164. 0x0070   00 00 00 00 00 00 72 0B-00 00 0E 00 00 00 00 00   
  165. 0x0080   00 00 04 00 00 00 01 00-00 00 15 00 00 00 00 00   
  166. 0x0090   00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  
  167. 0x00A0   00 00 46 0A 00 00 2C 01-00 00 00 00 00 00 00 00   
  168. 0x00B0   00 00 00 00 00 00 00 00-00 00                     
  169.                            F7 3A-84 00 02 02 03 00 00 00 
  170. 0x0040   20 00 00 00 2C 01 00 00-00 00 00 00 01 04 00 00 
  171. 0x0050   00 20 00 00 00 83 09 00-00 00 00 00 00 5C 04 00  
  172. 0x0060   00 00 01 00 00 00 01 00-00 00 00 00 00 00 39 03  
  173. 0x0070   00 00 00 00 00 00 00 00-00 00 05 00 00 00 00 00  
  174. 0x0080   00 00 01 00 00 00 00 00-00 00 05 00 00 00 00 00  
  175. 0x0090   00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 
  176. 0x00A0   00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  
  177. 0x00B0   00 00 00 00 00 00 00 00-00 00                  
  178. */
  179. #define CLIENT_W3ROUTE_GAMERESULT_W3XP 0x3af7
  180. typedef struct
  181. {
  182. t_w3route_header h;
  183. bn_byte unknown1;
  184. bn_byte unknown2;
  185. bn_int result;
  186. // rest unknown
  187. } t_client_w3route_gameresult PACKED_ATTR();
  188. /******************************************************/
  189. // [zap-zero] what value is DRAW?
  190. #define W3_GAMERESULT_LOSS 0x00000003
  191. #define W3_GAMERESULT_WIN 0x00000004
  192. /******************************************************/
  193. /*
  194.                         f7 04 1e 00 07 00 00 b2 72 76   ..............rv
  195. 0040  ec cc cc 02 02 00 04 0b d9 e9 5f ac 00 00 00 00   .........._.....
  196. 0050  00 00 00 00                                       ....
  197. */
  198. #define SERVER_W3ROUTE_ACK 0x04f7
  199. typedef struct
  200. {
  201. t_w3route_header h;
  202. bn_byte unknown1; // 07
  203. bn_short unknown2; // 00 00
  204. bn_int unknown3; // random stuff
  205. bn_short unknown4; // cc cc
  206.         bn_byte playernum; // 1-4
  207. bn_short unknown5; // 0x0002
  208. bn_short port; // client port
  209. bn_int ip; // client ip
  210. bn_int unknown7; // 00 00 00 00
  211. bn_int unknown8; // 00 00 00 00
  212. } t_server_w3route_ack PACKED_ATTR();
  213. /******************************************************/
  214. #define SERVER_W3ROUTE_ACK_UNKNOWN3 0x484e2637
  215. /******************************************************/
  216. /*
  217.                         f7 06 3b 00 01 00 00 00 01 **   ........;......P
  218. 0040  ** ** ** ** ** ** ** 00 08 2d 09 9d 04 08 00 00   layer00..-......
  219. 0050  00 02 00 17 e0 [censored]  00 00 00 00 00 00 00   .......g........
  220. 0060  00 02 00 17 e0 [censored]  00 00 00 00 00 00 00   .......g........
  221. 0070  00 
  222. */
  223. #define SERVER_W3ROUTE_PLAYERINFO 0x06f7
  224. typedef struct
  225. {
  226. t_w3route_header h;
  227. bn_int handle;
  228. bn_byte playernum;
  229. // then:
  230. // opponent name
  231. // playerinfo2
  232. // playerinfo_addr (external addr)
  233. // playerinfo_addr (local lan addr)
  234. } t_server_w3route_playerinfo PACKED_ATTR();
  235. typedef struct
  236. {
  237. bn_byte unknown1; // 8 (length?)
  238. bn_int id; // id from FINDANONGAME_SEARCH packet
  239. bn_int race; // see defines
  240. } t_server_w3route_playerinfo2 PACKED_ATTR();
  241. #define SERVER_W3ROUTE_LEVELINFO 0x47f7
  242. typedef struct
  243. {
  244. t_w3route_header h;
  245. bn_byte numplayers;
  246. // then: levelinfo2 for each player
  247. } t_server_w3route_levelinfo PACKED_ATTR();
  248. typedef struct
  249. {
  250. bn_byte plnum;
  251. bn_byte unknown1; // 3 (length?)
  252. bn_byte level;
  253. bn_short unknown2;
  254. } t_server_w3route_levelinfo2 PACKED_ATTR();
  255. typedef struct
  256. {
  257. bn_short unknown1; // 2 
  258. bn_short port;
  259. bn_int ip;
  260. bn_int unknown2; // 0
  261. bn_int unknown3; // 0
  262. } t_server_w3route_playerinfo_addr PACKED_ATTR();
  263. typedef struct
  264. {
  265. t_w3route_header h; // f7 0a 04 00
  266. } t_server_w3route_startgame1 PACKED_ATTR();
  267. #define SERVER_W3ROUTE_STARTGAME1 0x0af7
  268. typedef struct
  269. {
  270. t_w3route_header h; // f7 0b 04 00
  271. } t_server_w3route_startgame2 PACKED_ATTR();
  272. #define SERVER_W3ROUTE_STARTGAME2 0x0bf7
  273. /*******************************************************/
  274. /*
  275.     ALL ANONGAME PACKET INFO (0x44ff) MOVED TO anongame_protocol.h 
  276.     [Omega]
  277. */
  278. /******************************************************/
  279. /*
  280. These two dumps are from the original unpatched Starcraft client:
  281.                           FF 05 28 00 01 00 00 00            ..(.....
  282. D1 43 88 AA DA 9D 1B 00   9A F7 69 AB 4A 41 32 30    .C........i.JA20
  283. 35 43 2D 30 34 00 6C 61   62 61 73 73 69 73 74 00    5C-04.labassist.
  284. FF 05 24 00 01 00 00 00   D1 43 88 AA DA 9D 1B 00    ..$......C......
  285. 9A F7 69 AB 42 4F 42 20   20 20 20 20 20 20 20 00    ..i.BOB        .
  286. 42 6F 62 00                                          Bob.
  287. ??? note it sends NO host and user strings
  288. FF 05 14 00 01 00 00 00   D8 94 F6 07 B3 2C 6E 02    .............,n.
  289. B4 E0 3B 6C                                          ..;l
  290. ??? sent right after it... request for session key?
  291.             FF 28 08 00   F6 0F 08 00                    .(......
  292. Diablo II 1.03 ... note it sends NO host and user strings
  293.       FF 05 14 00 01 00   00 00 D1 43 88 AA DA 9D      ...... ...C.... 
  294. 1B 00 9A F7 69 AB                                    ....i.
  295. */
  296. #define CLIENT_COMPINFO1 0x05ff
  297. typedef struct
  298. {
  299.     t_bnet_header h;
  300.     bn_int        reg_version;  /* 01 00 00 00 */
  301.     bn_int        reg_auth;     /* D1 43 88 AA */ /* looks like server ip */
  302.     bn_int        client_id;    /* DA 9D 1B 00 */
  303.     bn_int        client_token; /* 9A F7 69 AB */
  304.     /* host */ /* optional */
  305.     /* user */ /* optional */
  306. } t_client_compinfo1 PACKED_ATTR();
  307. #define CLIENT_COMPINFO1_REG_VERSION  0x00000001
  308. #define CLIENT_COMPINFO1_REG_AUTH     0xaa8843d1
  309. #define CLIENT_COMPINFO1_CLIENT_ID    0x001b9dda
  310. #define CLIENT_COMPINFO1_CLIENT_TOKEN 0xab69f79a
  311. /******************************************************/
  312. /******************************************************/
  313. /*
  314. CLIENT_COMPINFO2 was first seen in Starcraft 1.05
  315.                           FF 1E 24 00 01 00 00 00            ..$.....
  316. 01 00 00 00 D1 43 88 AA   1C B9 48 00 31 8A F2 89    .....C....H.1...
  317. 43 4C 4F 55 44 00 63 6C   6F 75 64 00                CLOUD.cloud.
  318. FF 1E 28 00 01 00 00 00   01 00 00 00 D1 43 88 AA    ..(..........C..
  319. DA 9D 1B 00 9A F7 69 AB   42 4F 42 20 20 20 20 20    ......i.BOB     
  320. 20 20 20 00 42 6F 62 00                                 .Bob.
  321. Diablo II 1.03 ... note it sends empty host and user strings
  322.       FF 1E 1A 00 01 00   00 00 01 00 00 00 D1 43      ............C 
  323. 88 AA DA 9D 1B 00 9A F7   69 AB 00 00                .......i...
  324. */
  325. #define CLIENT_COMPINFO2 0x1eff
  326. typedef struct
  327. {
  328.     t_bnet_header h;
  329.     bn_int        unknown1;     /* 01 00 00 00 */ /* ??? Version */
  330.     bn_int        reg_version;  /* 01 00 00 00 */
  331.     bn_int        reg_auth;     /* D1 43 88 AA */ /* looks like server ip */
  332.     bn_int        client_id;    /* 1C B9 48 00 */ /* DA 9D 1B 00 */
  333.     bn_int        client_token; /* 31 8A f2 89 */ /* 9A F7 69 AB */
  334.     /* host */
  335.     /* user */
  336. } t_client_compinfo2 PACKED_ATTR();
  337. #define CLIENT_COMPINFO2_UNKNOWN1     0x00000001
  338. #define CLIENT_COMPINFO2_REG_VERSION  0x00000001
  339. #define CLIENT_COMPINFO2_REG_AUTH     0xaa8843d1
  340. #define CLIENT_COMPINFO2_CLIENT_ID    0x001b9dda
  341. #define CLIENT_COMPINFO2_CLIENT_TOKEN 0xab69f79a
  342. /******************************************************/
  343. /******************************************************/
  344. /*
  345. Sent in response to CLIENT_COMPINFO[12] along with sessionkey
  346.                           FF 05 14 00 01 00 00 00            ........
  347. D1 43 88 AA 1C B9 48 00   31 8A F2 89                .C....H.1...
  348. FF 05 14 00 01 00 00 00   D8 94 F6 07 3F 62 6E 02    ............?bn.
  349. CA A4 0D 99                                          ....
  350. FF 05 14 00 01 00 00 00   D8 94 F6 07 B3 2C 6E 02    .............,n.
  351. B4 E0 3B 6C                                          ..;l
  352. To D2 Beta 1.02:
  353. FF 05 14 00 01 00 00 00   D1 43 88 AA 42 8D 2E 02    .........C..B...
  354. 2B 81 8C 2B                                          +..+
  355. */
  356. #define SERVER_COMPREPLY 0x05ff
  357. typedef struct
  358. {
  359.     t_bnet_header h;
  360.     bn_int        reg_version;  /* 01 00 00 00 */
  361.     bn_int        reg_auth;     /* D1 43 88 AA */ /* looks like server ip */
  362.     bn_int        client_id;    /* DA 9D 1B 00 */ /* 1C B9 48 00 */
  363.     bn_int        client_token; /* 9A F7 69 AB */ /* 31 8A F2 89 */
  364. } t_server_compreply PACKED_ATTR();
  365. #define SERVER_COMPREPLY_REG_VERSION  0x00000001
  366. #define SERVER_COMPREPLY_REG_AUTH     0xaa8843d1
  367. #define SERVER_COMPREPLY_CLIENT_ID    0x001b9dda
  368. #define SERVER_COMPREPLY_CLIENT_TOKEN 0xab69f79a
  369. /******************************************************/
  370. /******************************************************/
  371. /*
  372. Sent in repsonse to COMPINFO1 along with COMPINFOREPLY.
  373. Used for password hashing by the client.
  374. */
  375. #define SERVER_SESSIONKEY1 0x28ff
  376. typedef struct
  377. {
  378.     t_bnet_header h;
  379.     bn_int        sessionkey;
  380. } t_server_sessionkey1 PACKED_ATTR();
  381. /******************************************************/
  382. /******************************************************/
  383. /*
  384. Sent in response to COMPINFO2 along with COMPINFOREPLY.
  385. Used for password hashing by the client.
  386.                           FF 1D 0C 00 40 24 02 00            ....@$..
  387. 99 F3 FD 78                                          ...x
  388. FF 1D 0C 00 0C 67 08 00   7A 3C D8 75                .....g..z<.u
  389. FF 1D 0C 00 58 77 00 00   27 45 44 7A                ....Xw..'EDz
  390. FF 1D 0C 00 9D DF 01 00   7A 11 07 ED                ........z...
  391. */
  392. #define SERVER_SESSIONKEY2 0x1dff
  393. typedef struct
  394. {
  395.     t_bnet_header h;
  396.     bn_int        sessionnum;
  397.     bn_int        sessionkey;
  398. } t_server_sessionkey2 PACKED_ATTR();
  399. #define SERVER_SESSIONKEY2_UNKNOWN1 0x00004df3
  400. /******************************************************/
  401. /******************************************************/
  402. /*
  403. FF 12 3C 00 E0 28 02 E4   0A 37 BE 01 E0 50 A3 37    ..<..(...7...P.7
  404. D0 36 BE 01 A4 01 00 00   09 04 00 00 09 04 00 00    .6..............
  405. 09 04 00 00 65 6E 75 00   31 00 55 53 41 00 55 6E    ....enu.1.USA.Un
  406. 69 74 65 64 20 53 74 61   74 65 73 00                ited States.
  407. still original client, but at a later date
  408. FF 12 3C 00 60 C5 4B 8B   19 DE BE 01 60 55 B1 40    ..<.`.K.....`U.@
  409. E7 DD BE 01 A4 01 00 00   09 04 00 00 09 04 00 00    ................
  410. 09 04 00 00 65 6E 75 00   31 00 55 53 41 00 55 6E    ....enu.1.USA.Un
  411. 69 74 65 64 20 53 74 61   74 65 73 00                ited States.
  412. FF 12 3C 00 60 EA 02 23   F5 DE BE 01 60 7A 68 D8    ..<.`..#....`zh.
  413. C2 DE BE 01 A4 01 00 00   09 04 00 00 09 04 00 00    ................
  414. 09 04 00 00 65 6E 75 00   31 00 55 53 41 00 55 6E    ....enu.1.USA.Un
  415. 69 74 65 64 20 53 74 61   74 65 73 00                ited States.
  416.                                       FF 12 35 00                ..5.
  417. 20 BA B0 55 F2 7B BE 01   20 62 98 C5 3D 7C BE 01     ..U.{.. b..=|..
  418. E4 FD FF FF 12 04 00 00   12 04 00 00 12 04 00 00    ................
  419. 6B 6F 72 00 38 32 00 4B   4F 52 00 4B 6F 72 65 61    kor.82.KOR.Korea
  420. 00                                                   .
  421. FF 12 37 00 E0 D4 72 97   2F 8C BF 01 E0 3C 37 F9    ..7...r./....<7.
  422. 37 8C BF 01 C4 FF FF FF   07 04 00 00 07 04 00 00    7...............
  423. 07 04 00 00 64 65 75 00   34 39 00 44 45 55 00 47    ....deu.49.DEU.G
  424. 65 72 6D 61 6E 79 00                                 ermany.
  425. FF 12 36 00 20 F3 31 08   40 A7 BF 01 20 C3 BA CB    ..6. .1.@... ...
  426. 50 A7 BF 01 C4 FF FF FF   1D 04 00 00 1D 04 00 00    P...............
  427. 1D 04 00 00 73 76 65 00   34 36 00 53 57 45 00 53    ....sve.46.SWE.S
  428. 77 65 64 65 6E 00                                    weden.
  429. Diablo II 1.03
  430.       FF 12 39 00 A0 DB   AA 45 51 3F C0 01 A0 EB      ..9....EQ?.... 
  431. 56 17 A5 3F C0 01 A8 FD   FF FF 09 0C 00 00 09 0C    V..?............ 
  432. 00 00 09 0C 00 00 65 6E   61 00 36 31 00 41 55 53    ......ena.61.AUS 
  433. 00 41 75 73 74 72 61 6C   69 61 00                   .Australia.
  434. */
  435. #define CLIENT_COUNTRYINFO1 0x12ff
  436. typedef struct
  437. {
  438.     t_bnet_header h;
  439.     bn_long       systemtime; /* GMT */
  440.     bn_long       localtime;  /* time in local timezone */
  441.     bn_int        bias;       /* (gmt-local)/60  (using signed math) */
  442.     bn_int        langid1;    /* 09 04 00 00 */   /* 12 04 00 00 */
  443.     bn_int        langid2;    /* 09 04 00 00 */   /* 12 04 00 00 */
  444.     bn_int        langid3;    /* 09 04 00 00 */   /* 12 04 00 00 */
  445.     /* langstr */
  446.     /* countrycode (long distance phone) */
  447.     /* countryabbrev */
  448.     /* countryname */
  449. } t_client_countryinfo1 PACKED_ATTR();
  450. /******************************************************/
  451. /******************************************************/
  452. /*
  453.   First seen in Diablo II (and LoD) 1.09
  454. FF 50 34 00 00 00 00 00   36 38 58 49 50 58 32 44    .P4.....68XIPX2D
  455. 09 00 00 00 00 00 00 00   00 00 00 00 C4 FF FF FF    ................
  456. 07 04 00 00 07 04 00 00   44 45 55 00 47 65 72 6D    ........DEU.Germ
  457. 61 6E 79 00                                          any.
  458. FF 50 47 00 00 00 00 00   36 38 58 49 56 44 32 44    .PG.....68XIVD2D
  459. 09 00 00 00 00 00 00 00   00 00 00 00 20 FE FF FF    ............ ...
  460. 04 08 00 00 04 08 00 00   43 48 4E 00 50 65 6F 70    ........CHN.Peop
  461. 6C 65 27 73 20 52 65 70   75 62 6C 69 63 20 6F 66    le's Republic of
  462. 20 43 68 69 6E 61 00                                  China.
  463.  */
  464. #define CLIENT_COUNTRYINFO_109 0x50ff
  465. typedef struct
  466. {
  467.     t_bnet_header h;
  468.     bn_int        protocol;  /* 00 00 00 00 always zero */
  469.     bn_int        archtag;
  470.     bn_int        clienttag;
  471.     bn_int        versionid; /* 09 00 00 00 */ /* FIXME: what is this? */
  472.     bn_int        gamelang;  /* 00 00 00 00 always zero */
  473.     bn_int        localip;  /* 00 00 00 00 always zero */
  474.     bn_int        bias;      /* (gmt-local)/60  (using signed math) */
  475.     bn_int        lcid;      /* Win32 LCID */
  476.     bn_int        langid;    /* Win32 LangID */
  477.     /* langstr */
  478.     /* countryname */
  479. } t_client_countryinfo_109 PACKED_ATTR();
  480. /******************************************************/
  481. /******************************************************/
  482. /*
  483. FF 2A 20 00 91 4F 93 DF   57 74 B5 C8 48 0F 4D 9B    .* ..O..Wt..H.M.
  484. A2 28 A6 03 C1 D9 DA 11   42 69 6D 42 6F 3A 29 00    .(......BimBo:).
  485. */
  486. #define CLIENT_CREATEACCTREQ1 0x2aff
  487. typedef struct
  488. {
  489.     t_bnet_header h;
  490.     bn_int        password_hash1[5]; /* hash of lowercase password w/o null */
  491.     /* player name */
  492. } t_client_createacctreq1 PACKED_ATTR();
  493. /******************************************************/
  494. /******************************************************/
  495. /*
  496.                           FF 2A 18 00 01 00 00 00            .*......
  497. 13 00 00 00 78 52 82 02   00 00 00 00 00 00 00 00    ................
  498. ---120 82 130 2---
  499. FF 2A 08 00 01 00 00 00                              .*......
  500. */
  501. #define SERVER_CREATEACCTREPLY1 0x2aff
  502. typedef struct
  503. {
  504.     t_bnet_header h;
  505.     bn_int        result;
  506. } t_server_createacctreply1 PACKED_ATTR();
  507. #define SERVER_CREATEACCTREPLY1_RESULT_OK 0x00000001
  508. #define SERVER_CREATEACCTREPLY1_RESULT_NO 0x00000000
  509. /******************************************************/
  510. /******************************************************/
  511. /*
  512.                           FF 2B 20 00 01 00 00 00            .+ .....
  513. 00 00 00 00 4D 00 00 00   0E 01 00 00 20 00 00 00    ....M....... ...
  514. CE 01 00 00 DD 07 00 00                              ........
  515.    FF 2B 20 00 01 00 00   00 00 00 00 00 06 00 00     .+ ............
  516. 00 72 01 00 00 40 00 00   00 A9 07 00 00 FF 07 00    .r...@..........
  517. 00                                                   .
  518. from Starcraft 1.05
  519. FF 2B 20 00 01 00 00 00   00 00 00 00 06 00 00 00    .+ .............
  520. 7C 01 00 00 20 00 00 00   00 02 00 00 FF 07 00 00    |... ...........
  521. */
  522. #define CLIENT_UNKNOWN_2B 0x2bff /* FIXME: what is this? */
  523. typedef struct
  524. {
  525.     t_bnet_header h;
  526.     bn_int        unknown1; /* 01 00 00 00 */ /* 01 00 00 00 */
  527.     bn_int        unknown2; /* 00 00 00 00 */ /* 00 00 00 00 */
  528.     bn_int        unknown3; /* 4D 00 00 00 */ /* 06 00 00 00 */
  529.     bn_int        unknown4; /* 0E 01 00 00 */ /* 72 01 00 00 */
  530.     bn_int        unknown5; /* 20 00 00 00 */ /* 40 00 00 00 */
  531.     bn_int        unknown6; /* CE 01 00 00 */ /* A9 07 00 00 */
  532.     bn_int        unknown7; /* DD 07 00 00 */ /* FF 07 00 00 */
  533. } t_client_unknown_2b PACKED_ATTR();
  534. #define CLIENT_UNKNOWN_2B_UNKNOWN1 0x00000001
  535. #define CLIENT_UNKNOWN_2B_UNKNOWN2 0x00000000
  536. #define CLIENT_UNKNOWN_2B_UNKNOWN3 0x0000004d
  537. #define CLIENT_UNKNOWN_2B_UNKNOWN4 0x0000010e
  538. #define CLIENT_UNKNOWN_2B_UNKNOWN5 0x00000020
  539. #define CLIENT_UNKNOWN_2B_UNKNOWN6 0x000001ce
  540. #define CLIENT_UNKNOWN_2B_UNKNOWN7 0x000007dd
  541. /******************************************************/
  542. /******************************************************/
  543. /*
  544. later replaced by progident2 and the authreq packets
  545.                           FF 06 14 00 36 38 58 49            ....68XI
  546. 50 58 45 53 BB 00 00 00   00 00 00 00                PXES........
  547. sent by 1.05 Starcraft
  548. FF 06 14 00 36 38 58 49   52 41 54 53 BD 00 00 00    ....68XIRATS....
  549. 00 00 00 00                                          ....
  550. Diablo II 1.03
  551.       FF 06 14 00 36 38   58 49 56 44 32 44 03 00      ....68XIVD2D.. 
  552. 00 00 00 00 00 00                                    ......
  553. */
  554. #define CLIENT_PROGIDENT 0x06ff
  555. typedef struct
  556. {
  557.     t_bnet_header h;
  558.     bn_int        archtag;
  559.     bn_int        clienttag; /* see tag.h */
  560.     bn_int        versionid; /* FIXME: how does the versionid work? */
  561.     bn_int        unknown1;  /* FIXME: always zero? spawn flag? */
  562. } t_client_progident PACKED_ATTR();
  563. /******************************************************/
  564. /******************************************************/
  565. /*
  566. These formulas are for authenticating the client version.
  567.                           FF 06 5A 00 00 86 BA E3            ..Z.....
  568. 09 28 BC 01 49 58 38 36   76 65 72 32 2E 6D 70 71    .(..IX86ver2.mpq
  569. 00 41 3D 32 30 31 39 34   39 38 38 39 39 20 42 3D    .A=2019498899 B=
  570. 33 34 32 33 32 39 32 33   39 34 20 43 3D 31 37 31    3423292394 C=171
  571. 39 30 31 31 32 32 32 20   34 20 41 3D 41 5E 53 20    9011222 4 A=A^S
  572. 42 3D 42 2D 43 20 43 3D   43 5E 41 20 41 3D 41 5E    B=B-C C=C^A A=A^
  573. 42 00                                                B.
  574. FF 06 59 00 00 C1 12 EC   09 28 BC 01 49 58 38 36    ..Y......(..IX86
  575. 76 65 72 35 2E 6D 70 71   00 41 3D 31 38 37 35 35    ver5.mpq.A=18755
  576. 39 31 33 34 31 20 42 3D   32 34 39 31 30 39 39 38    91341 B=24910998
  577. 30 39 20 43 3D 36 33 34   38 35 36 36 30 34 20 34    09 C=634856604 4
  578. 20 41 3D 41 2D 53 20 42   3D 42 5E 43 20 43 3D 43     A=A-S B=B^C C=C
  579. 2B 41 20 41 3D 41 5E 42   00                         +A A=A^B.
  580. FF 06 5A 00 00 C1 12 EC   09 28 BC 01 49 58 38 36    ..Z......(..IX86
  581. 76 65 72 35 2E 6D 70 71   00 41 3D 31 37 31 32 39    ver5.mpq.A=17129
  582. 34 38 34 32 36 20 42 3D   33 36 30 30 30 33 30 36    48426 B=36000306
  583. 30 37 20 43 3D 33 33 39   30 34 31 37 39 35 39 20    07 C=3390417959 
  584. 34 20 41 3D 41 2D 53 20   42 3D 42 5E 43 20 43 3D    4 A=A-S B=B^C C=
  585. 43 2D 41 20 41 3D 41 2D   42 00                      C-A A=A-B.
  586. FF 06 5A 00 00 3A 7F E8   09 28 BC 01 49 58 38 36    ..Z..:...(..IX86
  587. 76 65 72 34 2E 6D 70 71   00 41 3D 31 31 38 36 39    ver4.mpq.A=11869
  588. 35 38 31 34 31 20 42 3D   31 33 37 37 34 34 31 34    58141 B=13774414
  589. 35 37 20 43 3D 31 37 37   32 37 38 37 37 30 35 20    57 C=1772787705
  590. 34 20 41 3D 41 5E 53 20   42 3D 42 5E 43 20 43 3D    4 A=A^S B=B^C C=
  591. 43 2B 41 20 41 3D 41 5E   42 00                      C+A A=A^B.
  592. FF 06 5A 00 00 56 CD F6   09 28 BC 01 49 58 38 36    ..Z..V...(..IX86
  593. 76 65 72 37 2E 6D 70 71   00 41 3D 31 30 32 36 30    ver7.mpq.A=10260
  594. 34 34 33 35 34 20 42 3D   34 31 33 32 36 33 30 37    44354 B=41326307
  595. 31 31 20 43 3D 32 33 30   32 34 31 31 33 32 38 20    11 C=2302411328
  596. 34 20 41 3D 41 5E 53 20   42 3D 42 5E 43 20 43 3D    4 A=A^S B=B^C C=
  597. 43 5E 41 20 41 3D 41 2B   42 00                      C^A A=A+B.
  598. */
  599. #define SERVER_AUTHREQ1 0x06ff
  600. typedef struct
  601. {
  602.     t_bnet_header h;
  603.     bn_long       timestamp; /* FIXME: file modification time? */
  604.     /* versioncheck filename */
  605.     /* equation */
  606. } t_server_authreq1 PACKED_ATTR();
  607. /******************************************************/
  608. /******************************************************/
  609. /*
  610.   First seen in Diablo II (and LoD) 1.09
  611. FF 50 65 00 00 00 00 00   36 1A 6C 45 76 BC 00 00    .Pe.....6.lEv...
  612. 00 48 A6 EF 09 28 BC 01   49 58 38 36 76 65 72 36    .H...(..IX86ver6
  613. 2E 6D 70 71 00 41 3D 33   38 34 35 35 38 31 36 33    .mpq.A=384558163
  614. 34 20 42 3D 38 38 30 38   32 33 35 38 30 20 43 3D    4 B=880823580 C=
  615. 31 33 36 33 39 33 37 31   30 33 20 34 20 41 3D 41    1363937103 4 A=A
  616. 2D 53 20 42 3D 42 2D 43   20 43 3D 43 2D 41 20 41    -S B=B-C C=C-A A
  617. 3D 41 2D 42 00                                       =A-B.
  618.                           FF 50 65 00 00 00 00 00            .Pe.....
  619. 30 4B C1 33 10 EB 09 00   00 A5 C4 DD 09 28 BC 01    0K.3.........(..
  620. 49 58 38 36 76 65 72 30   2E 6D 70 71 00 41 3D 31    IX86ver0.mpq.A=1
  621. 34 33 32 36 36 32 34 37   38 20 42 3D 36 35 32 32    432662478 B=6522
  622. 37 38 36 32 35 20 43 3D   31 37 36 31 35 31 35 38    78625 C=17615158
  623. 36 39 20 34 20 41 3D 41   5E 53 20 42 3D 42 2B 43    69 4 A=A^S B=B+C
  624. 20 43 3D 43 2B 41 20 41   3D 41 5E 42 00              C=C+A A=A^B.   
  625. */
  626. #define SERVER_AUTHREQ_109 0x50ff
  627. typedef struct
  628. {
  629.     t_bnet_header h;
  630.     bn_int        logontype;  /* 00 00 00 00 always zero */
  631.     bn_int        sessionkey;
  632.     bn_int        sessionnum;
  633.     bn_long       timestamp;
  634.     /* versioncheck filename */
  635.     /* equation */
  636. } t_server_authreq_109 PACKED_ATTR();
  637. #define SERVER_AUTHREQ_109_LOGONTYPE 0x0000000
  638. #define SERVER_AUTHREQ_109_LOGONTYPE_W3 0x00000001
  639. #define SERVER_AUTHREQ_109_LOGONTYPE_W3XP 0x00000002
  640. /******************************************************/
  641. /* ADDED BY UNDYING SOULZZ 4/3/02 */
  642. #define VERSIONTAG_WARCRAFT3_113 "WAR3_113"
  643. /******************************************************/
  644. /*
  645. FF 07 40 00 36 38 58 49   52 41 54 53 BD 00 00 00    ..@.68XIRATS....
  646. 00 05 00 01 1E 88 D7 08   73 74 61 72 63 72 61 66    ........starcraf
  647. 74 2E 65 78 65 20 30 33   2F 30 38 2F 39 39 20 32    t.exe 03/08/99 2
  648. 32 3A 34 31 3A 35 30 20   31 30 34 32 34 33 32 00    2:41:50 1042432.
  649. sent by the 1.05 Starcraft
  650. FF 07 40 00 36 38 58 49   52 41 54 53 BD 00 00 00    ..@.68XIRATS....
  651. 00 05 00 01 AE AC DE 87   73 74 61 72 63 72 61 66    ........starcraf
  652. 74 2E 65 78 65 20 30 33   2F 30 38 2F 39 39 20 32    t.exe 03/08/99 2
  653. 32 3A 34 31 3A 35 30 20   31 30 34 32 34 33 32 00    2:41:50 1042432.
  654. sent by the 1.08alpha Brood War (Starcraft game) in response to
  655. A=2521522835 B=3428392135 C=218673704 4 A=A^S B=B-C C=C+A A=A-B
  656. with IX86ver1.mpq
  657. FF 07 40 00 36 38 58 49   52 41 54 53 C3 00 00 00    ..@.68XIRATS....
  658. 01 08 00 01 A1 52 CE FE   73 74 61 72 63 72 61 66    .....R..starcraf
  659. 74 2E 65 78 65 20 31 32   2F 32 38 2F 30 30 20 31    t.exe 12/28/00 1
  660. 31 3A 32 38 3A 35 32 20   31 30 38 32 33 36 38 00    1:28:52 1082368.
  661. sent by the 1.07 Diablo
  662. FF 07 3C 00 36 38 58 49   4C 54 52 44 26 00 00 00    ..<.68XILTRD&...
  663. 01 06 05 62 8C 56 E6 21   64 69 61 62 6C 6F 2E 65    ...b.V.!diablo.e
  664. 78 65 20 30 39 2F 31 37   2F 39 38 20 31 38 3A 30    xe 09/17/98 18:0
  665. 30 3A 34 30 20 37 36 30   33 32 30 00                0:40 760320.
  666. FF 07 45 00 36 38 58 49   4E 42 32 57 4B 00 00 00    ..E.68XINB2WK...
  667. 99 00 00 02 3D 51 C4 AA   57 61 72 63 72 61 66 74    ....=Q..Warcraft
  668. 20 49 49 20 42 4E 45 2E   65 78 65 20 31 30 2F 31     II BNE.exe 10/1
  669. 35 2F 39 39 20 30 30 3A   33 37 3A 35 34 20 37 30    5/99 00:37:54 70
  670. 34 35 31 32 00                                       4512.           
  671. sent by the 1.03 Diablo II
  672.                           FF 07 3A 00 36 38 58 49            ..:.68XI
  673. 56 44 32 44 03 00 00 00   00 03 00 01 47 3E 26 73    VD2D........G>&s
  674. 47 61 6D 65 2E 65 78 65   20 30 38 2F 30 35 2F 30    Game.exe 08/05/0
  675. 30 20 30 31 3A 34 32 3A   32 38 20 32 39 34 39 31    0 01:42:28 29491
  676. 32 00                                                2.
  677. */
  678. #define CLIENT_AUTHREQ1 0x07ff
  679. typedef struct
  680. {
  681.     t_bnet_header h;
  682.     bn_int        archtag;
  683.     bn_int        clienttag;
  684.     bn_int        versionid;
  685.     bn_int        gameversion;
  686.     bn_int        checksum;
  687.     /* executable info */
  688. } t_client_authreq1 PACKED_ATTR();
  689. /******************************************************/
  690. /******************************************************/
  691. /*
  692.                           FF 07 0A 00 02 00 00 00            ........
  693. 00 00                                                ..
  694. FF 07 0A 00 02 00 00 00   00 00                      ..........
  695. */
  696. #define SERVER_AUTHREPLY1 0x07ff
  697. typedef struct
  698. {
  699.     t_bnet_header h;
  700.     bn_int        message;
  701.     /* filename */
  702.     /* unknown */
  703. } t_server_authreply1 PACKED_ATTR();
  704. #define SERVER_AUTHREPLY1_MESSAGE_BADVERSION  0x00000000
  705. #define SERVER_AUTHREPLY1_MESSAGE_UPDATE      0x00000001 /* initiate auto-update */
  706. #define SERVER_AUTHREPLY1_MESSAGE_OK          0x00000002
  707. /* anything other than these is considered to be ok */
  708. /* Hmm... Blizzard messed up and changed the meanings of the flags in LoD 108.
  709.  * they seem to be moving to "zero is success" so they can have multiple error
  710.  * messages.  109 fixes it because they introduced new packets to replace
  711.  * these. */
  712. #define SERVER_AUTHREPLY1_D2XP_MESSAGE_OK         0x00000001
  713. #define SERVER_AUTHREPLY1_D2XP_MESSAGE_BADVERSION 0x00000000 /* Battle.net is unable to properly identify you application version. */
  714. #define SERVER_AUTHREPLY1_D2XP_MESSAGE_UPDATE     0x00000000 /* FIXME: there doesn't seem to be an update reply... should we send a different packet or should we be appending a string to this reply or .... */
  715. #define SERVER_AUTHREPLY1_D2XP_MESSAGE_BADKEY     0x00000002 /* This application was installed with a CD key which is not authorized Battle.net use. */
  716. /* anything 3 and higher seems to be considered the same as BADVERSION */
  717. /******************************************************/
  718. /******************************************************/
  719. /*
  720.   First seen in Diablo II (and LoD) 1.09
  721. FF 51 09 00 00 00 00 00   00                         .Q.......       
  722. */
  723. #define SERVER_AUTHREPLY_109 0x51ff
  724. typedef struct
  725. {
  726.     t_bnet_header h;
  727.     bn_int        message;
  728.     /* message string? */
  729. } t_server_authreply_109 PACKED_ATTR();
  730. #define SERVER_AUTHREPLY_109_MESSAGE_OK         0x00000000
  731. #define SERVER_AUTHREPLY_109_MESSAGE_UPDATE     0x00000100
  732. #define SERVER_AUTHREPLY_109_MESSAGE_BADVERSION 0x00000101
  733. /* we should check the first 10 values or so to see what they mean */
  734. /******************************************************/
  735. /******************************************************/
  736. /*
  737.   First seen in Diablo II (and LoD) 1.09
  738. FF 51 67 00 C9 88 DA 42   00 09 00 01 46 97 62 9A    .Qg....B....F.b.
  739. 01 00 00 00 00 00 00 00   10 00 00 00 06 00 00 00    ................
  740. A5 E7 39 00 00 00 00 00   ED CD 4F F7 6A 7A 4F 96    ..9.......O.jzO.
  741. 85 7A 2D A2 7F 1F B1 D6   81 B3 8D 50 47 61 6D 65    .z-........PGame
  742. 2E 65 78 65 20 30 38 2F   31 36 2F 30 31 20 32 33    .exe 08/16/01 23
  743. 3A 30 34 3A 34 30 20 34   32 34 30 36 37 00 74 73    :04:40 424067.ts
  744. 69 6E 67 68 75 61 00                                 inghua.         
  745. */
  746. #define CLIENT_AUTHREQ_109 0x51ff
  747. typedef struct
  748. {
  749.     t_bnet_header h;
  750.     bn_int        ticks;
  751.     bn_int        gameversion;
  752.     bn_int        checksum;
  753.     bn_int        cdkey_number; /* count of cdkeys, d2 = 1, lod = 2 */
  754.     bn_int        u1; /* 00 00 00 00 */
  755.     /* cdkey info(s) */
  756.     /* executable info */
  757.     /* cdkey owner */
  758. } t_client_authreq_109 PACKED_ATTR();
  759. /* values are the same as in CLIENT_AUTHREQ1 */
  760. typedef struct
  761. {
  762.     bn_int len;
  763.     bn_int type;
  764.     bn_int checksum;
  765.     bn_int u1;
  766.     bn_int hash[5];
  767. } t_cdkey_info PACKED_ATTR();
  768. /******************************************************/
  769. /******************************************************/
  770. /* Batle.net used to send requests for registry and email info.
  771.    Thanks to bnetanon, I have a dump of these old packets.
  772. */
  773. /*
  774. FF 18 41 00 00 00 00 00   01 00 00 80 53 6F 66 74    ..A.........Soft
  775. 77 61 72 65 5C 4D 69 63   72 6F 73 6F 66 74 5C 4D    wareMicrosoftM
  776. 53 20 53 65 74 75 70 20   28 41 43 4D 45 29 5C 55    S Setup (ACME)U
  777. 73 65 72 20 49 6E 66 6F   00 44 65 66 4E 61 6D 65    ser Info.DefName
  778. 00                                                   .
  779. FF 18 48 00 00 00 00 00   01 00 00 80 53 6F 66 74    ..H.........Soft
  780. 77 61 72 65 5C 4D 69 63   72 6F 73 6F 66 74 5C 4D    wareMicrosoftM
  781. 65 64 69 61 50 6C 61 79   65 72 5C 43 6F 6E 74 72    ediaPlayerContr
  782. 6F 6C 5C 50 6C 61 79 42   61 72 00 43 6C 72 42 61    olPlayBar.ClrBa
  783. 63 6B 43 6F 6C 6F 72 00                              ckColor.
  784. */
  785. #define SERVER_REGSNOOPREQ 0x18ff
  786. typedef struct
  787. {
  788.     t_bnet_header h;
  789.     bn_int        unknown1; /* 00 00 00 00 */ /* sequence match like in other packets? */
  790.     bn_int        hkey;
  791.     /* registry key */
  792.     /* value name */
  793. } t_server_regsnoopreq PACKED_ATTR();
  794. #define SERVER_REGSNOOPREQ_UNKNOWN1 0x00000000
  795. #define SERVER_REGSNOOPREQ_HKEY_CLASSES_ROOT        0x80000000
  796. #define SERVER_REGSNOOPREQ_HKEY_CURRENT_USER        0x80000001
  797. #define SERVER_REGSNOOPREQ_HKEY_LOCAL_MACHINE       0x80000002
  798. #define SERVER_REGSNOOPREQ_HKEY_USERS               0x80000003
  799. #define SERVER_REGSNOOPREQ_HKEY_PERFORMANCE_DATA    0x80000004
  800. #define SERVER_REGSNOOPREQ_HKEY_CURRENT_CONFIG      0x80000005
  801. #define SERVER_REGSNOOPREQ_HKEY_DYN_DATA            0x80000006
  802. #define SERVER_REGSNOOPREQ_HKEY_PERFORMANCE_TEXT    0x80000050
  803. #define SERVER_REGSNOOPREQ_HKEY_PERFORMANCE_NLSTEXT 0x80000060
  804. #define SERVER_REGSNOOPREQ_REGKEY "Software\Microsoft\MS Setup (ACME)\User Info"
  805. #define SERVER_REGSNOOPREQ_REGVALNAME "DefName"
  806. /******************************************************/
  807. /******************************************************/
  808. /* If the key exists, the client send this back */
  809. /*
  810. FF 18 0C 00 00 00 00 00   42 6F 62 00                ........Bob.
  811. FF 18 0C 00 00 00 00 00   A0 9C A0 00                ............
  812. */
  813. #define CLIENT_REGSNOOPREPLY 0x18ff
  814. typedef struct
  815. {
  816.     t_bnet_header h;
  817.     bn_int        unknown1; /* 00 00 00 00 */ /* same as request? */
  818.     /* registry value (string, dword, or binary */
  819. } t_client_regsnoopreply PACKED_ATTR();
  820. /******************************************************/
  821. /******************************************************/
  822. /*
  823. FF 07 0A 00 02 00 00 00   00 00                      ..........
  824. */
  825. #define CLIENT_ICONREQ 0x2dff
  826. typedef struct
  827. {
  828.     t_bnet_header h;
  829. } t_client_iconreq PACKED_ATTR();
  830. /******************************************************/
  831. /******************************************************/
  832. /*
  833.                           FF 2D 16 00 76 34 1F 8F            .-..v4..
  834. C0 D6 BD 01 69 63 6F 6E   73 2E 62 6E 69 00          ....icons.bni.
  835. FF 2D 16 00 00 77 D0 01   C7 B1 BE 01 69 63 6F 6E    .-...w......icon
  836. 73 2E 62 6E 69 00                                    s.bni.
  837. */
  838. #define SERVER_ICONREPLY 0x2dff
  839. typedef struct
  840. {
  841.     t_bnet_header h;
  842.     bn_long       timestamp; /* file modification time? */
  843.     /* filename */
  844. } t_server_iconreply PACKED_ATTR();
  845. /******************************************************/
  846. /******************************************************/
  847. #define CLIENT_LADDERSEARCHREQ 0x2fff
  848. typedef struct
  849. {
  850.     t_bnet_header h;
  851.     bn_int        clienttag;
  852.     bn_int        id;   /* (AKA ladder type) 1==standard, 3==ironman */
  853.     bn_int        type; /* (AKA ladder sort) */
  854.     /* player name */
  855. } t_client_laddersearchreq PACKED_ATTR();
  856. #define CLIENT_LADDERSEARCHREQ_ID_STANDARD       0x00000001
  857. #define CLIENT_LADDERSEARCHREQ_ID_IRONMAN        0x00000003
  858. #define CLIENT_LADDERSEARCHREQ_TYPE_HIGHESTRATED 0x00000000
  859. #define CLIENT_LADDERSEARCHREQ_TYPE_MOSTWINS     0x00000002
  860. #define CLIENT_LADDERSEARCHREQ_TYPE_MOSTGAMES    0x00000003
  861. /******************************************************/
  862. /******************************************************/
  863. #define SERVER_LADDERSEARCHREPLY 0x2fff
  864. typedef struct /* FIXME: how does client know how many names?
  865.   do we send separate replies for each name in the request? */
  866. {
  867.     t_bnet_header h;
  868.     bn_int        rank; /* 0 means 1st, etc */
  869. } t_server_laddersearchreply PACKED_ATTR();
  870. #define SERVER_LADDERSEARCHREPLY_RANK_NONE 0xffffffff
  871. /******************************************************/
  872. /******************************************************/
  873. /*
  874.                           FF 30 1C 00 00 00 00 00            .0......
  875. 32 37 34 34 37 37 32 39   31 34 38 32 38 00 63 6C    2744772914828.cl
  876. 6F 75 64 00                                          oud.
  877. */
  878. #define CLIENT_CDKEY 0x30ff
  879. typedef struct
  880. {
  881.     t_bnet_header h;
  882.     bn_int        spawn; /* FIXME: not sure if this is correct, but cdkey2 does it this way */
  883.     /* cd key */
  884.     /* owner name */ /* Was this always here? */
  885. } t_client_cdkey PACKED_ATTR();
  886. #define CLIENT_CDKEY_UNKNOWN1 0x00000000
  887. /******************************************************/
  888. /******************************************************/
  889. /*
  890.                           FF 30 0E 00 01 00 00 00            .0......
  891. 63 6C 6F 75 64 00                                    cloud.
  892. */
  893. #define SERVER_CDKEYREPLY 0x30ff
  894. typedef struct
  895. {
  896.     t_bnet_header h;
  897.     bn_int        message;
  898.     /* owner name */
  899. } t_server_cdkeyreply PACKED_ATTR();
  900. #define SERVER_CDKEYREPLY_MESSAGE_OK       0x00000001
  901. #define SERVER_CDKEYREPLY_MESSAGE_BAD      0x00000002
  902. #define SERVER_CDKEYREPLY_MESSAGE_WRONGAPP 0x00000003
  903. #define SERVER_CDKEYREPLY_MESSAGE_ERROR    0x00000004 /* disabled */
  904. #define SERVER_CDKEYREPLY_MESSAGE_INUSE    0x00000005
  905. /* (any other value seems to correspond to ok) */
  906. /******************************************************/
  907. /******************************************************/
  908. /*
  909. FF 36 34 00 00 00 00 00   0D 00 00 00 01 00 00 00    .64.............
  910. B5 AE 23 00 50 E5 D5 C0   DB 55 1E 38 0A F5 58 B9    ..#.P....U.8..X.
  911. 47 64 C6 C2 9F BB FF B8   81 E7 EB EC 1B 13 C6 38    Gd.............8
  912. 52 6F 62 00                                          Rob.
  913. FF 36 34 00 00 00 00 00   0D 00 00 00 01 00 00 00    .64.............
  914. 7F D7 00 00 90 64 77 2F   D7 5B 42 38 1F A1 A2 6F    .....dw/.[B8...o
  915. E8 FA BE F8 B6 0B BA 0F   CA 64 3A 17 14 56 83 AB    .........d:..V..
  916. 42 6F 62 00                                          Bob.
  917. FF 36 35 00 00 00 00 00   10 00 00 00 04 00 00 00    .65.............
  918. 0D 43 03 00 7A 11 07 ED   7C 9E 1E 38 E5 87 8B 3B    .C..z...|..8...;
  919. 9C 19 91 D9 0D 10 FC C1   C0 86 8C 8D DA A4 45 0B    ..............E.
  920. XX XX XX XX 00                                       XXXX.
  921. FF 36 34 00 00 00 00 00   10 00 00 00 04 00 00 00    .64.............
  922. 70 F9 02 00 58 F9 B6 E6   38 49 5C 38 38 9C 31 E4    p...X...8I88.1.
  923. 1D 3D 40 05 66 AD 4C C8   1D 12 8E 49 9E 60 1A CB    .=@.f.L....I.`..
  924. 42 6F 62 00                                          Bob.
  925. */
  926. #define CLIENT_CDKEY2 0x36ff
  927. typedef struct
  928. {
  929.     t_bnet_header h;
  930.     bn_int        spawn;
  931.     bn_int        keylen; /* without terminating NUL */
  932.     bn_int        productid;
  933.     bn_int        keyvalue1;
  934.     bn_int        sessionkey;
  935.     bn_int        ticks;
  936.     bn_int        key_hash[5];
  937.     /* owner name */
  938. } t_client_cdkey2 PACKED_ATTR();
  939. #define CLIENT_CDKEY2_SPAWN_TRUE  0x00000001
  940. #define CLIENT_CDKEY2_SPAWN_FALSE 0x00000000
  941. /******************************************************/
  942. /******************************************************/
  943. /*
  944. From Diablo II 1.08?
  945.                           FF 42 43 00 AB 4C A4 3B            .BC..L.;
  946. 01 00 00 00 00 00 00 00   10 00 00 00 06 00 00 00    ................
  947. XX 60 12 00 00 00 00 00   5D 82 82 C4 F4 8F D0 91    X`......].......
  948. E1 5B AB 95 D9 EE EF 18   44 3E F1 C9 XX XX XX XX    .[......D>..XXXX
  949. XX XX XX XX XX XX XX XX   XX XX 00                   XXXXXXXXXX.
  950. FF 42 44 00 17 78 42 77   01 00 00 00 00 00 00 00    .BD..xBw........
  951. 10 00 00 00 06 00 00 00   XX F3 10 00 00 00 00 00    ........X.......
  952. A8 29 8B C4 41 BD 33 AB   74 4C 1F 1E 5C XX CA 83    .)..A.3.tL..X..
  953. 7F E5 36 14 XX XX XX XX   XX XX XX XX XX XX XX XX    ..6.XXXXXXXXXXXX
  954. XX XX XX 00                                          XXX.
  955. FF 42 44 00 C6 25 A1 3B   01 00 00 00 00 00 00 00    .BD..%.;........
  956. 10 00 00 00 06 00 00 00   XX F3 10 00 00 00 00 00    ........X.......
  957. C4 3F FB 05 94 0C AC D4   3B 63 B1 90 E4 XX 53 B9    .?......;c...XS.
  958. 70 C3 6F 2E XX XX XX XX   XX XX XX XX XX XX XX XX    p.o.XXXXXXXXXXXX
  959. XX XX XX 00                                          XXX.
  960. */
  961. #define CLIENT_CDKEY3 0x42ff
  962. typedef struct
  963. {
  964.     t_bnet_header h;
  965.     bn_int        unknown1; /* FIXME: some kind of salt? */
  966.     bn_int        unknown2; /* 01 00 00 00 */
  967.     bn_int        unknown3; /* 00 00 00 00 */
  968.     bn_int        unknown4; /* 10 00 00 00 */
  969.     bn_int        unknown5; /* 06 00 00 00 */
  970.     bn_int        unknown6; /* FIXME: value1? */
  971.     bn_int        unknown7; /* 00 00 00 00 */
  972.     bn_int        key_hash[5];
  973.     /* owner name */
  974. } t_client_cdkey3 PACKED_ATTR();
  975. #define CLIENT_CDKEY3_UNKNOWN1  0xffffffff
  976. #define CLIENT_CDKEY3_UNKNOWN2  0x00000001
  977. #define CLIENT_CDKEY3_UNKNOWN3  0x00000000
  978. #define CLIENT_CDKEY3_UNKNOWN4  0x00000010
  979. #define CLIENT_CDKEY3_UNKNOWN5  0x00000006
  980. #define CLIENT_CDKEY3_UNKNOWN6  0x00123456
  981. #define CLIENT_CDKEY3_UNKNOWN7  0x00000000
  982. /******************************************************/
  983. /******************************************************/
  984. /*
  985.                           FF 42 09 00 00 00 00 00            .B......
  986. 00                                                                   
  987. FF 42 09 00 00 00 00 00   00                         .B.......
  988. */
  989. #define SERVER_CDKEYREPLY3 0x42ff
  990. typedef struct
  991. {
  992.     t_bnet_header h;
  993.     bn_int        message;
  994.     /* owner name */ /* FIXME: or error message, or ... */
  995. } t_server_cdkeyreply3 PACKED_ATTR();
  996. #define SERVER_CDKEYREPLY3_MESSAGE_OK       0x00000000
  997. /******************************************************/
  998. /******************************************************/
  999. /*
  1000. FF 34 0D 00 00 00 00 00   00 00 00 00 00             .4...........
  1001. */
  1002. #define CLIENT_REALMLISTREQ 0x34ff
  1003. typedef struct
  1004. {
  1005.     t_bnet_header h;
  1006.     bn_int        unknown1;
  1007.     bn_int        unknown2;
  1008. } t_client_realmlistreq PACKED_ATTR();
  1009. /******************************************************/
  1010. /******************************************************/
  1011. /*
  1012. 0000:   FF 40 04 00                                          .@..            
  1013. */
  1014. #define CLIENT_REALMLISTREQ_110 0x40ff
  1015. typedef struct
  1016. {
  1017.     t_bnet_header h;
  1018. } t_client_realmlistreq_110 PACKED_ATTR();
  1019. /******************************************************/
  1020. /******************************************************/
  1021. /*
  1022. FF 34 5E 00 00 00 00 00   01 00 00 00 00 00 00 C0    .4^.............
  1023. 00 00 00 00 00 00 00 00   00 00 00 00 10 82 01 00    ................
  1024. FF FF FF FF 00 00 00 00   42 65 74 61 57 65 73 74    ........BetaWest
  1025. 00 50 6C 65 61 73 65 20   73 65 6C 65 63 74 20 74    .Please select t
  1026. 68 69 73 20 61 73 20 79   6F 75 72 20 72 65 61 6C    his as your real
  1027. 6D 20 64 75 72 69 6E 67   20 62 65 74 61 00          m during beta.
  1028. ff 34 5e 00 00 00 00 00   01 00 00 00 00 00 00 c0    .4^.............
  1029. 00 00 00 00 00 00 00 00   00 00 00 00 bc 95 01 00    ................
  1030. ff ff ff ff 00 00 00 00   42 65 74 61 57 65 73 74    ........BetaWest
  1031. 00 50 6c 65 61 73 65 20   73 65 6c 65 63 74 20 74    .Please select t
  1032. 68 69 73 20 61 73 20 79   6f 75 72 20 72 65 61 6c    his as your real
  1033. 6d 20 64 75 72 69 6e 67   20 62 65 74 61 00          m during beta.
  1034. ff 34 5e 00 00 00 00 00   01 00 00 00 00 00 00 c0    .4^.............
  1035. 00 00 00 00 00 00 00 00   00 00 00 00 c8 99 01 00    ................
  1036. ff ff ff ff 00 00 00 00   42 65 74 61 57 65 73 74    ........BetaWest
  1037. 00 50 6c 65 61 73 65 20   73 65 6c 65 63 74 20 74    .Please select t
  1038. 68 69 73 20 61 73 20 79   6f 75 72 20 72 65 61 6c    his as your real
  1039. 6d 20 64 75 72 69 6e 67   20 62 65 74 61 00          m during beta.
  1040. from bnetd-0.3.23pre18 to Diablo II 1.03
  1041.       FF 34 4B 00 00 00   00 00 01 00 00 00 00 00      .4K........... 
  1042. 00 C0 00 00 00 00 00 00   00 00 00 00 00 00 10 82    ................ 
  1043. 01 00 FF FF FF FF 00 00   00 00 51 61 72 61 74 68    ..........Qarath 
  1044. 52 65 61 6C 6D 00 54 48   45 20 43 68 6F 69 63 65    Realm.THE Choice 
  1045. 20 46 6F 72 20 4E 6F 77   28 74 6D 29 00              For Now(tm).
  1046. */
  1047. #define SERVER_REALMLISTREPLY 0x34ff /* realm list reply? */
  1048. typedef struct
  1049. {
  1050.     t_bnet_header h;
  1051.     bn_int        unknown1;
  1052.     bn_int        count;
  1053.     /* realm entries */
  1054. } t_server_realmlistreply PACKED_ATTR();
  1055. #define SERVER_REALMLISTREPLY_UNKNOWN1 0x00000000
  1056. typedef struct
  1057. {
  1058.     bn_int unknown3;
  1059.     bn_int unknown4;
  1060.     bn_int unknown5;
  1061.     bn_int unknown6;
  1062.     bn_int unknown7; /* this one is always different... 00 01 XX XX.. what is it? */
  1063.     bn_int unknown8;
  1064.     bn_int unknown9;
  1065.     /* realm name */
  1066.     /* realm description */
  1067. } t_server_realmlistreply_data PACKED_ATTR();
  1068. #define SERVER_REALMLISTREPLY_DATA_UNKNOWN3 0xc0000000
  1069. #define SERVER_REALMLISTREPLY_DATA_UNKNOWN4 0x00000000
  1070. #define SERVER_REALMLISTREPLY_DATA_UNKNOWN5 0x00000000
  1071. #define SERVER_REALMLISTREPLY_DATA_UNKNOWN6 0x00000000
  1072. #define SERVER_REALMLISTREPLY_DATA_UNKNOWN7 0x00018210 /* 98832 or 1;33296 */
  1073. #define SERVER_REALMLISTREPLY_DATA_UNKNOWN8 0xffffffff
  1074. #define SERVER_REALMLISTREPLY_DATA_UNKNOWN9 0x00000000
  1075. /******************************************************/
  1076. /******************************************************/
  1077. /*
  1078. # 44 packet from server: type=0x40ff(unknown) length=40 class=bnet
  1079. 0000:   FF 40 28 00 00 00 00 00   01 00 00 00 01 00 00 00    .@(.............
  1080. 0010:   45 75 72 6F 70 65 00 52   65 61 6C 6D 20 66 6F 72    Europe.Realm for
  1081. 0020:   20 45 75 72 6F 70 65 00                               Europe.        
  1082. */
  1083. #define SERVER_REALMLISTREPLY_110 0x40ff
  1084. typedef struct
  1085. {
  1086.     t_bnet_header h;
  1087.     bn_int        unknown1;
  1088.     bn_int        count;
  1089.     /* realm entries */
  1090. } t_server_realmlistreply_110 PACKED_ATTR();
  1091. #define SERVER_REALMLISTREPLY_110_UNKNOWN1 0x00000000
  1092. typedef struct
  1093. {
  1094.     bn_int unknown1;
  1095.     /* realm name */
  1096.     /* realm description */
  1097. } t_server_realmlistreply_110_data PACKED_ATTR();
  1098. #define SERVER_REALMLISTREPLY_110_DATA_UNKNOWN1 0x00000001
  1099. /******************************************************/
  1100. /*
  1101. FF 35 25 00 01 00 00 00   AA 7D 15 EB DA C7 FE 92    .5%......}......
  1102. 94 84 C2 FE 98 2C 4D 20   12 96 05 D2 42 65 74 61    .....,M ....Beta
  1103. 57 65 73 74 00                                       West.
  1104. FF 35 25 00 06 00 00 00   BB DA EF 7A 94 D9 6E B0    .5%........z..n.
  1105. 35 0e 03 96 6a 5f be 87   11 A3 59 CE 42 65 74 61    5...j_....Y.Beta
  1106. 57 65 73 74 00                                       West.
  1107. */
  1108. #define CLIENT_REALMJOINREQ 0x35ff
  1109. typedef struct /* join realm request */
  1110. {
  1111.     t_bnet_header h;
  1112.     bn_int        unknown1; /* seq number? */
  1113.     bn_int        unknown2;
  1114.     bn_int        unknown3;
  1115.     bn_int        unknown4;
  1116.     bn_int        unknown5;
  1117.     bn_int        unknown6; /* bn_hash of something? */
  1118.     /* realm name */
  1119. } t_client_realmjoinreq PACKED_ATTR();
  1120. /******************************************************/
  1121. /******************************************************/
  1122. /*
  1123. FF 35 43 00 01 00 00 00   FA 9E 0D D1 D8 94 F6 07    .5C.............
  1124. F6 0F 08 00 D8 94 F6 30   17 E0 00 00 00 00 00 00    .......0........
  1125. 42 1B 00 00 B2 7E 27 44   D5 C5 FB 07 FA 9E BF 63    B....~'D.......c
  1126. 1B 57 1B 69 7F 4F A9 C0   B8 83 E9 4C 4D 6F 4E 6B    .W.i.O.....LMoNk
  1127. 32 6B 00                                             2k.
  1128. FF 35 44 00 01 00 00 00   FA 9E 0D D1 D8 94 F6 07    .5D.............
  1129. F6 0F 08 00 80 7B 40 A2   17 E0 00 00 00 00 00 00    .....{@.........
  1130. 42 1B 00 00 B2 7E 27 44   D5 C5 FB 07 FA 9E BF 63    B....~'D.......c
  1131. 1B 57 1B 69 7F 4F A9 C0   B8 83 E9 4C 51 6C 65 78    .W.i.O.....LQlex
  1132. 53 5A 47 00                                          SZG.
  1133. FF 35 48 00 01 00 00 00   24 43 A2 A9 D8 94 F6 09    .5H.....$C......
  1134. 05 75 0E 00 D8 94 F6 30   17 E0 00 00 00 00 00 00    .u.....0........
  1135. 10 1D 00 00 FE CE B9 DA   89 4B 93 51 A9 18 FA A2    .........K.Q....
  1136. 85 4B B8 A4 B4 27 C8 5D   A8 FE 17 31 48 65 68 65    .K...'.]...1Hehe
  1137. 2D 69 2D 53 75 63 6B 00                              -i-Suck.
  1138. */
  1139. #define SERVER_REALMJOINREPLY 0x35ff
  1140. typedef struct /* realm join reply? */
  1141. {
  1142.     t_bnet_header h;
  1143.     bn_int        unknown1;       /* same as reqest */ /* seq number? */ /* count? */ /* result? */
  1144.     bn_int        unknown2;       /* same later in auth login */
  1145.     bn_int        unknown3;       /* reg auth? looks like server ip */ /* same later in auth login and SERVER_MESSAGE */
  1146.     bn_int        sessionkey;     /* same later in auth login */
  1147.     bn_int        addr;           /* big endian? */
  1148.     bn_short      port;           /* big endian? */
  1149.     bn_short      unknown6;
  1150.     bn_int        unknown7;       /* always zero? */ /* same later in auth login */
  1151.     bn_int        unknown8;       /* always near 0x2000? */ /* same later in auth login */
  1152.     bn_int        unknown9;       /* hash salt? */ /* same later in auth login */
  1153.     bn_int        secret_hash[5]; /* same later in auth login */
  1154.     /* player name */
  1155. } t_server_realmjoinreply PACKED_ATTR();
  1156. #define SERVER_REALMJOINREPLY_UNKNOWN2  0xd10d9efa
  1157. #define SERVER_REALMJOINREPLY_UNKNOWN3  0x07f694d8
  1158. #define SERVER_REALMJOINREPLY_UNKNOWN6  0x0000
  1159. #define SERVER_REALMJOINREPLY_UNKNOWN7  0x00000000
  1160. #define SERVER_REALMJOINREPLY_UNKNOWN8  0x00001b42
  1161. /******************************************************/
  1162. /******************************************************/
  1163. /*
  1164. FF 37 09 00 00 00 00 00   00                         .7.......
  1165. Diablo II 1.03
  1166.       FF 37 09 00 00 00   00 00 00                     .7.......
  1167. */
  1168. #define CLIENT_UNKNOWN_37 0x37ff
  1169. typedef struct /* character list request, character list upload? */
  1170. {
  1171.     t_bnet_header h;
  1172.     bn_int        opencount;  /* Number of OPEN characters on user's machine!    */
  1173.       /* Always zero for "closed" connections.           */
  1174.     /* unknown2 */            /* subsequent blocks of t_d2char_info or something */
  1175.                               /* similar, so server could read this list and     */
  1176.                               /* include in the 0x37ff reply as a choice (this   */
  1177.                               /* makes sense cuz the server does NOT store open  */
  1178.                               /* character details - this also explains why      */
  1179.                               /* unknown1 is always 0 in the beta, and the 0x00  */
  1180.                               /* of unknown2 acts as a EOF when client read the  */
  1181.                               /* t_d2char_info structures                        */
  1182. } t_client_unknown_37 PACKED_ATTR();
  1183. /******************************************************/
  1184. /******************************************************/
  1185. /*
  1186. FF 37 01 01 00 00 00 00   08 00 00 00 04 00 00 00    .7..............
  1187. 42 65 74 61 57 65 73 74   2C 4D 6F 4E 6B 00 87 80    BetaWest,MoNk...
  1188. 06 01 01 01 01 50 FF FF   02 02 FF FF FF FF FF FF    .....P..........
  1189. 02 49 50 50 50 50 FF FF   FF 50 50 FF FF FF FF FF    .IPPPP...PP.....
  1190. FF 14 88 82 80 80 FF FF   FF 00 42 65 74 61 57 65    ..........BetaWe
  1191. 73 74 2C 4D 6F 4E 6B 2D   65 00 83 80 05 02 02 01    st,MoNk-e.......
  1192. 01 2B FF 1B 02 02 FF FF   FF FF FF FF 03 FF FF FF    .+..............
  1193. FF FF FF FF A8 FF FF FF   FF FF FF FF FF 10 80 82    ................
  1194. 80 80 FF FF FF 00 42 65   74 61 57 65 73 74 2C 4D    ......BetaWest,M
  1195. 6F 4E 6B 2D 65 65 00 83   80 06 01 01 01 01 FF 4C    oNk-ee.........L
  1196. FF 02 02 FF FF FF FF FF   FF 01 FF 48 48 48 48 FF    ...........HHHH.
  1197. A6 FF 48 48 FF FF FF FF   FF FF 0F 80 80 80 80 FF    ..HH............
  1198. FF FF 00 42 65 74 61 57   65 73 74 2C 4D 6F 4E 6B    ...BetaWest,MoNk
  1199. 2D 74 77 6F 00 87 80 01   01 01 01 01 FF FF FF 01    -two............
  1200. 01 FF FF FF FF FF FF 02   FF FF FF FF FF FF FF FF    ................
  1201. FF FF FF FF FF FF FF FF   01 84 80 FF FF FF 80 80    ................
  1202. 00                                                   .
  1203. ^-- 1: (BetaWest) MoNk
  1204.     2: (BetaWest) MoNk-e
  1205.     3: (BetaWest) MoNk-ee
  1206.     4: (BetaWest) MoNk-two
  1207. ff 37 4e 00 00 00 00 00   08 00 00 00 01 00 00 00    .7N.............
  1208. 42 65 74 61 57 65 73 74   2c 4c 69 66 65 6c 69 6b    BetaWest,Lifelik
  1209. 65 00 87 80 01 01 01 01   01 ff ff ff 01 01 ff ff    e...............
  1210. ff ff ff ff 03 ff ff ff   ff ff ff ff ff ff ff ff    ................
  1211. ff ff ff ff ff 01 80 80   ff ff ff 80 80 00          ..............
  1212. ff 37 4e 00 00 00 00 00   08 00 00 00 01 00 00 00    .7N.............
  1213. 42 65 74 61 57 65 73 74   2c 51 6c 65 78 54 45 53    BetaWest,QlexTES
  1214. 54 00 83 80 ff ff ff ff   ff 30 ff 1b ff ff ff ff    T........0......
  1215. ff ff ff ff 04 ff ff ff   ff ff ff ff ff ff ff ff    ................
  1216. ff ff ff ff ff 01 80 80   80 80 ff ff ff 00          ..............
  1217. from bnetd-0.3.23pre18 to Diablo II 1.03
  1218. "Char1 {BNE}" [lvl 20, amaz]
  1219. "Char2 {BNE}" [lvl 21, sorc]
  1220. "Char3 {BNE}" [lvl 22, necro]
  1221.       FF 37 D9 00 00 00   00 00 08 00 00 00 03 00    Gv.7............ 
  1222. 00 00 51 61 72 61 74 68   52 65 61 6C 6D 2C 43 68    ..QarathRealm,Ch 
  1223. 61 72 31 00 87 80 01 01   01 01 01 01 01 01 01 01    ar1............. 
  1224. 01 01 01 01 01 01 01 01   01 01 01 01 01 01 01 01    ................ 
  1225. 01 01 01 01 01 01 01 14   85 86 01 FF FF FF FF 42    ...............B 
  1226. 4E 45 54 44 00 51 61 72   61 74 68 52 65 61 6C 6d    NETD.QarathRealm 
  1227. 2C 43 68 61 72 32 00 87   80 01 01 01 01 01 01 01    ,Char2.......... 
  1228. 01 01 01 01 01 01 01 01   01 02 01 01 01 01 01 01    ................ 
  1229. 01 01 01 01 01 01 01 01   01 01 15 85 86 01 FF FF    ................ 
  1230. FF FF 42 4E 45 54 44 00   51 61 72 61 74 68 52 65    ..BNETD.QarathRe 
  1231. 61 6C 6D 2C 43 68 61 72   33 00 87 80 01 01 01 01    alm,Char3....... 
  1232. 01 01 01 01 01 01 01 01   01 01 01 01 03 01 01 01    ................ 
  1233. 01 01 01 01 01 01 01 01   01 01 01 01 01 16 85 86    ................ 
  1234. 01 FF FF FF FF 42 4E 45   54 44 00                   .....BNETD.
  1235. */
  1236. #define SERVER_UNKNOWN_37 0x37ff
  1237. typedef struct /* character list reply? */
  1238. {
  1239.     t_bnet_header h;
  1240.     bn_int        unknown1;
  1241.     bn_int        unknown2; /* _bucky_: max chars allowed? */
  1242.     bn_int        count;    /* # of chars, same number of  */
  1243.                             /* t_char_info to follow in    */
  1244.                             /* packet                      */
  1245.     /* d2char_info blocks */
  1246. } t_server_unknown_37 PACKED_ATTR();
  1247. #define SERVER_UNKNOWN_37_UNKNOWN1 0x00000000
  1248. #define SERVER_UNKNOWN_37_UNKNOWN2 0x00000008
  1249. /* The ONLY 0x00 that should appear should be the terminating NUL for  */
  1250. /* the character name string and the guild tag string, they're used as */
  1251. /* delimiters to separate character name and the character structure   */
  1252. /* If you got any other NUL's in here the next character's info will   */
  1253. /* be royally fucked up - using 0x01 or 0xff for unknowns seem to work */
  1254. /* well                                                                */
  1255. typedef struct
  1256. {
  1257.     /* "RealmName,CharacterName" - for closed characters */
  1258.     /* - OR -                                            */
  1259.     /* "CharacterName" - for open characters             */
  1260.     /* - strlen(CharacterName) must be <= 15 -           */
  1261.     bn_byte unknownb1;     /* 0x83, 0x87? */
  1262.     bn_byte unknownb2;     /* 0x80...? */
  1263.     bn_byte helmgfx;
  1264.     bn_byte bodygfx;
  1265.     bn_byte leggfx;
  1266.     bn_byte lhandweapon;
  1267.     bn_byte lhandgfx;
  1268.     bn_byte rhandweapon;
  1269.     
  1270. /* Partial weapon code list:
  1271.           0x2f: 1H Axe
  1272.           0x30: 1H Sword
  1273.           0x50: 2H Staff
  1274.           0x51: Another 2H Staff
  1275.           0x52: Another 2H Staff
  1276.           0x53: Another 2H Staff
  1277.           0x54: 2H Axe
  1278.           0x55: Scythe
  1279.           0x56: empty?
  1280.           0x57: Another 2H Axe
  1281.           0x58: Halberd?
  1282.           0x59: empty?
  1283.           0x5a: Another 2H Axe
  1284.           0x5b: Another Halberd
  1285.           0x5c: empty?
  1286.           0x5d: 1H club?
  1287.           0x5e: empty?
  1288.           0x5f: empty?
  1289. */
  1290.     
  1291.     bn_byte rhandgfx;
  1292.     bn_byte unknownb3;
  1293.     bn_byte unknownb4;
  1294.     bn_byte unknownb5;
  1295.     bn_byte unknownb6;
  1296.     bn_byte unknownb7;
  1297.     bn_byte unknownb8;
  1298.     bn_byte unknownb9;
  1299.     bn_byte unknownb10;
  1300.     bn_byte unknownb11;
  1301.     bn_byte class;     /* 0x01=Amazon, 0x02=Sor, 0x03=Nec, 0x04=Pal, 0x05=Bar */
  1302.     
  1303.     bn_int  unknown1;
  1304.     bn_int  unknown2;
  1305.     bn_int  unknown3;
  1306.     bn_int  unknown4;
  1307.     
  1308.     bn_byte level;     /* yes, byte, not short/int/long  */
  1309.     bn_byte status;    /* 0x01-03 = Norm & alive         */
  1310.                        /* 0x04-07 = HC & alive           */
  1311.                        /* 0x08-0b = Norm & "dead"?       */
  1312.                        /* 0x0c+   = HC & dead, chat only */
  1313.                        /* Add 0x80 to get same effect    */
  1314.     bn_byte title;     /* 0x01=none
  1315.                           0x02=Sir/Dame?
  1316.                           0x03=Sir/Dame?
  1317.                           0x04=Lord?
  1318.                           0x05=Lord?
  1319.                           0x06=Baron?
  1320.                           0x07=Baron? */
  1321.                        /* Same codes for HC chars                            */
  1322.                        /* Add 0x80 to get same effect    */
  1323.     bn_byte unknownb13;
  1324.     bn_byte emblembgc; /* Guild emblem background colour */
  1325.     bn_byte emblemfgc; /* Guild emblem foreground colour */
  1326.     bn_byte emblemnum; /* Guild emblem type number       */
  1327.     
  1328. /* emblem number corresponds to D2DATA.MPQ/data/global/ui/Emblems/iconXXa.dc6 */
  1329. /* where XX = emblem number - 1 (ie, 0x0A corresponds to icon09a.dc6) use     */
  1330. /* for dummy values seem safe... 0x01 won't work, you'll get an emblem...     */
  1331.     
  1332.     bn_byte unknownb14;
  1333.     /* Guild Tag */ /* must not be longer than 3 chars */
  1334. } t_d2char_info PACKED_ATTR();
  1335. #define D2CHAR_INFO_UNKNOWNB1 0x83
  1336. #define D2CHAR_INFO_UNKNOWNB2 0x80
  1337. #define D2CHAR_INFO_FILLER 0xff /* non-zero padding */
  1338. #define D2CHAR_INFO_CLASS_AMAZON      0x01
  1339. #define D2CHAR_INFO_CLASS_SORCERESS   0x02
  1340. #define D2CHAR_INFO_CLASS_NECROMANCER 0x03
  1341. #define D2CHAR_INFO_CLASS_PALADIN     0x04
  1342. #define D2CHAR_INFO_CLASS_BARBARIAN   0x05
  1343. #define D2CHAR_INFO_CLASS_DRUID       0x06
  1344. #define D2CHAR_INFO_CLASS_ASSASSIN    0x07
  1345. /******************************************************/
  1346. /******************************************************/
  1347. /* D2 packet... not sent very often and the client doesn't
  1348.  * seem to expect an answer */
  1349. /* FIXME: what the hell does this one do? */
  1350. /*
  1351. FF 39 13 00 42 65 74 61   57 65 73 74 2C 62 75 73    .9..BetaWest,bus
  1352. 74 61 00                                             ta.
  1353. this one was sent after a closed character was deleted on the auth
  1354. server... maybe a notifier for the gateway server?
  1355. FF 39 17 00 42 6F 62 73   57 6F 72 6C 64 2C 63 68    .9..BobsWorld,ch
  1356. 61 72 6E 61 6D 65 00                                 arname.
  1357. */
  1358. #define CLIENT_UNKNOWN_39 0x39ff
  1359. typedef struct
  1360. {
  1361.     t_bnet_header h;
  1362.     /* character name */ /* what about open chars? */
  1363. } t_client_unknown_39 PACKED_ATTR();
  1364. /******************************************************/
  1365. /******************************************************/
  1366. /*
  1367. FF 3A 2E 00 58 4C F2 00   19 C2 08 00 D7 33 37 D3    .:..XL.......37.
  1368. 42 8C 92 37 C2 26 08 A9   3E 92 05 28 A1 5A 18 B9    B..7.&..>..(.Z..
  1369. 6D 61 73 74 6F 64 6F 6E   74 66 69 6C 6D 00          mastodontfilm.
  1370. FF 3A 28 00 2B 73 1C 01   88 91 F2 0D AF 22 43 25    .:(.+s......."C%
  1371. BF E4 2D 45 42 37 04 DB   AF 95 66 71 16 85 67 60    ..-EB7....fq..g`
  1372. 51 6C 65 78 53 5A 47 00                              QlexSZG.
  1373. */
  1374. #define CLIENT_LOGINREQ2 0x3aff
  1375. typedef struct
  1376. {
  1377.     t_bnet_header h;
  1378.     bn_int        ticks; /* is it really? */
  1379.     bn_int        sessionkey;
  1380.     bn_int        password_hash2[5];
  1381.     /* player name */
  1382. } t_client_loginreq2 PACKED_ATTR();
  1383. /******************************************************/
  1384. /******************************************************/
  1385. /*
  1386. # 21 packet from client: type=0x46ff(unknown) length=8 class=bnet
  1387. 0000:   FF 46 08 00 00 00 00 00                              .F......          
  1388. */
  1389. #define CLIENT_MOTD_W3 0x46ff
  1390. typedef struct
  1391. {
  1392.     t_bnet_header h;
  1393.     bn_int        last_news_time; // date of the last news item the client has
  1394. } t_client_motd_w3 PACKED_ATTR();
  1395. /******************************************************/
  1396. /******************************************************/
  1397. /*
  1398. # 22 packet from server: type=0x46ff(unknown) length=225 class=bnet
  1399. 0000:   FF 46 E1 00 01 16 3A 6C   3C FF FF FF FF 00 00 00    .F....:l<.......
  1400. 0010:   00 00 00 00 00 57 65 6C   63 6F 6D 65 20 74 6F 20    .....Welcome to 
  1401. 0020:   42 61 74 74 6C 65 2E 6E   65 74 21 0A 54 68 69 73    Battle.net!.This
  1402. 0030:   20 73 65 72 76 65 72 20   69 73 20 68 6F 73 74 65     server is hoste
  1403. 0040:   64 20 62 79 20 41 54 26   54 2E 0A 54 68 65 72 65    d by AT&T..There
  1404. 0050:   20 61 72 65 20 63 75 72   72 65 6E 74 6C 79 20 36     are currently 6
  1405. 0060:   32 38 20 75 73 65 72 73   20 70 6C 61 79 69 6E 67    28 users playing
  1406. 0070:   20 31 35 39 20 67 61 6D   65 73 20 6F 66 20 57 61     159 games of Wa
  1407. 0080:   72 63 72 61 66 74 20 49   49 49 2C 20 61 6E 64 20    rcraft III, and 
  1408. 0090:   31 37 37 33 34 36 20 75   73 65 72 73 20 70 6C 61    177346 users pla
  1409. 00A0:   79 69 6E 67 20 37 37 38   33 37 20 67 61 6D 65 73    ying 77837 games
  1410. 00B0:   20 6F 6E 20 42 61 74 74   6C 65 2E 6E 65 74 2E 0A     on Battle.net..
  1411. 00C0:   4C 61 73 74 20 6C 6F 67   6F 6E 3A 20 54 68 75 20    Last logon: Thu 
  1412. 00D0:   46 65 62 20 31 34 20 20   35 3A 32 38 20 50 4D 0A    Feb 14  5:28 PM.
  1413. 00E0:   00                                                   .               
  1414. # Match 4, 2002
  1415. # 92 packet from server: type=0x46ff(unknown) length=859 class=bnet
  1416. 0000:   FF 46 5B 03 01 B4 B2 82   3C 20 B6 83 3C 20 B6 83    .F[.....< ..< ..
  1417. 0010:   3C 20 B6 83 3C 57 65 20   68 61 76 65 20 62 65 65    < ..<We have bee
  1418. # 93 packet from server: type=0x46ff(unknown) length=223 class=bnet
  1419. 0000:   FF 46 DF 00 01 B4 B2 82   3C 20 B6 83 3C 20 B6 83    .F......< ..< ..
  1420. 0010:   3C 00 00 00 00 57 65 6C   63 6F 6D 65 20 74 6F 20    <....Welcome to 
  1421. */
  1422. #define SERVER_MOTD_W3 0x46ff
  1423. typedef struct
  1424. {
  1425.     t_bnet_header h;
  1426. bn_byte        msgtype; /* we only saw "1" type so far */
  1427. bn_int         curr_time; /* as seen by the server */
  1428. bn_int         first_news_time; /* the oldest news item's timestamp */
  1429. bn_int         timestamp; /* the timestamp of this news item */
  1430.     /* it is equal with the latest news item timestamp for
  1431.     the welcome message */
  1432. bn_int         timestamp2; /* always equal with the timestamp except the
  1433.     last packet which shows in the right panel */
  1434. /* text */
  1435. } t_server_motd_w3 PACKED_ATTR();
  1436. #define SERVER_MOTD_W3_MSGTYPE  0x01
  1437. #define SERVER_MOTD_W3_WELCOME  0x00000000
  1438. /******************************************************/
  1439. /******************************************************/
  1440. /*
  1441. # Jon/bbbbb
  1442. # 28 packet from client: type=0x53ff(unknown) length=40 class=bnet
  1443. 0000:   FF 53 28 00 6F FD 5F 61   C3 D1 C4 78 E6 2E 24 8B    .S(.o._a...x..$.
  1444. 0010:   32 EB 36 9C 39 57 D8 BA   57 84 67 5E E7 78 5B 01    2.6.9W..W.g^.x[.
  1445. 0020:   6D 99 87 15 4A 6F 6E 00                              m...Jon.        
  1446. */
  1447. #define CLIENT_LOGINREQ_W3 0x53ff
  1448. typedef struct
  1449. {
  1450.     t_bnet_header h;
  1451.     bn_byte        unknown[32];
  1452.     /* player name */
  1453. } t_client_loginreq_w3 PACKED_ATTR();
  1454. /******************************************************/
  1455. /******************************************************/
  1456. /*
  1457. 12:33:56.255569 63.241.83.11.6112 > ws-2-11.1038: P 190:262(72) ack 272 win 65264
  1458.     ** ** ** ** ** ** ** **   ** ** ** ** ** ** ** **                    
  1459.     ** ** ** ** ** ** ** **   ** ** ** ** ** ** ** **                    
  1460.     ** ** ** ** ** ** ** **   FF 53 48 00 00 00 00 00            .SH.....
  1461.     4B A8 FF 5D 1E 5D 2D 50   D1 2B B2 95 74 AD 5F 4E    K..].]-P.+..t._N
  1462.     88 A4 88 48 18 27 89 50   F1 AA 1B D5 D7 B6 47 BC    ...H.'.P......G.
  1463.     30 8B 2A 54 AA 99 23 96   75 8A 5E 67 35 8E 5B 22    0.*T..#.u.^g5.["
  1464.     2C 0E 68 2E C2 95 E9 D7   A1 82 F1 2C 1E 2B 28 36    ,.h........,.+(6
  1465. */
  1466. #define SERVER_LOGINREPLY_W3 0x53ff
  1467. typedef struct
  1468. {
  1469.     t_bnet_header h;
  1470.     bn_int       message;
  1471.     /* seems to be response to client-challenge */
  1472.     bn_int       unknown[16];
  1473. } t_server_loginreply_w3 PACKED_ATTR();
  1474. #define SERVER_LOGINREPLY_W3_MESSAGE_SUCCESS 0x00000000
  1475. #define SERVER_LOGINREPLY_W3_MESSAGE_ALREADY 0x00000001 /* Account already logged on */
  1476. #define SERVER_LOGINREPLY_W3_MESSAGE_BADACCT 0x00000001 /* Accoutn does not exist */
  1477. /******************************************************/
  1478. /******************************************************/
  1479. /* single player crack based:
  1480. # 34 packet from server: type=0x54ff(unknown) length=40 class=bnet
  1481. 0000:   FF 54 28 00 00 00 00 00   00 00 00 00 00 00 00 00    .T(.............
  1482. 0010:   00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00    ................
  1483. 0020:   00 00 00 00 00 00 00 00                              ........        
  1484. * Password Checksum ? *
  1485. -- client --
  1486. 0x54ff - 2 bytes
  1487. size - 2 bytes (0x0018)
  1488. unknown1 - 20 bytes
  1489. -- server --
  1490. 0x54ff - 2 bytes
  1491. size - 2 bytes
  1492. msgid - 4 bytes
  1493. {
  1494. 0x00000000 accept
  1495. 0x00000002 password incorrect
  1496. }
  1497. unknown1 - 20 bytes
  1498. Packet #13
  1499. 0x0000   FF 54 1C 00 00 00 00 00-3A D5 B9 B1 2B D9 B5 D9