Skip to content
Security
Skill

/reversing-network-protocols

Reverse engineer undocumented binary network protocols from packet captures and the client that speaks them — recovering framing and field structure, identifying length prefixes, opcodes, checksums and encryption, and building a Wireshark/Kaitai/scapy parser to replay or fuzz.

BOOST
From plugin
secskills
17094 skills
Install
$ npx -y skills add trilwu/secskills --skill reversing-network-protocols --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/reversing-network-protocols

Context preview

The summary Claude sees to decide when to auto-load this skill.

Reverse engineer undocumented binary network protocols from packet captures and the client that speaks them — recovering framing and field structure, identifying length prefixes, opcodes, checksums and encryption, and building a Wireshark/Kaitai/scapy parser to replay or fuzz.

SKILL.md

reversing-network-protocols.SKILL.md
name: reversing-network-protocols
description: Reverse engineer undocumented binary network protocols from packet captures and the client that speaks them — recovering framing and field structure, identifying length prefixes, opcodes, checksums and encryption, and building a Wireshark/Kaitai/scapy parser to replay or fuzz. Use when analyzing a proprietary TCP/UDP protocol, a game or IoT or C2 protocol with no spec, or traffic that Wireshark shows only as raw bytes.
verified: 2026-08-07

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
Read more
Ships withsecskills

**Security skills for Claude Code that encode the judgment professionals bring, not another wrapper around a scanner.** Offense, defense, and the reverse-engineering and code-audit core both sides share. Every skill is fact-checked against primary sources.

Get the whole plugin

Other skills on secskills.