Valhalla Legends Forums Archive | Battle.net Bot Development | odd 0x51 response...

AuthorMessageTime
mentalCo.
i just added bnls support to my bot just to give it something extra and i was bored etc... anyway when using bnls i get this 0x51 response from battle.net.
[code]
ff 51 9 0 1 1 0 0 0
[/code]
February 10, 2005, 4:51 AM
Myndfyr
[quote author=mentalCo. link=topic=10501.msg99137#msg99137 date=1108011091]
i just added bnls support to my bot just to give it something extra and i was bored etc... anyway when using bnls i get this 0x51 response from battle.net.
[code]
ff 51 9 0 1 1 0 0 0
[/code]
[/quote]

According to BnetDocs, that means it's an invalid version.  0x101.
February 10, 2005, 4:59 AM
mentalCo.
o ok my switch() for the result was messed up but i changed it.  so whats wrong with my 0x51 packet?  like which part of it has to do with game version?
February 10, 2005, 5:53 AM
Myndfyr
[quote author=mentalCo. link=topic=10501.msg99140#msg99140 date=1108014785]
o ok my switch() for the result was messed up but i changed it.  so whats wrong with my 0x51 packet?  like which part of it has to do with game version?
[/quote]

Maybe you should actually look at BnetDocs, you could figure it out?

And a note -- there are components of the game version in both 0x50 and 0x51.
February 10, 2005, 3:26 PM
shout
If we could see some of your code (IE: Building and un-building 0x50 and 0x51), we could probably help you a little better.

I am guessing you are using VB [s]& BNLS[/s]. Correct me if I am wrong.
February 10, 2005, 9:02 PM
JoeTheOdd
Well, he said his switch() was messed up, not his Select Case, so I assume hes using a member of the C family.
February 10, 2005, 10:38 PM
mentalCo.
heres my 0x51 packet...

[code]
hex :
6a eb 8c 49 3 1 1 1 66 dd 2b 32 1 0 0 0 0 0 0 0 d 0 0 0 1 0 0 0 64 55 4 0 0 0 0 0 9e 2 67 24 8e 91 eb 9c 27 e9 5e 56 d2 1a 5b 20 16 f3 b4 10 53 74 61 72 63 72 61 66 74 2e 65 78 65 20 30 35 2f 32 36 2f 30 34 20 30 30 3a 34 36 3a 30 30 20 31 30 34 38 35 37 36 0 55 47 42 6f 74 4e 65 74 0


ascii :
j ë Œ I     f Ý + 2 
 d U  ž  g $ Ž ‘ ë œ ' é ^ V Ò  [    ó ´  S t a r c r a f t . e x e   0 5 / 2 6 / 0 4   0 0 : 4 6 : 0 0   1 0 4 8 5 7 6 U G B o t N e t
[/code]


I have went over my code over and over and it seems to be right but i still get 0x101 unrecognized game version.  heres my code for sending 0x51... its a bit complicated because the program supports multiple bots and uhh... i dunno heres the code:

[code]
private short Send_0x51(byte[] mpqname, byte[] hashcmd, byte[] encryptvalue, string cdkey, int myID)
{
uint PRODUCT_STARCRAFT = 0x01;
uint PRODUCT_BROODWAR = 0x02;
uint PRODUCT_WAR2BNE = 0x03;
uint PRODUCT_DIABLO2 = 0x04;
uint PRODUCT_LOD = 0x05;
uint PRODUCT_JAPANSTARCRAFT = 0x06;
uint PRODUCT_WARCRAFT3 = 0x07;
uint PRODUCT_TFT = 0x08;

uint ProdID = 0;
uint mpqversion = 9;
mpqversion = Convert.ToUInt32(mpqname[7]);

AddChat(rtbGreen, "mpqversion: \r\n");

AddChat(rtbBlue, ((char)mpqversion).ToString() + "\r\n");

switch(Bots[myID].product.ToLower())
{
case "rats":
ProdID = PRODUCT_STARCRAFT;
break;
case "pxes":
ProdID = PRODUCT_BROODWAR;
break;
case "nb2w":
ProdID = PRODUCT_WAR2BNE;
break;
case "vd2d":
ProdID = PRODUCT_DIABLO2;
break;
case "px2d":
ProdID = PRODUCT_LOD;
break;
case "rtsj":
ProdID = PRODUCT_JAPANSTARCRAFT;
break;
case "3raw":
ProdID = PRODUCT_WARCRAFT3;
break;
case "px3w":
ProdID = PRODUCT_TFT;
break;
}

if(!Bots[myID].controls.PacketBuff.conBnls())
{
AddChat(rtbRed, "[BNLS]Could not connect to bnls server.\r\n");
return -1;
}

AddChat(rtbGreen, "[BNLS]Connected.\r\n");

Bots[myID].controls.PacketBuff.AddByteArray(encryptvalue);
Bots[myID].controls.PacketBuff.AddNTString(cdkey);
if(!Bots[myID].controls.PacketBuff.send(2, 0x01))
{
AddChat(rtbRed, "[BNLS]Packet could not be written to stream.\r\n");
return -1;
}

byte[] pbuff=new byte[2000];
short psize=0;
int ppos=0;
int pid=0;
bool Continue=true;



byte[] cdkeydata=new byte[9*4];
byte[] version=new byte[4];
byte[] checksum=new byte[4];
byte[] versionstring=new byte[128];
byte[] clientsessionkey=new byte[4];

AddChat(rtbGreen, "\r\n[BNLS]0x01 Sent.\r\n");

while(Bots[myID].controls.PacketBuff.tcpClients[2].GetStream().CanRead && Continue)
{
if(Bots[myID].controls.PacketBuff.tcpClients[2].GetStream().DataAvailable)
{
ppos=0;
while(ppos<3)
{
ppos += Bots[myID].controls.PacketBuff.tcpClients[2].GetStream().Read(pbuff,ppos,3-ppos);
//ppos += Bots[myID].controls.PacketBuff.tcpClients[3].GetStream().Read(pbuff,ppos,3-ppos);
}

psize=(short)pbuff[0];
pid=pbuff[2];

while(ppos<psize)
{
ppos += Bots[myID].controls.PacketBuff.tcpClients[2].GetStream().Read(pbuff,ppos,psize-ppos);
//ppos += Bots[myID].controls.PacketBuff.tcpClients[3].GetStream().Read(pbuff,ppos,psize-ppos);
}

AddChat(rtbGreen, "[BNLS]s->c 0x" + pid.ToString() + "(len " + psize.ToString() + ")\r\n Hex:\r\n");

for(int i =0;i<psize;i++)
{
AddChat(rtbBlue, pbuff[i].ToString("x") + " ");
}

switch(pid)
{
case 0x01://BNLS_CDKEY
switch((uint)pbuff[3])
{
case 0x1:
AddChat(rtbGreen, "BNLS_CDKEY data correct.\r\n");
Array.Copy(pbuff, 7, clientsessionkey, 0, 4);
Array.Copy(pbuff, 11, cdkeydata, 0, 9*4);

Bots[myID].controls.PacketBuff.AddDword(ProdID);
Bots[myID].controls.PacketBuff.AddDword(mpqversion);
Bots[myID].controls.PacketBuff.AddByteArray(hashcmd);
AddChat(rtbGreen, "wholepacket with size[" + Bots[myID].controls.PacketBuff.m_p.ToString() + "\r\n");
for(int p=0;p<Bots[myID].controls.PacketBuff.m_p;p++)
{
AddChat(rtbBlue, Bots[myID].controls.PacketBuff.m_data.ToArray()[p].ToString("x") + " ");
}
AddChat(rtbGreen, "\r\n");
Bots[myID].controls.PacketBuff.send(2, 0x09);
break;
case 0x0:
AddChat(rtbRed, "BNLS_CDKEY data incorrect.\r\n");
Continue = false;
break;
}
break;
case 0x09://BNLS_VERSIONCHECK
switch(pbuff[3])
{
case 0x1:
AddChat(rtbGreen, "BNLS_VERSIONCHECK passed.\r\n");
Array.Copy(pbuff, 7, version, 0, 4);
Array.Copy(pbuff, 11, checksum, 0, 4);
Array.Copy(pbuff, 15, versionstring, 0, psize-15);

Bots[myID].controls.PacketBuff.AddByteArray(clientsessionkey);
AddChat(rtbGreen, "clientsessionkey\r\n");
for(int p=0;p<4;p++)
{
AddChat(rtbBlue, clientsessionkey[p].ToString("x") + " ");
}
AddChat(rtbGreen, "\r\n");

Bots[myID].controls.PacketBuff.AddByteArray(version);
AddChat(rtbGreen, "version\r\n");
for(int p=0;p<4;p++)
{
AddChat(rtbBlue, version[p].ToString("x") + " ");
}
AddChat(rtbGreen, "\r\n");

Bots[myID].controls.PacketBuff.AddByteArray(checksum);
AddChat(rtbGreen, "checksum\r\n");
for(int p=0;p<4;p++)
{
AddChat(rtbBlue, checksum[p].ToString("x") + " ");
}
AddChat(rtbGreen, "\r\n");

if(Bots[myID].expansion)
{
//add expansion support here
}
else
{
Bots[myID].controls.PacketBuff.AddDword((int)1);
}
if(Bots[myID].spawn)
{
//add spawn support here
}
else
{
Bots[myID].controls.PacketBuff.AddDword((int)0);
}
Bots[myID].controls.PacketBuff.AddByteArray(cdkeydata);
AddChat(rtbGreen, "cdkeydata\r\n");
for(int p=0;p<9*4;p++)
{
AddChat(rtbBlue, cdkeydata[p].ToString("x") + " ");
}
AddChat(rtbGreen, "\r\n");
Bots[myID].controls.PacketBuff.AddByteArray(versionstring, psize - 15);
AddChat(rtbGreen, "versionstring\r\n");
for(int p=0;p<psize - 15;p++)
{
AddChat(rtbBlue, versionstring[p].ToString("x") + " | ");
}
AddChat(rtbGreen, "\r\n");

Bots[myID].controls.PacketBuff.AddNTString(Bots[myID].cdkeyname);

AddChat(rtbGreen, "wholepacket with size[" + Bots[myID].controls.PacketBuff.m_p.ToString() + "\r\n");
for(int p=0;p<Bots[myID].controls.PacketBuff.m_p;p++)
{
AddChat(rtbBlue, Bots[myID].controls.PacketBuff.m_data.ToArray()[p].ToString("x") + " ");
}
AddChat(rtbGreen, "wholepacket ascii\r\n");
for(int p=0;p<Bots[myID].controls.PacketBuff.m_p;p++)
{
AddChat(rtbBlue, ((char)Convert.ToInt32(Bots[myID].controls.PacketBuff.m_data.ToArray()[p].ToString())).ToString() + " ");
}
Bots[myID].controls.PacketBuff.send(1, 0x51);
Continue = false;
break;
case 0x2:
AddChat(rtbRed, "BNLS_VERSIONCHECK failed.\r\n");
break;
}
break;

}
AddChat(rtbGreen, "\r\n");
}
}
Bots[myID].controls.PacketBuff.tcpClients[2].GetStream().Close();
return 1;
}
[/code]



and the parameters that are passed to Send_0x51() are:
[code]

byte[] servertoken=new byte[4];
byte[] mpqname=new byte[13];
byte[] hashcmd=new byte[63];

Array.Copy(pbuff,8,servertoken,0,4);
Array.Copy(pbuff, 24, mpqname, 0, 13);
Array.Copy(pbuff, 37, hashcmd, 0, 62);
[/code]


heres what my bot outputs:

[code]
botA is about to connect with username of mentalCo.
botA [BNET]Connected.
botA [BNET]c->s 0x50
botA [BNET]Reading Packet
[BNET]s->c 0258
Hex:
ff 25 8 0 60 c a 43
Ascii:
ÿ %  `
C
botA [BNET]Reading Packet
[BNET]s->c 05099
Hex:
ff 50 63 0 0 0 0 0 16 2b b 89 1b d4 5 0 0 ac 41 43 25 b c5 1 49 58 38 36 76 65 72 30 2e 6d 70 71 0 41 3d 39 30 38 36 30 35 32 39 33 20 42 3d 33 32 36 38 34 33 39 35 32 20 43 3d 37 37 35 37 31 37 30 31 31 20 34 20 41 3d 41 5e 53 20 42 3d 42 2b 43 20 43 3d 43 2d 41 20 41 3d 41 5e 42 0
Ascii:
ÿ P c  +
&#137;  Ô  ¬ A C %
Å  I X 8 6 v e r 0 . m p q A = 9 0 8 6 0 5 2 9 3  B = 3 2 6 8 4 3 9 5 2  C = 7 7 5 7 1 7 0 1 1  4  A = A ^ S  B = B + C  C = C - A  A = A ^ B

botA [BNET]hashcmd:
A = 9 0 8 6 0 5 2 9 3  B = 3 2 6 8 4 3 9 5 2  C = 7 7 5 7 1 7 0 1 1  4  A = A ^ S  B = B + C  C = C - A  A = A ^ B
mpqversion:
0
[BNLS]Connected.

[BNLS]0x01 Sent.
[BNLS]s->c 0x1(len 47)
Hex:
2f 0 1 1 0 0 0 92 8a 96 49 d 0 0 0 1 0 0 0 64 55 4 0 0 0 0 0 57 6e dc 51 19 77 d0 30 1f df 45 d8 40 ee 8d 2c 25 eb 6c 51 BNLS_CDKEY data correct.
wholepacket with size[71
1 0 0 0 30 0 0 0 41 3d 39 30 38 36 30 35 32 39 33 20 42 3d 33 32 36 38 34 33 39 35 32 20 43 3d 37 37 35 37 31 37 30 31 31 20 34 20 41 3d 41 5e 53 20 42 3d 42 2b 43 20 43 3d 43 2d 41 20 41 3d 41 5e 42 0 0

[BNLS]s->c 0x9(len 55)
Hex:
37 0 9 1 0 0 0 3 1 1 1 31 11 13 af 53 74 61 72 63 72 61 66 74 2e 65 78 65 20 30 35 2f 32 36 2f 30 34 20 30 30 3a 34 36 3a 30 30 20 31 30 34 38 35 37 36 0 BNLS_VERSIONCHECK passed.
clientsessionkey
92 8a 96 49
version
3 1 1 1
checksum
31 11 13 af
cdkeydata
d 0 0 0 1 0 0 0 64 55 4 0 0 0 0 0 57 6e dc 51 19 77 d0 30 1f df 45 d8 40 ee 8d 2c 25 eb 6c 51
versionstring
53 | 74 | 61 | 72 | 63 | 72 | 61 | 66 | 74 | 2e | 65 | 78 | 65 | 20 | 30 | 35 | 2f | 32 | 36 | 2f | 30 | 34 | 20 | 30 | 30 | 3a | 34 | 36 | 3a | 30 | 30 | 20 | 31 | 30 | 34 | 38 | 35 | 37 | 36 | 0 |
wholepacket with size[105
92 8a 96 49 3 1 1 1 31 11 13 af 1 0 0 0 0 0 0 0 d 0 0 0 1 0 0 0 64 55 4 0 0 0 0 0 57 6e dc 51 19 77 d0 30 1f df 45 d8 40 ee 8d 2c 25 eb 6c 51 53 74 61 72 63 72 61 66 74 2e 65 78 65 20 30 35 2f 32 36 2f 30 34 20 30 30 3a 34 36 3a 30 30 20 31 30 34 38 35 37 36 0 55 47 42 6f 74 4e 65 74 0 wholepacket ascii
&#146; &#138; &#150; I     1   ¯ 
 d U  W n Ü Q  w Ð 0  ß E Ø @ î ? , % ë l Q S t a r c r a f t . e x e  0 5 / 2 6 / 0 4  0 0 : 4 6 : 0 0  1 0 4 8 5 7 6 U G B o t N e t
botA [BNET]Reading Packet
[BNET]s->c 0519
Hex:
ff 51 9 0 1 1 0 0 0
Ascii:
ÿ Q  
Game version unrecognized.
[/code]
February 16, 2005, 3:56 AM

Search