【网络安全】——协议逆向与频繁序列提取:从流量中解码未知协议

目录

引言

一、为什么要结合频繁序列提取?

二、四步融合分析法

步骤1:原始流量采集与预处理

步骤2:多粒度序列模式挖掘

层1:单包内字节级频繁项

层2:跨数据包的行为序列

步骤3:关键字段定位与结构假设

通过频繁模式推导协议结构:

步骤4:动态验证与协议还原

三、实战案例:Pj某工控设备协议

背景

关键发现过程

四、对抗干扰策略

常见干扰类型与破解技巧

五、工具链推荐

六、总结


引言

在工业控制、物联网设备通信等场景中,面对私有协议时,工程师常陷入**“盲人摸象”**的困境——没有文档、没有符号信息,只有一串串难以理解的十六进制数据流。本文将提出一种创新方法:将频繁序列提取技术融入协议逆向工程,通过挖掘数据中的统计规律,快速定位协议头、指令类型、校验位等关键字段,大幅提升逆向效率。


一、为什么要结合频繁序列提取?

传统协议逆向依赖人工比对数据包差异,存在三大痛点:

  1. 效率低下:数百个数据包需逐一对比

  2. 主观性强:依赖经验猜测字段含义

  3. 易漏特征:难以发现长跨度关联

频繁序列提取的价值

  • 自动发现高频出现的固定字节序列(如协议头、状态码)

  • 识别指令与响应的关联模式(如A指令必触发B响应)

  • 定位变长字段的分隔符(如0x00结尾的字符串)


二、四步融合分析法

步骤1:原始流量采集与预处理

使用Wireshark捕获原始流量,按会话切分并转换为字节序列:

# 示例:从pcap提取TCP负载序列
from scapy.all import *packets = rdpcap("unknown_protocol.pcap")
sessions = packets.sessions()byte_sequences = []
for session in sessions.values():tcp_payloads = [bytes(p[TCP].payload) for p in session if TCP in p]if tcp_payloads:  byte_sequences.append(tcp_payloads)  # 每个会话的包序列

步骤2:多粒度序列模式挖掘

层1:单包内字节级频繁项
from mlxtend.frequent_patterns import apriori# 将每个字节位置视为一个项(item)
# 示例数据包: [0xaa, 0x01, 0xff], [0xaa, 0x02, 0xee]
transactions = [{'pos0:aa', 'pos1:01', 'pos2:ff'},{'pos0:aa', 'pos1:02', 'pos2:ee'}
]freq_items = apriori(transactions, min_support=0.5, use_colnames=True)
print(freq_items)

输出

   support      itemsets
0     1.0       (pos0:aa)  # 发现协议头固定为0xAA
层2:跨数据包的行为序列

使用PrefixSpan挖掘会话级操作码序列:

# 假设已从数据包中提取操作码(如第二个字节)
opcode_sequences = [[0x01, 0x03, 0x04],  # 会话1的操作码流[0x01, 0x04],         # 会话2[0x01, 0x03, 0x04]    # 会话3
]from prefixspan import PrefixSpan
ps = PrefixSpan(opcode_sequences)
ps.minlen = 2
freq_seqs = ps.frequent(2)  # 最小支持度2次# 输出:[(2, [0x01, 0x03]), (2, [0x01, 0x03, 0x04])]

结论:操作码0x01后常跟0x03,可能为登录→查询信息的固定流程。


步骤3:关键字段定位与结构假设

通过频繁模式推导协议结构:
字段位置候选假设验证方法
字节0固定头(Magic Number)全样本一致性检查
字节1指令类型(高频出现0x01)触发不同功能观察响应变化
字节4-5长度字段(与后续数据长度相关)计算Pearson相关系数
末2字节校验和(与前面数据存在数学关系)尝试CRC16/CRC32计算匹配

步骤4:动态验证与协议还原

编写脚本自动化验证假设:

def validate_checksum(packet):assumed_crc = packet[-2:]calculated_crc = crc16(packet[:-2])return assumed_crc == calculated_crcvalid_count = 0
for p in packets:if validate_checksum(p):valid_count +=1print(f"校验通过率: {valid_count/len(packets)*100}%")  
# 若通过率接近100%,则确认校验位假设正确

三、实战案例:Pj某工控设备协议

背景

某PLC设备通信协议未知,需实现以下功能逆向:

  • 读取寄存器值(功能码)

  • 设置设备地址(地址字段)

  • 异常状态码解析

关键发现过程

  1. 频繁头定位

    80%的数据包以0x48 0x53开头 → 确认为协议头
  2. 指令类型推断

    第3字节出现0x01(读)和0x02(写)的频率最高 → 功能码字段
  3. 地址字段验证

# 对比两个写地址请求包:
Packet1: 48 53 02 00 01 02 [00 00 00 01] ... 
Packet2: 48 53 02 00 01 02 [00 00 00 02] ...
# 响应包中地址字段变化 → 确认第7-10字节为设备地址

    4. 错误码提取

         当响应包第4字节为0xFF时,末字节出现0x01/0x02 → 错误子码


四、对抗干扰策略

常见干扰类型与破解技巧

干扰手段破解方法
随机填充字节过滤低频率项,关注稳定出现的字段
多协议复用先聚类(如按端口、包长),再分别分析
字段动态编码寻找编码前后的统计特征(如字节分布变化)
心跳包干扰剔除固定时间间隔的无关包

五、工具链推荐

  1. 流量预处理:Wireshark + Scapy(Python)

  2. 序列挖掘:SPMF(支持GSP、PrefixSpan算法)

  3. 自动化验证:Python + pwntools(自定义协议测试脚本)

  4. 可视化分析:NetworkX(绘制协议状态转移图)


六、总结

“数据即协议”——通过融合频繁序列提取与协议逆向技术,开发者能在无先验知识的情况下,快速定位关键字段并推测交互逻辑。该方法尤其适用于具有明显统计特征的私有协议逆向场景。

方法论价值

  • 将人工经验转化为可量化的模式识别

  • 为协议逆向提供自动化切入点

  • 降低对特定领域知识的依赖


扩展阅读标签#协议逆向 #频繁序列 #工控安全 #Python #Wireshark

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/71495.shtml

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    【PAT (Basic Level) Practice】——【数论】1013 数素数

    文章目录 一【题目难度】二【题目编号】三【题目描述】四【题目示例】五【解题思路】六【最终得分】七【代码实现】八【提交结果】 一【题目难度】 乙级 二【题目编号】 1013 数素数 三【题目描述】 令 Pi 表示第 i 个素数。现任给两个正整数 M≤N≤104,请输出…

    HCIA—IP路由静态

    一、概念及作用 1、概念:IP路由是指在IP网络中,数据从源节点到目的节点所经过的路径选择和数据转发的过程。 2、作用 ①实现网络互联:使不同网段的设备能够相互通信,构建大规模的互联网络 ②优化网络拓扑:根据网络…

    雷池WAF的为什么选择基于Docker

    Docker 是一种开源的容器化平台,可以帮助开发人员将应用程序及其所有依赖项打包到一个称为容器的独立、可移植的环境中。Docker 的核心概念包括以下几点: 容器:Docker 使用容器来封装应用程序及其依赖项,使其能够在任何环境中都能…

    图像分类项目2:鸟类图像分类

    1 数据集处理 1.1数据集下载 数据集来源:kaggle,网址:https://www.kaggle.com/,点击进入网站,左侧选择Datasets。 进入后搜索栏搜索关键词bird。此时出现很多数据集可以选择,推荐选择第一个或者第三个。…

    01_NLP基础之文本处理的基本方法

    自然语言处理入门 自然语言处理(Natural Language Processing, 简称NLP)是计算机科学与语言学中关注于计算机与人类语言间转换的领域,主要目标是让机器能够理解和生成自然语言,这样人们可以通过语言与计算机进行更自然的互动。 …

    利用opencv_python(pdf2image、poppler)将pdf每页转为图片

    1、安装依赖pdf2image pip install pdf2image 运行.py报错,因为缺少了poppler支持。 2、安装pdf2image的依赖poppler 以上命令直接报错。 改为手工下载: github: Releases oschwartz10612/poppler-windows GitHub 百度网盘: 百度网盘…

    IDEA入门及常用快捷键

    IDEA是java常用的IDE。当run一个.java文件时,其实是经历了先编译为.class,再运行的过程。 在project文件夹中,out文件夹存储编译的.class文件,src文件夹存储.java代码文件。 设置自动导包 快捷键: 格式化快捷键&…

    io学习----->文件io

    思维导图: 一.文件io的概念 文件IO:指程序和文件系统之间的数据交互 特点: 1.不存在缓冲区,访问速度慢 2.不可以移植,依赖于操作系统 3.可以访问不同的文件类型(软连接,块设备等) 4.文件IO属于系统调…

    深入探索WebGL:解锁网页3D图形的无限可能

    深入探索WebGL:解锁网页3D图形的无限可能 引言 。WebGL,作为这一变革中的重要技术,正以其强大的功能和广泛的应用前景,吸引着越来越多的开发者和设计师的关注。本文将深入剖析WebGL的核心原理、关键技术、实践应用,并…

    从开发和对抗的角度思考web网页中的接口逆向

    如何从开发和对抗的角度去思考web网页中的接口逆向。 文章目录 前言1.从开发和对抗的角度思考接口逆向1.1 什么是接口逆向1.2 开发的角度思考如何开发策略1.3 对抗的角度思考遇到的问题1.4 正常情况下开发者如何防护1.5 正常情况攻击者如何做?1.6 对抗中的胜者 2.某…

    C++24--右值引用C++11新特性

    目录 1.C11简介 2.统一的列表初始化 2.1{}初始化 2.2std::initializer_list 3.声明 3.1auto 3.2decltype 3.3nullptr 4.范围for循环 5.智能指针 6.右值引用和移动语义 6.1左值引用和右值引用 6.2左值引用与右值引用比较 6.3右值引用使用场景和意义 6.4右值引用引…

    Android ChatOn-v1.66.536-598-[构建于ChatGPT和GPT-4o之上]

    ChatOn 链接:https://pan.xunlei.com/s/VOKYnq-i3C83CK-HJ1gfLf4gA1?pwdwzwc# 添加了最大无限积分 删除了所有调试信息 语言:全语言支持

    Java高频面试之集合-03

    hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶 面试官:说说ArrayList和LinkedList的区别 ArrayList 与 LinkedList 的详细对比 一、底层数据结构 特性ArrayListLinkedList存…

    华为hcie证书有什么作用?

    新盟教育 专注华为认证培训十余年 为你提供认证一线资讯! 在当今数字化飞速发展的时代,ICT行业对专业人才的需求日益增长。华为HCIE证书作为华为认证体系中的最高级别认证,无疑是众多IT从业者追求的目标。那么,华为HCIE证书到底有…

    通过微步API接口对单个IP进行查询

    import requests import json# 微步API的URL和你的API密钥 API_URL "https://api.threatbook.cn/v3/ip/query" API_KEY "***" # 替换为你的微步API密钥 def query_threatbook(ip):"""查询微步API接口,判断IP是否为可疑"…

    Redis|集群 Cluster

    文章目录 是什么能干嘛集群算法-分片-槽位slotredis集群的槽位slotredis集群的分片分片槽位的优势slot槽位映射——业界的3种解决方案小厂:哈希取余分区中厂:一致性哈希算法分区大厂:哈希槽分区 面试题:为什么 Redis 集群的最大槽…

    城市地质安全专题连载⑧ | 强化工程地质安全保障力度,为工程项目全栈护航

    作者 | 徐海洋、孙美琴 在城市化进程日益加速的今天,城市地质安全问题日益凸显,成为制约城市可持续发展的关键因素之一。从隧道掘进中的突发灾害,到高层建筑地基的稳定性挑战,再到城市地下空间的开发利用风险,地质安全…

    工厂模式:简单工厂、工厂方法以及抽象工厂

    文章目录 前言简单工厂模式优缺点 工厂方法模式优缺点 抽象工厂优缺点 前言 工厂模式是一种创建型设计模式,其作用是将对象的创建和使用进行解耦,用于提高代码的可维护性和可扩展性。通过提供给外部负责创建对象的工厂类,外部类通过工厂来创…

    FFMPEG利用H264+AAC合成TS文件

    本次的DEMO是利用FFMPEG框架把H264文件和AAC文件合并成一个TS文件。这个DEMO很重要,因为在后面的推流项目中用到了这方面的技术。所以,大家最好把这个项目好好了解。 下面这个是流程图 从这个图我们能看出来,在main函数中我们主要做了这几步&…

    sqli-lab靶场学习(七)——Less23-25(关键字被过滤、二次注入)

    前言 之前的每一关,我们都是在末尾加上注释符,屏蔽后面的语句,这样我们只要闭合了区间之后,差不多就是为所欲为的状态。但如果注释符不生效的情况下,又该如何呢? Less23(注释符被过滤&#xff…