mcpField
R
reversing-network-protocols

reversing-network-protocols

github.com/trilwu安全17747 次安装12 周前更新
代码仓库

关于 reversing-network-protocols

reversing-network-protocols 是用于分析未公开二进制网络协议的技能,面向安全研究和协议实现人员。它结合流量捕获与客户端代码分析,指导构建可解码、重放和模糊测试的解析器。

主要功能

  1. 01比较多条消息识别帧结构与字段
  2. 02分析客户端序列化和解析逻辑
  3. 03通过 Frida 钩取加密前后的数据
  4. 04构建 Wireshark、Kaitai Struct 或 scapy 解析器
  5. 05迭代验证并完善协议模型

适用场景

  1. 01分析没有公开规范的 TCP 或 UDP 协议
  2. 02解读 Wireshark 显示为原始数据的流量
  3. 03制作协议解析器或 Wireshark dissector
  4. 04在获授权的测试中重放或模糊测试消息

安装

复制下面的命令,在终端中运行。

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

安装后在 Claude Code 中输入/reversing-network-protocols确认已加载。

详细介绍

逆向分析网络协议

通过两个维度同时对未公开的二进制协议进行逆向分析:一是线路上的数据,展示实际传输的字节;二是客户端,展示生成这些字节的代码。单独依靠任何一方都不够——捕获数据告诉你哪些内容会变化,客户端告诉你为什么会变化——最终交付物是一个足够精确的解析器,用于解码、重放,并最终对协议进行模糊测试。

适用场景

  • 没有公开规范的专有或自定义 TCP/UDP 协议
  • Wireshark 将流量显示为原始 Data 字节,因为没有匹配的解析器
  • 必须结合捕获数据和客户端二进制文件进行解码的游戏、IoT、工业或 C2 协议
  • 构建 Wireshark 解析器、Kaitai Struct 规范或 scapy 层,以解析和重放协议

不适用场景

  • 已知或结构化协议——尤其是 Protobuf 或 gRPC,应使用 attacking-grpc-protobuf;标准协议已有解析器。
  • 防御性 PCAP 调查——威胁搜寻、IOC 提取、事件分诊,应使用 analyzing-network-traffic。
  • 逆向分析客户端二进制文件本身(反汇编、反编译)应使用 analyzing-binaries;可将其用于协议分析,再在此处构建协议结构。
  • 识别或破解加密算法——发现协议已加密后,应使用 reviewing-cryptography。

同时分析两端

从捕获数据入手,通过比较多条消息确定结构:

  • 分帧——消息如何确定结束位置:长度前缀(用于记录消息间载荷大小的字段)、分隔符或固定大小的记录。找到长度字段通常是第一个突破口。
  • 常量和魔数——每条消息中都相同的字节,通常代表标头、版本字段或类型标签。
  • 操作码/消息类型——与不同消息结构相对应的小型字段;按其对捕获数据分组。
  • 计数器和序列号——单调递增的字段。
  • 校验和——随载荷不可预测地变化的尾随字段;针对消息正文测试不同 CRC 变体。
  • TLV——许多自定义协议在发现规律后,都可解析为类型-长度-值三元组。
  • 字节序——根据已知长度进行确认:一个 260 字节的消息携带的是 04 01 还是 01 04?

从客户端入手,解决捕获数据无法说明的问题:

  • 逆向分析二进制文件(analyzing-binaries),找到序列化/解析代码,查看其如何构造和读取消息。
  • 使用 Frida 挂钩 send/recv(或应用的套接字封装),在加密前和解密后捕获缓冲区——这是读取加密协议而不破解加密算法的方法。
  • 如果协议经过加密,挂钩明文端;只有在必须脱离客户端操作时,才使用 reviewing-cryptography 来识别密码算法和密钥处理方式。

构建解析器

将恢复出的结构转化为可执行的工具,因为解析器既能证明你理解了协议,也是后续工作的工具:

  • Wireshark 解析器(Lua),逐字段解码实时捕获数据——这是针对更多流量验证假设的最快方法。
  • Kaitai Struct,以声明式方式描述二进制格式,并生成多种语言的解析器。
  • scapy 自定义层,既可解析消息,也可构造消息以供重放和模糊测试。

反复迭代:解码一批消息,找出无法解析的消息,再完善规范。格式错误的消息正说明你的模型有误,而不是噪声。

接下来做什么

可用的解析器能为安全工作提供基础:进行重放,测试服务端是否会验证序列、会话和身份验证;对单个字段(长度、类型标签、计数)进行模糊测试,寻找解析器漏洞;并分析协议层身份验证——nonce、会话令牌或 MAC 究竟能否防止重放和篡改,还是仅仅装饰用途。

应当摒弃的错误想法

  • “Wireshark 将其显示为原始数据,所以没什么可看的。” 没有匹配到解析器——这只是起点,并非死胡同。对比多条消息,找出帧结构和字段,或者编写解析器。
  • “它经过加密,所以我无法逆向分析。” 对客户端的发送和接收操作进行 Hook,在加密前读取明文。要理解协议,通常无需破解密码。
  • “我直接看十六进制数据就行。” 结构是通过对比多条消息才显现的——例如跟踪长度的字段、选择类型的字节。单独看一条消息会掩盖这些信息。
  • “解析器大部分都能用,只有一条消息解析失败——这样也差不多了。” 解析失败的消息正是能纠正你模型的反例。继续追查;真正的结构往往就藏在那里。
  • “重放消息不会有什么影响。” 对正在运行的服务重放消息会对该服务产生实际操作。应将其视为需要授权的测试,并在发送前分析重放的消息会产生什么作用。

参考资料

  • analyzing-binaries — 逆向分析客户端,读取其序列化代码
  • attacking-grpc-protobuf — 协议使用 Protobuf/gRPC 而非自定义协议时
  • analyzing-network-traffic — 防御性 PCAP 调查,而非协议逆向工程
  • reviewing-cryptography — 识别并评估协议使用的密码技术

评论

支持 Markdown