用途:手上有明文流量(pcap 或实时流)时,搞清消息长什么样、双方如何对话;适用于自定义/私有/未知协议的字段结构推断,以及 C2、固件通信协议的握手/心跳/结束等交互模式推演。密文流量需先解密;标准协议(HTTP/TLS/DNS)直接用 Wireshark 解码器;仅抓流量不属于本技能。
主要能力与用法:工具为 python3、scapy(pip install scapy,验证 python3 -c "import scapy; print(scapy.version)")、tshark、binwalk。步骤:1) 用 tshark -r out.pcap -q -z conv,tcp、-z io,stat,1 做长度/方向/时序聚类,找规律性心跳;2) 按连接+方向重组 TCP 单向字节流(依 SEQ 排序、去重、补乱序、记录 capture gap),再推断 framing(magic+length、分隔符、固定长度、TLV、连接关闭);UDP 等 datagram 保留消息边界,不做 SEQ 重组;3) 在重组流上扫描候选 magic 前缀并用长度递推约束验证;4) 推断长度字段(试大小端)、类型字段、CRC/校验(crcmod 或异或),可用差分法定位关键字段;5) 用 Scapy 自定义 Packet 类写解析器并 show() 验证,批处理用持续 buffer parser,遇 gap 或解析失败即停;6) 按时间顺序推演状态机,记录方向、类型、字段、触发条件,找反例验证,产出消息格式表与状态图。
限制与常见坑:长度字段字节序错误会导致解析全错;CRC 需先识别再解析;心跳易与业务消息混淆;方向易看反;Scapy 内置层绑定可能劫持自定义载荷,需 split_layers 或 override guess_payload_class;短包会静默降级 Raw,需先检查长度并做 round-trip 验证;重注入需区分 FCS(4 字节)与以太网头(14 字节)缺失;序列化/反序列化需双向互证;私有协议无解析器时可写 Lua dissector 或 Python 离线分析;数据无规律先考虑加密/压缩,重放被拒需处理 seq/nonce;最终以还原帧结构发一帧、服务端响应一致作为闭环验证。部分细节(如具体协议实现)资料未提供。