DayZ Server Browsers - Part Two
Two years ago I wrote a post on DayZ server browsers and the A2S protocol (you should read that first). At the end of the post I mentioned the A2S_RULES query and a follow up post to cover how DayZ packs data into that response. Well, it's much later than I intended, but here it is!
To begin with, we will extend our existing Go code for sending Steam Server Queries. Instead of sending A2S_INFO this time, we will instead send A2S_RULES, which is 0x56. This is, again, guarded by the challenge system, so that code stays in place. Our example server this time is the WILDLANDZ Green County server at 51.81.8.81:27017.
package main
import (
"bytes"
"fmt"
"net"
"os"
)
func main() {
var rulesPacket bytes.Buffer
// packet type
rulesPacket.Write([]byte{0xFF, 0xFF, 0xFF, 0xFF})
// request type
rulesPacket.WriteByte(0x56)
// payload (0xFFFFFFFF to get challenge)
rulesPacket.Write([]byte{0xFF, 0xFF, 0xFF, 0xFF})
conn, err := net.Dial("udp", "51.81.8.81:27017")
if err != nil {
panic(err)
}
defer conn.Close()
response := sendPacket(conn, rulesPacket.Bytes())
if response[4] == 0x41 {
fmt.Println("Challenge packet received")
challenge := response[5:]
fmt.Printf("Challenge: %v\n", challenge)
// clear challenge request bytes
rulesPacket.Truncate(5)
// add the challenge bytes
rulesPacket.Write(challenge)
response = sendPacket(conn, rulesPacket.Bytes())
} else {
fmt.Println("Challenge packet not received")
}
fmt.Printf("Response: %v\n", response)
}
func sendPacket(conn net.Conn, pkt []byte) []byte {
_, err := conn.Write(pkt)
if err != nil {
panic(err)
}
response := make([]byte, 1024)
n, err := conn.Read(response)
if err != nil {
panic(err)
}
return response[:n]
}
A2S_RULES - Name / Value Pairs
This returns a relatively large block of information compared to A2S_INFO. At a glance, there are plenty of strings in there, with recognizable values. We can already tell this has mod names in it.
┌────────┬─────────────────────────┬─────────────────────────┬────────┬────────┐
│00000000│ ff ff ff ff 45 0d 00 01 ┊ 04 00 02 01 02 01 02 01 │××××E_⋄•┊•⋄••••••│
│00000010│ 02 0c 97 cb a7 48 04 76 ┊ 32 5b df 11 53 75 6d 6d │•_×××H•v┊2[וSumm│
│00000020│ 65 72 20 49 6e 20 41 6d ┊ 65 72 69 63 61 3c af 03 │er In Am┊erica<ו│
│00000030│ bf 04 0e 0b b9 da 0f 57 ┊ 5a 20 47 72 65 65 6e 20 │ו••×וW┊Z Green │
│00000040│ 43 6f 75 6e 74 79 7b 03 ┊ 4a a9 04 4e 0a b9 da 0e │County{•┊JוN_×ו│
│00000050│ 57 5a 20 41 6e 6e 69 76 ┊ 65 72 73 61 72 79 c3 dc │WZ Anniv┊ersary××│
│00000060│ 09 a9 04 a3 09 b9 da 07 ┊ 57 5a 20 43 6f 72 65 8b │_ו×_×ו┊WZ Core×│
│00000070│ 01 02 74 e0 04 a0 8a 59 ┊ aa 16 5a 65 6e 61 72 63 │••tו××Y┊וZenarc│
│00000080│ 68 69 73 74 27 73 20 4e ┊ 6f 00 02 04 00 74 65 73 │hist's N┊o⋄••⋄tes│
│00000090│ 20 4d 6f 64 c1 8f 3a f7 ┊ 04 ec 72 ae dc 15 5a 65 │ Mod××:×┊•×r×וZe│
│000000a0│ 6e 61 72 63 68 69 73 74 ┊ 27 73 20 43 6f 72 65 20 │narchist┊'s Core │
│000000b0│ 4d 6f 64 8f 13 c8 2e 04 ┊ a4 97 73 6c 09 45 61 72 │Modו×.•┊××sl_Ear│
│000000c0│ 20 50 6c 75 67 73 9a a2 ┊ b7 3d 04 97 28 a9 87 12 │ Plugs××┊×=•×(×ו│
│000000d0│ 44 61 79 5a 20 45 64 69 ┊ 74 6f 72 20 4c 6f 61 64 │DayZ Edi┊tor Load│
│000000e0│ 65 72 a7 2e e7 10 04 20 ┊ 9e b6 97 0e 44 61 62 73 │er×.ו• ┊××וDabs│
│000000f0│ 20 46 72 61 6d 65 77 6f ┊ 72 6b e0 db 9d 1c 04 54 │ Framewo┊rk××ו•T│
│00000100│ c4 fb 6c 0d 56 50 50 41 ┊ 64 6d 69 6e 00 03 04 00 │××l_VPPA┊dmin⋄••⋄│
│00000110│ 54 6f 6f 6c 73 c1 c6 af ┊ 68 04 04 b0 ef 5c 13 43 │Tools×××┊h••××\•C│
│00000120│ 6f 6d 6d 75 6e 69 74 79 ┊ 20 46 72 61 6d 65 77 6f │ommunity┊ Framewo│
│00000130│ 72 6b e3 82 d6 16 04 44 ┊ 34 d8 7e 0c 47 72 65 65 │rk××ו•D┊4×~_Gree│
│00000140│ 6e 20 43 6f 75 6e 74 79 ┊ 09 0b 43 6f 6f 6c 74 72 │n County┊_•Cooltr│
│00000150│ 61 69 6e 56 33 03 64 61 ┊ 62 04 64 61 79 7a 0b 47 │ainV3•da┊b•dayz•G│
│00000160│ 72 65 65 6e 43 6f 75 6e ┊ 74 79 05 48 6f 70 70 73 │reenCoun┊ty•Hopps│
│00000170│ 0e 4a 61 63 6f 62 5f 4d ┊ 61 6e 67 6f 5f 56 33 06 │•Jacob_M┊ango_V3•│
│00000180│ 4b 6f 54 39 70 41 03 56 ┊ 50 50 0a 5a 65 6e 61 00 │KoT9pA•V┊PP_Zena⋄│
│00000190│ 04 04 00 72 63 68 69 73 ┊ 74 19 50 76 50 20 7c 20 │••⋄rchis┊t•PvP | │
│000001a0│ 53 75 72 76 69 76 61 6c ┊ 20 7c 20 4e 6f 20 42 61 │Survival┊ | No Ba│
│000001b0│ 73 65 73 00 61 6c 6c 6f ┊ 77 65 64 42 75 69 6c 64 │ses⋄allo┊wedBuild│
│000001c0│ 00 30 00 63 6c 69 65 6e ┊ 74 50 6f 72 74 00 30 00 │⋄0⋄clien┊tPort⋄0⋄│
│000001d0│ 64 65 64 69 63 61 74 65 ┊ 64 00 31 00 69 73 6c 61 │dedicate┊d⋄1⋄isla│
│000001e0│ 6e 64 00 47 72 65 65 6e ┊ 43 6f 75 6e 74 79 00 6c │nd⋄Green┊County⋄l│
│000001f0│ 61 6e 67 75 61 67 65 00 ┊ 36 35 35 34 35 00 70 6c │anguage⋄┊65545⋄pl│
│00000200│ 61 74 66 6f 72 6d 00 77 ┊ 69 6e 00 72 65 71 75 69 │atform⋄w┊in⋄requi│
│00000210│ 72 65 64 42 75 69 6c 64 ┊ 00 30 00 72 65 71 75 69 │redBuild┊⋄0⋄requi│
│00000220│ 72 65 64 56 65 72 73 69 ┊ 6f 6e 00 31 32 39 00 74 │redVersi┊on⋄129⋄t│
│00000230│ 69 6d 65 4c 65 66 74 00 ┊ 31 35 00 │imeLeft⋄┊15⋄ │
└────────┴─────────────────────────┴─────────────────────────┴────────┴────────┘
The docs for A2S_RULES show a very simple name/value system. There is the response and packet type headers, then a uint16 of how many pairs are in the response.
┏━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━┯━━━━━━━━┯━━━━━━━━━━━━━━━┓
┃00000000│ ff ff ff ff ┊ │xxxx ┊ │ Response Type ┃
┠┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┨
┃00000004│ 45 ┊ │E ┊ │ Packet Type ┃
┠┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┨
┃00000005│ 0d 00 ┊ │x⋄ ┊ │ Rule Count ┃
┗━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━┷━━━━━━━━┷━━━━━━━━━━━━━━━┛
Each name/value is a null-terminated string, let's see what we've got for the first one.
┏━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━┯━━━━━━━━┯━━━━━━━┓
┃00000007│ 01 04 00 ┊ │xx⋄ ┊ │ Name ┃
┠┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┨
┃00000010│ 02 01 02 01 02 01 02 0c ┊ 97 cb a7 48 04 76 32 5b │xxxxxxxx┊xxxHxv2[│ Value ┃
┃00000026│ df 11 53 75 6d 6d 65 72 ┊ 20 49 6e 20 41 6d 65 72 │xxSummer┊ In Amer│ ┃
┃00000042│ 69 63 61 3c af 03 bf 04 ┊ 0e 0b b9 da 0f 57 5a 20 │ica<xxxx┊xxxxxWZ │ ┃
┃00000058│ 47 72 65 65 6e 20 43 6f ┊ 75 6e 74 79 7b 03 4a a9 │Green Co┊unty{xJx│ ┃
┃00000074│ 04 4e 0a b9 da 0e 57 5a ┊ 20 41 6e 6e 69 76 65 72 │xNxxxxWZ┊ Anniver│ ┃
┃00000090│ 73 61 72 79 c3 dc 09 a9 ┊ 04 a3 09 b9 da 07 57 5a │saryxxxx┊xxxxxxWZ│ ┃
┃00000106│ 20 43 6f 72 65 8b 01 02 ┊ 74 e0 04 a0 8a 59 aa 16 │ Corexxx┊txxxxYxx│ ┃
┃00000122│ 5a 65 6e 61 72 63 68 69 ┊ 73 74 27 73 20 4e 6f 00 │Zenarchi┊st's No⋄│ ┃
┗━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━┷━━━━━━━━┷━━━━━━━┛
Oh, uh, that's not very helpful.
Metadata Smuggling
Turns out, Bohemia is using the A2S_RULES response...creatively. There is a second data structure which is then packed into the response in chunks. Once the chunks are reassembled they can be parsed as their own data structure. This is something that is only very lightly documented, but has been used with other games. The main information I can find on it is on their wiki and specific to Arma 3; Arma 3: ServerBrowserProtocol2 and Arma 3: ServerBrowserProtocol3
Based on those documents, each chunk has a metadata header which contains two uint8 that are the number of chunks and which chunk this is (the index). Then, the value has binary data packed in as a null-terminated string. The largest size for these chunks appears to be 128 bytes, or 127 bytes of data plus the null termination.
One last complication is escape sequences. The docs show that there are three escape sequences, though it is not clear why. Obviously the null byte can not be sent as data, but it is not included in an escape sequence. This is quite probably a legacy issue and it doesn't bear thinking about too much.
| Escaped | Unescaped |
|---|---|
0x01 0x01 |
0x01 |
0x01 0x02 |
0x02 |
0x01 0x03 |
0x03 |
DayZ Packed Data
With our chunks unescaped and combined into one block of data, we can begin decoding things. First up is some headers. We have a protocol version, some bytes that I can't find any reference to, and finally a count of mods included in this data. You may think that protocol version aligns to the v2 or v3 docs for Arma 3, but sadly it does not. The format shares some shape, but they do not overlap in general.
┏━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━┯━━━━━━━━┯━━━━━━━━━━━━━━━━━━┓
┃00000000│ 02 ┊ │x ┊ │ Protocol Version ┃
┠┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┨
┃00000001│ 02 02 02 ┊ │xxx ┊ │ Flags? ┃
┠┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┨
┃00000004│ 0c ┊ │x ┊ │ Mod Count ┃
┗━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━┷━━━━━━━━┷━━━━━━━━━━━━━━━━━━┛
Mods
After this comes our first mod information block. This does match up to the documents above. We get a 4-byte hash of the mod (how to generate this on the client is unknown), then we have length encoded values for the Steam ID and the mod name. This is important for the Steam ID to conserve space, and the mod name because we can't include any null bytes, so the usual C strings won't work here.
The Steam ID length is number of bytes, so a 1 means read a uint8, a 2 means read a uint16 and a 3 or 4 means read a uint32. I am unsure if a value of 5 and use of a uint64 is possible, but the mod Steam ID's are still far away from the max uint32. The most recent DayZ mod on Steam at the time of writing this was 3_760_884_271, which leaves room for about 534 million more mods.
┏━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━┯━━━━━━━━┯━━━━━━━━━━━━━━━━━┓
┃00000005│ 97 cb a7 48 ┊ │xxxH ┊ │ Mod Hash ┃
┠┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┨
┃00000009│ 04 ┊ │x ┊ │ Steam ID Length ┃
┠┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┨
┃00000010│ 76 32 5b df ┊ │v2[x ┊ │ Steam ID ┃
┠┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┨
┃00000014│ 11 ┊ │x ┊ │ Name Length ┃
┠┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┨
┃00000015│ 53 75 6d 6d 65 72 20 49 ┊ 6e 20 41 6d 65 72 69 63 │Summer I┊n Americ│ Name ┃
┃00000031│ 61 ┊ │a ┊ │ ┃
┗━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━┷━━━━━━━━┷━━━━━━━━━━━━━━━━━┛
Keys
After we have enumerated all the mods, we get to signing key names. It starts with an uint8 of the number of keys, and then the length / value dance of strings for each.
┏━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━┯━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━┓
┃00000306│ 09 ┊ │x ┊ │ Signing Keys Count ┃
┠┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┨
┃00000307│ 0b ┊ │x ┊ │ Key Name Length ┃
┠┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┨
┃00000308│ 43 6f 6f 6c 74 72 61 69 ┊ 6e 56 33 │Cooltrai┊nV3 │ Name ┃
┗━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━┷━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━┛
I'm not sure of the utility here, as there is no enforcement of key authority being unique across all mods, so it's possible to have two Cooltrainv3 keys on your system, you just can't load them at the same time. Another mystery!
Description
Lastly, we get the server description, which can be set in the server configuration file
This is an arbitrary string and does the same length value encoding as all the others.
┏━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━┯━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━┓
┃00000383│ 19 ┊ │x ┊ │ Description Length ┃
┠┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┨
┃00000384│ 50 76 50 20 7c 20 53 75 ┊ 72 76 69 76 61 6c 20 7c │PvP | Su┊rvival |│ Description ┃
┃00000400│ 20 4e 6f 20 42 61 73 65 ┊ 73 │ No Base┊s │ ┃
┗━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━┷━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━┛
Other Keys
Interestingly, DayZ doesn't just use its special packed data format, it uses the name/value pairs for other information after the chunks as well.
┏━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━┯━━━━━━━━┯━━━━━━━┓
┃00000436│ 61 6c 6c 6f 77 65 64 42 ┊ 75 69 6c 64 00 │allowedB┊uild⋄ │ Name ┃
┠┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┨
┃00000449│ 30 00 ┊ │0⋄ ┊ │ Value ┃
┠┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┨
┃00000451│ 63 6c 69 65 6e 74 50 6f ┊ 72 74 00 │clientPo┊rt⋄ │ Name ┃
┠┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┨
┃00000462│ 30 00 ┊ │0⋄ ┊ │ Value ┃
┠┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┨
┃00000464│ 64 65 64 69 63 61 74 65 ┊ 64 00 │dedicate┊d⋄ │ Name ┃
┠┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┨
┃00000474│ 31 00 ┊ │1⋄ ┊ │ Value ┃
┠┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┨
┃00000476│ 69 73 6c 61 6e 64 00 ┊ │island⋄ ┊ │ Name ┃
┠┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┨
┃00000483│ 47 72 65 65 6e 43 6f 75 ┊ 6e 74 79 00 │GreenCou┊nty⋄ │ Value ┃
┠┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┨
┃00000495│ 6c 61 6e 67 75 61 67 65 ┊ 00 │language┊⋄ │ Name ┃
┠┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┨
┃00000504│ 36 35 35 34 35 00 ┊ │65545⋄ ┊ │ Value ┃
┠┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┨
┃00000510│ 70 6c 61 74 66 6f 72 6d ┊ 00 │platform┊⋄ │ Name ┃
┠┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┨
┃00000519│ 77 69 6e 00 ┊ │win⋄ ┊ │ Value ┃
┠┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┨
┃00000523│ 72 65 71 75 69 72 65 64 ┊ 42 75 69 6c 64 00 │required┊Build⋄ │ Name ┃
┠┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┨
┃00000537│ 30 00 ┊ │0⋄ ┊ │ Value ┃
┠┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┨
┃00000539│ 72 65 71 75 69 72 65 64 ┊ 56 65 72 73 69 6f 6e 00 │required┊Version⋄│ Name ┃
┠┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┨
┃00000555│ 31 32 39 00 ┊ │129⋄ ┊ │ Value ┃
┠┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┨
┃00000559│ 74 69 6d 65 4c 65 66 74 ┊ 00 │timeLeft┊⋄ │ Name ┃
┠┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┨
┃00000568│ 31 35 00 ┊ │15⋄ ┊ │ Value ┃
┗━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━┷━━━━━━━━┷━━━━━━━┛
There are a couple things in here that are clear while also confusing, like island being the name of the map, GreenCounty. That said, nothing here seems worth the bytes, but perhaps there is value here I just don't understand.
Conclusion
That's it, that's the data. There are some loose ends here, but this plus A2S_INFO gets us the core information about the server and what mods it is running, more than enough to populate the server browsers and tools like BattleMetrics. If you know more about these formats, please share!