Valhalla Legends Forums Archive | Battle.net Bot Development | [D2GS] Problems with parse of the decompressed data.

AuthorMessageTime
mime
Hello, I have some problem with parsing d2gs decompressed data. At the parse I meet unknown packets...

It is an example of decompressing and parse of  first big packet after game logon:
[code]
Compressed packet:

17 5f a0 14 c6 b1 b9 48 a8 35 8c a3 2f ff 82 1b ._.....H.5../...
f3 25 62 e8 66 6c e8 6f bf 02 2c bf dd 7b bd c2 .%b.fl.o..,..{..
5d c2 65 c2 6d c2 75 d0 5d 8b 9f b8 ef 68 79 b8 ].e.m.u.]....hy.
f9 68 06 dc 07 da 02 34 25 db 40 4a 7c 0a 5c 3a .h.....4%.@J|.\:
bf 8f 96 db 6d b2 f8 c2 f7 77 7b df dd df 7e ef ....m....w{...~.
bb bb bd f1 c0 94 87 ef 7a 0f e4 73 47 bc e6 e7 ........z..sG...
0c 1a 0f 06 ac 1a 12 6f 7b df bc c0 d1 d7 7b de .......o{.....{.
e9 b7 ff ff 8f 83 c6 60 68 52 6b ff f0 fb ad ff .......`hRk.....
ad e7 72 03 90 12 02 b6 b7 9d c8 0a de b6 40 48 ..r...........@H
0f ad ad ff ff fa de b6 b7 ff f3 1b f1 89 f9 cc ................
5c 39 74 87 2b 93 d4 1f 14 5c e5 01 99 d2 28 18 \9t.+....\....(.
62 a0 c2 2f 1d 18 c2 33 ce 4c 8f 0e 8c c2 f9 02 b../...3.L......
73 02 a8 0d cd 1f 9a 56 c6 5c 3f 0c 80 21 10 f2 s......V.\?..!..
02 08 a3 a0 2c 84 4e 34 5f df 9a d6 c6 50 ed 95 ....,.N4_....P..
a2 a8 7a 84 79 0b 2e 66 26 17 15 49 c3 2a d4 8b ..z.y..f&..I.*..
82 24 83 e8 07 07 e0 1d 11 3c 3c 1e c0 4b 2c 34 .$.......<<..K,4
2c 92 c4 22 90 31 00 26 60 7c 1f 8e e0          ,..".1.&`|...
Length: 269

Decompressed packet:

59 01 00 00 00 04 44 72 75 67 46 72 65 65 00 00 Y.....DrugFree..
00 00 00 00 00 00 00 00 00 00 aa 00 01 00 00 00 ................
0c 69 59 f9 ff 1f 76 00 01 00 00 00 94 13 01 00 .iY...v.........
00 00 00 00 01 02 00 01 01 00 01 d9 00 01 da 00 ................
01 db 00 01 dc 00 01 04 00 01 05 00 01 03 00 01 ................
7f 00 14 82 00 01 8a 00 14 8d 00 01 91 00 14 94 ...............
00 06 95 00 14 99 00 03 9b 00 01 23 00 01 00 00 ...........#....
00 00 8a 00 ff ff ff ff 97 5e 01 00 01 01 01 01 .........^......
00 01 00 01 00 00 00 00 01 01 01 00 00 01 00 00 ................
00 01 01 00 00 01 01 01 01 01 00 01 00 00 77 28 ..............w(
06 00 00 00 00 00 01 00 01 00 04 00 00 00 00 00 ................
00 00 19 10 01 00 01 00 1d 00 01 18 05 10 81 11 ................
05 10 25 00 01 00 01 00 01 00 01 00 00 00 01 00 ..%.............
09 10 01 02 01 00 01 00 01 00 01 12 00 00 01 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
8a 81 00 00 09 10 4d 14 00 00 00 00 00 00 00 00 ......M.........
00 00 00 00 00 00 29 00 00 00 80 00 00          ......)......
Length: 269

Start parsing...

Packet: 0x59
01 00 00 00 04 44 72 75 67 46 72 65 65 00 00 00 .....DrugFree...
00 00 00 00 00 00 00 00 00                      .........
Length: 25

Packet: 0xaa
00 01 00 00 00 0c 69 59 f9 ff 1f                ......iY...
Length: 11

Packet: 0x76
00 01 00 00 00                                  .....
Length: 5

Packet: 0x94
01 00 00 00 00 00 01 02 00 01 01 00 01 d9 00 01 ................
da 00 01 db 00 01 dc 00 01 04 00 01 05 00 01 03 ................
00 01 7f 00 14 82 00 01 8a 00 14 8d 00 01 91 00 ...............
14 94 00 06 95 00 14 99 00 03 9b 00 01 23 00    .............#.
Length: 63

Here the beginning of unknown packets ...
[/code]

The remained data :
[code]
02 00 00 00 00 8a 00 ff ff ff ff 97 5e 01 00 01 ............^...
01 01 01 00 01 00 01 00 00 00 00 01 01 01 00 00 ................
01 00 00 00 01 01 00 00 01 01 01 01 01 00 01 00 ................
00 77 28 06 00 00 00 00 00 01 00 01 00 04 00 00 .w(.............
00 00 00 00 00 19 10 01 00 01 00 1d 00 01 18 05 ................
10 81 11 05 10 25 00 01 00 01 00 01 00 01 00 00 .....%..........
00 01 00 09 10 01 02 01 00 01 00 01 00 01 12 00 ................
00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 8a 81 00 00 09 10 4d 14 00 00 00 00 00 .........M......
00 00 00 00 00 00 00 00 00 29 00 00 00 80 00 00 .........)......
00 00                                            ..
Length: 162
[/code]

In what a problem? May be wrong length?

Thanks.

December 6, 2009, 12:18 PM
mime
I cannot find packets  yet 0x9D, 0x26, 0x9C ... : (
December 6, 2009, 4:49 PM
Purri
[code]Packet: 0x59
01 00 00 00 04 44 72 75 67 46 72 65 65 00 00 00 .....DrugFree...
00 00 00 00 00 00 00 00 00                      .........
Length: 25[/code]

Even Length is 25, you need to skip first byte and start parsing at Length: 26. Hard to explaing with bad english
December 6, 2009, 6:51 PM
mime
[quote author=Purri link=topic=18124.msg183815#msg183815 date=1260125461]
[code]Packet: 0x59
01 00 00 00 04 44 72 75 67 46 72 65 65 00 00 00 .....DrugFree...
00 00 00 00 00 00 00 00 00                       .........
Length: 25[/code]

Even Length is 25, you need to skip first byte and start parsing at Length: 26. Hard to explaing with bad english
[/quote]

26? Why? As I understand, length of 0x59  packet == 25 (without packetId).
December 7, 2009, 7:25 AM
zeroirc
[code]
Public m_PacketLengths() As Variant
m_PacketLengths = Array(&H1, &H8, &H1, &HC, &H1, &H1, &H1, &H6, &H6, &HB, &H6, &H6, &H9, &HD, &HC, &H10, _
                                        &H10, &H8, &H1A, &HE, &H12, &HB, &H0, &H0, &HF, &H2, &H2, &H3, &H5, &H3, &H4, &H6, _
                                        &HA, &HC, &HC, &HD, &H5A, &H5A, &H0, &H28, &H67, &H61, &HF, &H0, &H8, &H0, &H0, _
                                        &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H22, _
                                        &H8, &HD, &H0, &H6, &H0, &H0, &HD, &H0, &HB, &HB, &H0, &H0, &H0, &H10, &H11, _
                                        &H7, &H1, &HF, &HE, &H2A, &HA, &H3, &H0, &H0, &HE, &H7, &H1A, &H28, &H0, _
                                        &H5, &H6, &H26, &H5, &H7, &H2, &H7, &H15, &H0, &H7, &H7, &H10, &H15, &HC, _
                                        &HC, &H10, &H10, &HA, &H1, &H1, &H1, &H1, &H1, &H20, &HA, &HD, &H6, &H2, _
                                        &H15, &H6, &HD, &H8, &H6, &H12, &H5, &HA, &H4, &H14, &H1D, &H0, &H0, &H0, _
                                        &H0, &H0, &H0, &H2, &H6, &H6, &HB, &H7, &HA, &H21, &HD, &H1A, &H6, &H8, &H0, _
                                        &HD, &H9, &H1, &H7, &H10, &H11, &H7, &H0, &H0, &H7, &H8, &HA, &H7, &H8, &H18, _
                                        &H3, &H8, &H0, &H7, &H0, &H7, &H0, &H7, &H0, &H0, &H0, &H0, &H1)

Public Function GetSize(ByVal id As Byte, ByVal Data As String) As Integer
Dim interimVal As Integer


If id > 179 Then
GetSize = -2: Exit Function
End If

interimVal = m_PacketLengths(id)


If interimVal = 0 Then
 

  Select Case id
  Case &H9C
    GetSize = Asc(Mid$(Data, 3, 1)): Exit Function
  Case &H9D
    GetSize = Asc(Mid$(Data, 3, 1)): Exit Function
  Case &H5B
    GetSize = Asc(Mid$(Data, 2, 1)): Exit Function
  Case &HA8
    GetSize = Asc(Mid$(Data, 7, 1)): Exit Function
  Case &HAA
    GetSize = Asc(Mid$(Data, 7, 1)): Exit Function
  Case &HAC
    GetSize = Asc(Mid$(Data, 13, 1)): Exit Function
  Case &HAE
    GetSize = GetDWORD2(Mid(data, 2, 2)) + 3: Exit Function
  Case &H26
    p_data = Mid$(Data, 2)
    GetSize = Parsechat: Exit Function
  Case &H94
    GetSize = 6 + (Asc(Mid$(Data, 1, 1)) * 3): Exit Function
  End Select

End If

GetSize = interimVal: Exit Function
End Function
[/code]
December 7, 2009, 8:46 AM
rabbit
Absolutely horrible code.
December 7, 2009, 1:13 PM
Purri
Im using ringo's DLL to get packet size:
[code]
Public Function GetPacketSize(data As String) As Long
    Dim tmpData$, RetSize&, OffSet&
    tmpData = data
    Call GamePacketSize(tmpData, RetSize, OffSet)
    data = Mid(data, 1 + OffSet) 'Remove Lengh header
    GetPacketSize = RetSize
End Function
[/code]
December 8, 2009, 3:20 AM
mime
Where it is possible to find the code of GetPacketSize function from ringo's dll?
December 8, 2009, 7:21 AM
Ringo
At a quick glance, it look's like you're decompresssing incorrectly, and just decompressing through the joins/headers.
I say this mainly because:
[quote]
Compressed packet:
17 5f a0 14 c6 b1 b9 48 a8 35 8c a3 2f ff 82 1b......
Length: 269
[/quote]
Assumeing you have posted the compressed data in full (so we can step through it, all the way to decompressed form) so we can help you easyer.
The 1st and/or 2nd byte of the compressed data, is the compressed packet header. This will tell you how long the compressed packet is, and how many bytes total the compressed packet header uses (1 or 2)
So for a compressed packet starting with 0x17, the header lengh (offset) should be 1 (size of the 0x17 byte) and the lengh of the compressed packet should be 0x16 (0x01+0x16=0x17), then you would decompress 16 bytes into 5f a0 14..... etc.

This post has examples of before and after decompression, stepping through from start to finish, of the enter game data.
https://davnit.net/bnet/vL/index.php?topic=11756.msg123533#msg123533
This should proove very usefull as test data, to run through you're parser, decompress etc, then compare the decompressed results.


The compression code in D2GS.dll, is here: https://davnit.net/bnet/vL/index.php?topic=13890.msg141520#msg141520
And the decompression code, here: https://davnit.net/bnet/vL/index.php?topic=585.msg4318#msg4318
Both should contain the compressed packet header functions.

I'm pretty sure you're problem can be solved with the above 3 links.

hope this helps.
December 8, 2009, 9:14 AM
mime
Ringo, Thanks you for your answer :)

[code]
Compressed packet:

17 5f a0 14 c6 b1 b9 48 a8 35 8c a3 2f ff 82 1b ._.....H.5../...
f3 25 62 e8 66 6c e8 6f bf 02 2c bf dd 7b bd c2  ....
[/code]

This compressed data without length bytes.

If to you it is not difficult, you can check up at yourselves these packets ?

I have just capture this package by means of Wireshark:

[code]
0000   f1 11 17 57 e8 05 31 ac 6e 52 2a 0d 63 28 cb ff
0010   e0 86 bf 32 56 2e 86 66 ce 86 fa fc 08 b2 bf dd
0020   7b bd c2 5d c2 65 c2 6d c2 75 d0 5d 8b 9f b8 ef
0030   68 79 b8 f9 68 06 dc 07 da 02 34 25 db 40 4a 7c
0040   0a 5c 3a af e3 e5 b6 db 6c be 30 bd dd de f7 f7
0050   77 df bb ee ee ef 7c 70 25 21 fb de 83 f9 1c d1
0060   ef 39 b9 c3 06 83 c1 ab 06 84 9b de f7 ef 30 34
0070   75 de f7 ba 6d ff ff e3 e0 f1 98 1a 14 9a ff fc
0080   3e eb 7f eb 79 dc 80 e4 04 80 ad ad e7 72 02 b7
0090   ad 90 12 03 eb 6b 7f ff fe b7 ad ad ff fc c6 bf
00a0   18 9f 9c c5 c3 97 48 72 b9 3d 41 f1 45 ce 50 19
00b0   9d 22 81 86 2a 0c 22 f1 d1 8c 23 3c e4 c8 f0 e8
00c0   cc 2f 90 27 30 2a 80 dc d0 e3 9a 56 c6 5c 3f 0c
00d0   80 21 10 f2 02 08 a3 a0 2c 84 4e 34 23 fa fc d6
00e0   b6 32 87 6c ad 15 43 d4 23 c8 59 73 31 30 b8 aa
00f0   4e 19 56 a4 5c 11 24 1f 40 38 3f 00 e8 89 e1 e0
0100   f6 02 59 61 a1 64 96 21 14 81 88 01 33 03 e0 fc
0110   77

// length 273
[/code]

My program log:
[code]

Compressed data: // (without length bytes)

17 57 e8 05 31 ac 6e 52 2a 0d 63 28 cb ff e0 86 .W..1.nR*.c(....
bf 32 56 2e 86 66 ce 86 fa fc 08 b2 bf dd 7b bd .2V..f........{.
c2 5d c2 65 c2 6d c2 75 d0 5d 8b 9f b8 ef 68 79 .].e.m.u.]....hy
b8 f9 68 06 dc 07 da 02 34 25 db 40 4a 7c 0a 5c ..h.....4%.@J|.\
3a af e3 e5 b6 db 6c be 30 bd dd de f7 f7 77 df :.....l.0.....w.
bb ee ee ef 7c 70 25 21 fb de 83 f9 1c d1 ef 39 ....|p%!.......9
b9 c3 06 83 c1 ab 06 84 9b de f7 ef 30 34 75 de ............04u.
f7 ba 6d ff ff e3 e0 f1 98 1a 14 9a ff fc 3e eb ..m...........>.
7f eb 79 dc 80 e4 04 80 ad ad e7 72 02 b7 ad 90 .y........r....
12 03 eb 6b 7f ff fe b7 ad ad ff fc c6 bf 18 9f ...k...........
9c c5 c3 97 48 72 b9 3d 41 f1 45 ce 50 19 9d 22 ....Hr.=A.E.P.."
81 86 2a 0c 22 f1 d1 8c 23 3c e4 c8 f0 e8 cc 2f ..*."...#<...../
90 27 30 2a 80 dc d0 e3 9a 56 c6 5c 3f 0c 80 21 .'0*.....V.\?..!
10 f2 02 08 a3 a0 2c 84 4e 34 23 fa fc d6 b6 32 ......,.N4#....2
87 6c ad 15 43 d4 23 c8 59 73 31 30 b8 aa 4e 19 .l..C.#.Ys10..N.
56 a4 5c 11 24 1f 40 38 3f 00 e8 89 e1 e0 f6 02 V.\.$.@8?.......
59 61 a1 64 96 21 14 81 88 01 33 03 e0 fc 77     Ya.d.!....3...w
Length: 271

Decompressed data:

59 02 00 00 00 04 44 72 75 67 46 72 65 65 00 00 Y.....DrugFree..
00 00 00 00 00 00 00 00 00 00 aa 00 02 00 00 00 ................
0c 69 59 f9 ff 1f 76 00 02 00 00 00 94 13 02 00 .iY...v.........
00 00 00 00 01 02 00 01 01 00 01 d9 00 01 da 00 ................
01 db 00 01 dc 00 01 04 00 01 05 00 01 03 00 01 ................
7f 00 14 82 00 01 8a 00 14 8d 00 01 91 00 14 94 ...............
00 06 95 00 14 99 00 03 9b 00 01 23 00 02 00 00 ...........#....
00 00 8a 00 ff ff ff ff 97 5e 01 00 01 01 01 01 .........^......
00 01 00 01 00 00 00 00 01 01 01 00 00 01 00 00 ................
00 01 01 00 00 01 01 01 01 01 00 01 00 00 77 28 ..............w(
06 00 00 00 00 00 01 00 01 00 04 00 00 00 00 00 ................
00 00 19 10 01 00 01 00 1d 00 01 18 05 10 81 11 ................
05 10 25 00 01 00 01 00 01 00 01 00 00 00 01 00 ..%.............
09 10 01 02 01 00 01 00 01 00 01 12 00 00 01 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
8a 81 00 00 09 10 4d 14 00 00 00 00 00 00 00 00 ......M.........
00 00 00 00 00 00 29 00 00 00 80 00 00 00 00     ......)........
Length: 271

[/code]

It is correct?
December 8, 2009, 6:24 PM
mime
up
December 27, 2009, 11:52 AM
Ringo
[quote author=mime link=topic=18124.msg183871#msg183871 date=1261914779]
up
[/quote]
You're asking us, to hardcode the above data into a program, set up a make-shift parser and step through it to find any brakes?

[quote author=Ringo link=topic=18124.msg183821#msg183821 date=1260263644]
This post has examples of before and after decompression, stepping through from start to finish, of the enter game data.
https://davnit.net/bnet/vL/index.php?topic=11756.msg123533#msg123533
This should proove very usefull as test data, to run through you're parser, decompress etc, then compare the decompressed results.

The compression code in D2GS.dll, is here: https://davnit.net/bnet/vL/index.php?topic=13890.msg141520#msg141520
And the decompression code, here: https://davnit.net/bnet/vL/index.php?topic=585.msg4318#msg4318
Both should contain the compressed packet header functions.
[/quote]
You can do all of that you're self, with the above link's, I don't think you can really expect more than that, no?
January 12, 2010, 1:44 AM

Search