mcpField
R
reversing-network-protocols

reversing-network-protocols

github.com/trilwuSecurity17747 installsUpdated 12w ago
Repository

About reversing-network-protocols

reversing-network-protocols is a skill for security researchers and protocol implementers examining undocumented binary network protocols. It combines traffic captures with client-code analysis to guide parsers that decode, replay, and fuzz messages.

Key features

  1. 01Compare messages to identify framing and fields
  2. 02Analyze client serialization and parsing code
  3. 03Hook pre- and post-encryption data with Frida
  4. 04Build Wireshark, Kaitai Struct, or scapy parsers
  5. 05Iterate to validate and refine protocol models

Use cases

  1. 01Examine undocumented TCP or UDP protocols
  2. 02Interpret traffic Wireshark shows as raw data
  3. 03Create a protocol parser or Wireshark dissector
  4. 04Replay or fuzz messages in authorized testing

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/trilwu/secskills --skill reversing-network-protocols

After installing, type/reversing-network-protocolsin Claude Code to confirm it loaded.

Details

From the project README

Reversing Network Protocols

An undocumented binary protocol is reverse-engineered from two sides at once: the wire, which shows you the bytes that actually flow, and the client, which shows you the code that produced them. Neither alone is enough — the capture tells you what varies, the client tells you why — and the deliverable is a parser precise enough to decode, replay, and eventually fuzz the protocol.

When to Use

  • A proprietary or custom TCP/UDP protocol with no public specification
  • Traffic Wireshark displays as raw Data bytes because no dissector matches
  • Game, IoT, industrial, or C2 protocols you must decode from captures plus the client binary
  • Building a Wireshark dissector, a Kaitai Struct spec, or a scapy layer to parse and replay a protocol

When NOT to Use

  • A known/structured protocol — Protobuf or gRPC specifically is attacking-grpc-protobuf; standard protocols have dissectors already.
  • Defensive PCAP investigation — hunting, IOC extraction, incident triage — is analyzing-network-traffic.
  • Reversing the client binary itself (disassembly, decompilation) is analyzing-binaries; do that in service of the protocol, then structure it here.
  • Identifying or breaking the crypto once you find the protocol is encrypted — reviewing-cryptography.

Work Both Sides

From the capture, establish structure by comparing many messages:

  • Framing — how a message knows where it ends: a length prefix (a field that tracks payload size across messages), a delimiter, or fixed-size records. Finding the length field is usually the first breakthrough.
  • Constants and magic — bytes identical across every message mark headers, version fields, or type tags.
  • Opcode / message type — a small field that correlates with different message shapes; group captures by it.
  • Counters and sequence numbers — fields that increment monotonically.
  • Checksums — a trailing field that changes unpredictably with the payload; test CRC variants against the message body.
  • TLV — many custom protocols are type-length-value triplets once you see the pattern.
  • Endianness — confirm from a known length: does a 260-byte message carry 04 01 or 01 04?

From the client, resolve what the capture cannot:

  • Find the serialization/parsing code by reversing the binary (analyzing- binaries), and read how it builds and consumes a message.
  • Hook send/recv (or the app's socket wrapper) with Frida to capture the buffer before encryption and after decryption — this is how you read an encrypted protocol without breaking the crypto.
  • If the protocol is encrypted, hook the plaintext side; identify the cipher and key handling with reviewing-cryptography only if you must operate off-client.

Build a Parser

Turn the recovered structure into something executable, because a parser is both the proof you understood the protocol and the tool for everything after:

  • Wireshark dissector (Lua) to decode live captures field by field — the fastest way to validate a hypothesis against more traffic.
  • Kaitai Struct to describe the binary format declaratively and generate parsers in several languages.
  • scapy custom layers to both parse and craft messages for replay and fuzzing.

Iterate: decode a batch, find the message that does not parse, refine the spec. The malformed message is where your model is wrong, not noise.

Then What

A working parser enables the security work: replay to test whether the server validates sequence, session, and authentication; fuzz individual fields (lengths, type tags, counts) to find parser bugs; and reason about protocol-level auth — whether nonces, session tokens, or MACs actually prevent replay and tampering, or are decorative.

Rationalizations to Reject

  • "Wireshark shows it as raw data, so there's nothing to see." No dissector matched — that is the starting point, not a dead end. Diff messages to find framing and fields, or write a dissector.
  • "It's encrypted, so I can't reverse it." Hook the client's send/recv to read plaintext before encryption. You rarely need to break the cipher to understand the protocol.
  • "I'll just eyeball the hex." Structure emerges from comparison across many messages — the field that tracks length, the byte that selects type. One message in isolation hides all of it.
  • "The parser mostly works, one message fails — close enough." The failing message is the counterexample that corrects your model. Chase it; it is where the real structure is.
  • "Replaying it is harmless." Replay against a live service acts on that service. Treat it as testing that needs authorization, and reason about what a replayed message does before sending it.

References

  • analyzing-binaries — reversing the client to read its serialization code
  • attacking-grpc-protobuf — when the protocol is Protobuf/gRPC, not custom
  • analyzing-network-traffic — defensive PCAP investigation, not protocol RE
  • reviewing-cryptography — identifying and assessing the protocol's crypto

Comments

Markdown supported