Valhalla Legends Forums Archive | Battle.net Bot Development | Parsing Packets

AuthorMessageTime
MindArchon
Ive been looking around for the last 6 hours trying to find a beginners explanation on how to get data from packets sent from battle.net. I didnt find it.

Things I know:

The function StrtoHex is used
Asc(Mid(Data, 2, 1)) gets the packet id

I have Grok's Debug Output and I have been examining the packets. Thats about all I know. Could somebody please give me just a little info on how this works?
August 25, 2004, 8:00 PM
ChR0NiC
[quote author=MindArchon link=board=17;threadid=8368;start=0#msg77314 date=1093464049]
Ive been looking around for the last 6 hours trying to find a beginners explanation on how to get data from packets sent from battle.net. I didnt find it.

Things I know:

The function StrtoHex is used
Asc(Mid(Data, 2, 1)) gets the packet id

I have Grok's Debug Output and I have been examining the packets. Thats about all I know. Could somebody please give me just a little info on how this works?

[/quote]

http://www.dark-wire.net/exile/members/tutorials.php?view=7

This is as good as it gets, nobody wants to waste their time teaching people about packets, sorry. I learned by noticing the differences in packet logs and by using Grok's debug output.
August 25, 2004, 8:49 PM
MindArchon
[quote author=ChRoNiC link=board=17;threadid=8368;start=0#msg77320 date=1093466960]
[quote author=MindArchon link=board=17;threadid=8368;start=0#msg77314 date=1093464049]
Ive been looking around for the last 6 hours trying to find a beginners explanation on how to get data from packets sent from battle.net. I didnt find it.

Things I know:

The function StrtoHex is used
Asc(Mid(Data, 2, 1)) gets the packet id

I have Grok's Debug Output and I have been examining the packets. Thats about all I know. Could somebody please give me just a little info on how this works?

[/quote]

http://www.dark-wire.net/exile/members/tutorials.php?view=7

This is as good as it gets, nobody wants to waste their time teaching people about packets, sorry. I learned by noticing the differences in packet logs and by using Grok's debug output.
[/quote]

So.. You use StrToHex then your bot examines the hex to get the values out of it?
August 25, 2004, 9:00 PM
bethra
Ok, I had trouble with this too.

BNCS Headers are like so

&HFF (Byte) + PacketID (Byte) + PacketSize (WORD)

So basically a BNCS header is a DWORD (4 Bytes).

This is the way I looked at the header, looked at it as a string.
"ABCDDDDDD..."

A = &HFF, BNCS constant
B = PacketID
C = PacketSize
D = Packet's Data

[quote]
Mid(Data, 2, 1)
[/quote]

This is just taking the "B" packet.

I'm not quite sure what you are asking specifically.

I am a newbie like you too but I know some stuff.

I have made this PacketDebuffer Class and posted it earlier. This could help you with parsing a packet.

[code]
'===============================
'PacketDebuffer Class
'By Bethra, aka. Sorc.Polgara =)
'===============================

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal

numBytes As Long)

Private Debuffer As String '// Debuffering string

'Sets the Debuffer string
Public Function DebuffPacket(PacketData As String)
Debuffer = PacketData
End Function

'Resets/clears the Debuffer
Public Function Clear()
Debuffer = vbNullString
End Function

'=======================================================
'Public Functions that debuffer a part from the Debuffer
'=======================================================

'Debuffers a DWORD from the Debuffer
Public Function DebuffDWORD()
DebuffDWORD = GetDWORD(Debuffer)
RemoveDWORD
End Function

'Debuffers a WORD from the Debuffer
Public Function DebuffWORD()
DebuffWORD = GetWORD(Debuffer)
RemoveWORD
End Function

'Debuffers a BYTE from the Debuffer
Public Function DebuffBYTE()
DebuffBYTE = GetBYTE(Debuffer)
RemoveBYTE
End Function

'Debuffers a FILETIME from the Debuffer
Public Function DebuffFILETIME()
DebuffFILETIME = GetFILETIME(Debuffer)
RemoveFILETIME
End Function

'Debuffers a null-terminating string from the Debuffer
Public Function DebuffNTString()
DebuffNTString = GetNTString(Debuffer)
RemoveNTString
End Function

'=====================================================
'Public Functions that remove a part from the Debuffer
'=====================================================

'Removes a BYTE from the Debuffer
Public Function RemoveBYTE()
Debuffer = Mid(Debuffer, 2)
End Function

'Removes a WORD from the Debuffer
Public Function RemoveWORD()
Debuffer = Mid(Debuffer, 3)
End Function

'Removes a DWORD from the Debuffer
Public Function RemoveDWORD()
Debuffer = Mid(Debuffer, 5)
End Function

'Removes a FILETIME structure from the Debuffer
Public Function RemoveFILETIME()
Debuffer = Mid(Debuffer, 9)
End Function

'Removes a non-terminating string from the Debuffer
Public Function RemoveNTString()
Dim Pos As Integer
Pos = InStr(1, Debuffer, Chr(0), vbBinaryCompare)
Debuffer = Mid(Debuffer, Pos + 1)
End Function

'=======================================================
'Functions that get parts from the front of the Debuffer
'=======================================================

'Gets a BYTE from the Debuffer
Function GetBYTE() As String
Dim PBYTE As String
PBYTE = Mid(Debuffer, 1, 1)
GetBYTE = PBYTE
End Function

'Gets a WORD from the Debuffer
Function GetWORD() As String
Dim WORD As String * 2
CopyMemory WORD, Debuffer, 2
GetWORD = WORD
End Function

'Gets a DWORD from the Debuffer
Function GetDWORD() As String
Dim DWORD As String * 4
CopyMemory DWORD, Debuffer, 4
GetDWORD = DWORD
End Function

'Gets a FILETIME from the Debuffer
Function GetFILETIME() As String
Dim FILETIME As String * 8
CopyMemory FILETIME, Debuffer, 8
GetFILETIME = FILETIME
End Function

'Gets a non-terminating string from the Debuffer
Function GetNTString() As String
Dim NTString As String
Dim Pos As Integer
Pos = InStr(1, Debuffer, Chr(0), vbBinaryCompare)
NTString = Mid(Debuffer, 1, Pos)
GetNTString = NTString
End Function

'=====================Credits============================
'DarkMinion for using his PacketBuffer class as a guide,
'this is the first class I have ever made =)
'-----------------
'Bot Developement Forum members who helped me understand
'some stuff that I need to know inorder to make this =)
'=======================================================
[/code]

Here is how you might use it to parse the parts of a BNCS header from the packet

[code]
Dim PDebuf As PacketDebuffer
Set PDebuf = New PacketDebuffer

With PDebuf
.DebuffPacket Packet
PacketConst = .DebuffBYTE
PacketID = .DebuffBYTE
PacketSize = .DebuffWORD
End With
[/code]
August 25, 2004, 9:18 PM

Search