From 34b4cfc27b7d8359605dfd051ce3ebc2403d8eee Mon Sep 17 00:00:00 2001 From: Bottersnike Date: Mon, 17 Jan 2022 19:40:43 +0000 Subject: [PATCH] Lots of stuff about names --- images/parse_packet.png | Bin 0 -> 22660 bytes images/parse_packet_header_a.png | Bin 0 -> 6503 bytes images/parse_packet_header_b.png | Bin 0 -> 9422 bytes images/parse_packet_header_c.png | Bin 0 -> 6635 bytes styles.css | 11 +- templates/base.html | 2 +- templates/pages/packet.html | 214 ++++++++++++++++++++++++------- 7 files changed, 179 insertions(+), 48 deletions(-) create mode 100644 images/parse_packet.png create mode 100644 images/parse_packet_header_a.png create mode 100644 images/parse_packet_header_b.png create mode 100644 images/parse_packet_header_c.png diff --git a/images/parse_packet.png b/images/parse_packet.png new file mode 100644 index 0000000000000000000000000000000000000000..c20df7f30d20b9e06bf6d32b6eb3f612071f901b GIT binary patch literal 22660 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

r!J7Kaib|aVd4hoS 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 NoH~25#O!kPzX1y{{o4Ql literal 0 HcmV?d00001 diff --git a/images/parse_packet_header_a.png b/images/parse_packet_header_a.png new file mode 100644 index 0000000000000000000000000000000000000000..c98f402bafcd2e2f9f074f9972ca4816a5984f63 GIT binary patch literal 6503 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 literal 0 HcmV?d00001 diff --git a/images/parse_packet_header_b.png b/images/parse_packet_header_b.png new file mode 100644 index 0000000000000000000000000000000000000000..46483f4308f572265e50ba19ba0e01f459c8a573 GIT binary patch literal 9422 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 literal 0 HcmV?d00001 diff --git a/images/parse_packet_header_c.png b/images/parse_packet_header_c.png new file mode 100644 index 0000000000000000000000000000000000000000..976db5bc5772572ecb904a9a72356225adac6220 GIT binary patch literal 6635 zcmchccQjmYx5vk5!vw=m%B?_G2e*YEePd*Aoo_r7=CKkmAJob#M#uXWb5_Bs36-_PDp+#N%0DoPeg002Ox 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 PKm*X#G}I_Zpd$VaF}Oa! literal 0 HcmV?d00001 diff --git a/styles.css b/styles.css index 5b50cb4..d17b594 100644 --- a/styles.css +++ b/styles.css @@ -96,16 +96,21 @@ pre { summary { user-select: none; cursor: pointer; + color: #c7254e; } details { - background: lightblue; - border: 1px solid cornflowerblue; - padding: 4px; + background: #f9f2f4; + border: 1px solid #c7b3b8; + border-radius: 2px; + padding: 4px 8px; margin: 4px 0; overflow-x: auto; max-width: 100%; } +details code { + background: #fff; +} table.nav { padding-right: 1px; diff --git a/templates/base.html b/templates/base.html index cc93adb..b9b5a2b 100644 --- a/templates/base.html +++ b/templates/base.html @@ -7,7 +7,7 @@ {% block title %}{% endblock %}{% if self.title() %} | {% endif %}e-Amusement API - + diff --git a/templates/pages/packet.html b/templates/pages/packet.html index 3b577dc..64ccbf0 100644 --- a/templates/pages/packet.html +++ b/templates/pages/packet.html @@ -98,7 +98,7 @@

Every packet starts with the magic byte 0xA0. Following this is the content byte, the encoding byte, and then the 2's compliment of the encoding byte.

-

Currently known possible values for the content byte are:

+

Possible values for the content byte are:

@@ -123,7 +123,37 @@
Full names, schema only
-

I haven't seen 0x44, so no idea what that one does, before you ask.

+
+ Source code details +

Not totally cleaned these up yet, but the general concept of how packets are parsed can be seen fairly clearly. + At a high level, we have a single function that validates the header, parses out the schema, then goes to read + the body of the packet, if we're expecting it. The arguments to parse_packet_header will make more + sense in a moment.

+
+ +
libavs-win32.dll:0x1003483
+
+

parse_packet_header has a lot of things going on, so I'm just pulling out a few important snippets + here.

+
+
+
+ +
libavs-win32.dll:0x1003448c
+
+

We first read out four bytes from the start of the packet, and convert that to an integer; nothing especially + magic here. The next block however is potentially not the first that you might have expected to see. Based on + the two flags passed into the function arguments, we are going to subtract a value from this header. + Specifically, the first byte we subtract is always 0xa0, then the second byte are those + C value in the table above. +

+

Finally, we mask out the first two bytes, and assert that they're both null. That is, they are exactly equal to + the value we subtracted from them. Of note here is that the caller to this function "decides" what sort of + packet it is expecting.

+

We can also see the check for ~E here. If that check passes, we return the E byte, + otherwise we're going to error.

+
+

The encoding flag indicates the encoding for all string types in the packet (more on those later). Possible values are:

@@ -179,7 +209,8 @@

Data is assumed by default to be in ISO 8859 encoding. That is, for encodings 0x00 and - 0x40, no transformation is performed on the binary data to produce readable text.

+ 0x40, no transformation is performed on the binary data to produce readable text. +

ASCII encoding is true 7-bit ASCII, with the 8th bit always set to 0. This is validated.

Source code details @@ -209,57 +240,150 @@ technically made redundant as this structure is also terminated).

This part of the header defines the schema that the main payload uses.

-

A tag definition looks like:

+

A tag definition follows one of the following three formats:

+
    +
  • +

    Compressed names:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    0123456789101112131415
    TypenlenTag name
    Attributes and childrenFE
    +
  • +
  • +

    Full names, short length:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    0123456789101112131415
    Type0x40-0x64Tag name
    Attributes and childrenFE
    +
  • +
  • +

    Full names, long length:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    0123456789101112131415
    Type0x80-0x8f0x00-0xffTag name
    Attributes and childrenFE
    +
  • +
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0123456789101112131415
TypenlenTag name
Attributes and childrenFE
- -

The encoding of structure names varies depending on the packet content byte. If the content flag indicates we have - full names, then nlen will be masked with 0x40. The string length is the unmasked value, - +1 (0-length names make no sense anyway). We can then read off the correct number of bytes, and decode accordingly. +

The encoding of structure names varies depending on the packet content byte. If the content flag indicated we have a + full string, we first need to check if the value of the first byte exceeds 0x7f. If it does, we need to + read an additional byte. In the single byte case, we subtract 0x3f1 to get our real length. + In the two byte case we subtract 0x7fbf2. In the latter case, the maximum allowed length is + 0x1000.
+ 1 simplified from (length & ~0x40) + 0x01
+ 2 simplified from (length & ~0x8000) + 0x41

If we are instead parsing packed names, then the names are encoded as densely packed 6 bit values. The length prefix (nlen) determines the length of the final unpacked string. The acceptable alphabet is 0123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz, and the packed values are indecies - within this alphabet. + within this alphabet. The maximum length for a name in this mode is 36 bytes (0x24).

The children can be a combination of either attribute names, or child tags. Attribute names are represented by the byte 0x2E followed by a length prefixed name as defined above. Child tags follow the above - format. Type 0x2E must therefore be considered reserved as a possible structure type.

+ format. Type 0x2E must therefore be considered reserved as a possible structure type. As they carry + special meaning in text-bsaed XML encoding, attribute names beginning with __ are disallowed.

+ +
+ Source code details +

I'm not going to labour this one, so if you want to go look yourself:

+
    +
  • 6-packed name reader: libavs-win32.dll:0x10009f90
  • +
  • Unpacked name reader: libavs-win32.dll:0x1000a110
  • +
  • The call to the above: libavs-win32.dll:0x10034a57, with the __ checking starting + at libavs-win32:0x10034cfd for attributes (i.e. the JZ at 0x10034a7c) +
  • +
+

Attributes (type 0x2E) represent a string attribute. Any other attribute must be defined as a child tag. Is it notable that 0 children is allowable, which is how the majority of values are encoded.

+

All valid IDs, and their respective type, are listed in the following table. The bucket column here will be used later when unpacking the main data, so we need not worry about it for now, but be warned it exists and is possibly the least fun part of this format.

@@ -766,7 +890,9 @@ optional, however should be stripped during decoding.

All of these IDs are & 0x3F. Any value can be turned into an array by setting the 7th bit high (| 0x40). Arrays of this form, in the data section, will be an aligned size: u32 - immediately followed by size bytes' worth of (unaligned!) values of the unmasked type.

+ immediately followed by size bytes' worth of (unaligned!) values of the unmasked type. Despite being a + u32, the maximum length allowed is 0xffffff. +

Source code details @@ -794,7 +920,7 @@

This seems to suggest that internally arrays are represented as a normal node, with the array type, however when serializing it's converted into the array types we're used to (well, will be after the - next sections) by masking 0x40 onto the contained type.

+ next sections) by masking 0x40 onto the contained type.

Also of interest from this snippet is the fact that void, bin, str, and attr cannot be arrays. void and attr make sense, however str and bin are more interesting. I suspect this is because konami want to be able