CN103036848B - 协议的逆向工程方法及系统 - Google Patents
协议的逆向工程方法及系统 Download PDFInfo
- Publication number
- CN103036848B CN103036848B CN201110293790.3A CN201110293790A CN103036848B CN 103036848 B CN103036848 B CN 103036848B CN 201110293790 A CN201110293790 A CN 201110293790A CN 103036848 B CN103036848 B CN 103036848B
- Authority
- CN
- China
- Prior art keywords
- field
- search
- current
- variable field
- message
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L43/00—Arrangements for monitoring or testing data switching networks
- H04L43/18—Protocol analysers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/30—Semantic analysis
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/03—Protocol definition or specification
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Artificial Intelligence (AREA)
- Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Machine Translation (AREA)
Abstract
本发明公开了一种协议的逆向工程方法或系统,其中,方法包括:确定当前语义关联,所述语义关联用于描述字段对的因变量字段和自变量字段之间的关联语义特征;从具有相同格式类型的当前报文组中提取出一个报文;在所述提取的报文中搜索满足所述当前语义关联的关联语义特征的所有字段对,对所述搜索出的字段对在所述当前报文组中其他报文的相应位置进行验证;对通过验证的字段对,根据所述当前语义关联的关联语义特征确定所述当前报文组中报文的相应位置的协议格式,所述相应位置为与所述通过验证的字段对相对应的位置。本发明所公开的技术方案,能够对各种格式编码的报文的协议进行逆向工程,且无需访问协议实施实体的二进制代码程序。
Description
技术领域
本发明涉及逆向工程,特别是一种协议的逆向工程方法及系统。
背景技术
协议是为进行网络数据交换而建立的一系列的规则、标准和约定,是计算机网络及数据通信的核心,也是网络安全领域的重点研究对象。当前许多网络安全相关的应用都是以协议的详细描述信息为基础的,如入侵检测、模糊测试、协议重用和一致性测试等。
对于开放式协议,如超文本传输协议(HTTP,HyperTextTransferProtocol),其详细描述信息可以从公开文档(如RFCs)中获取。但对于私有协议,其协议描述信息通常是不公开的。协议的逆向工程就是指获取未知协议的应用级描述信息的过程。
美国专利申请US20090254891A1中公开了一种利用动态数据流分析进行文件描述格式或应用级协议的自动逆向工程的工具。该动态数据流分析的基本思想是:通过观察机器语言级的二进制代码程序的执行过程来模拟程序的行为,以确定该程序所使用协议的报文格式。但对于某些无法得到二进制代码程序的情况,如两个嵌入式设备之间的通信协议的逆向工程,该方法则无法适用。
在论文“WeidongCui,et.al.,“Discoverer:AutomaticProtocolReverseEngineeringfromNetworkTraces”.InProceedingsof16thUsenixSecuritySymposium,USA,2007”中公开了一种根据应用的网络踪迹进行协议消息格式的逆向工程的方法。该方法基于采集的协议报文流,通过比较报文中是否存在对应协议描述信息中主要组成部分的通用协议语言,如length(长度),offset(偏移),pointer(指针)等来确定报文的格式。但该方法仅能对部分采用ASCII码或统一码(Unicode)编码的报文的协议进行逆向工程,而无法对采用二进制编码的报文的协议进行逆向工程。
发明内容
有鉴于此,本发明一方面提出了一种协议的逆向工程方法,另一方面提出了一种协议的逆向工程系统,用以实现对二进制编码的报文的协议以及其它格式编码的报文的协议进行逆向工程,并且无需访问协议实施实体的二进制代码程序。
本发明所提出的协议的逆向工程方法,包括:
确定当前语义关联,所述当前语义关联选自预先确定的至少一种语义关联中,所述语义关联用于描述字段对的因变量字段和自变量字段之间的关联语义特征;所述自变量字段包括至少一个报文字段;
确定当前报文组,所述报文组选自获取的至少一组报文组中,且所述当前报文组包含的报文具有相同的格式类型;
从所述当前报文组中提取出一个报文;
在所述提取的报文中搜索满足所述当前语义关联的关联语义特征的所有字段对,对所述搜索出的字段对在所述当前报文组中其他报文的相应位置进行验证;
对通过验证的字段对,根据所述当前语义关联的关联语义特征确定所述当前报文组中报文的相应位置的协议格式,所述相应位置为与所述通过验证的字段对相对应的位置。
较佳地,所述在所提取的报文中搜索满足当前语义特征的所有字段对,包括:
根据所述当前语义关联的关联语义特征确定自变量字段和因变量字段的位置关系;
在所提取的报文中,遍历所有可能的连续单位组,所述连续单位组由至少一个且连续的最小组成单位构成;所述最小组成单位为报文中不可再分的组成单位;
将当前遍历的连续单位组作为所述当前语义关联所描述的字段对的潜在自变量字段;
在所述提取的报文中按照满足所述位置关系的方向搜索所述潜在自变量字段所对应的因变量字段;
在搜索到所述对应的因变量字段时,将所述潜在自变量字段及搜索到的因变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对。
其中,所述当前语义关联所描述的字段对包括:长度字段为因变量字段,长度字段的取值所描述的字段或字段组为自变量字段的字段对;所述当前语义关联的关联语义特征包括:因变量字段的取值等于自变量字段的长度、因变量字段位于自变量字段的前面;和/或,
所述当前语义关联所描述的的字段对包括:校验码字段为因变量字段,校验码字段的取值所描述的字段或字段组为自变量字段的字段对;所述当前语义关联的关联语义特征包括:因变量字段的取值等于自变量字段的运算校验和、因变量字段位于自变量字段的后面。
较佳地,在所述从所述当前报文组中提取出一个报文之前,所述方法进一步包括:在所述当前报文组的所有报文中找出各个公共子串,在每个报文中,每个公共子串分别构成该报文的一个分段,各公共子串所间隔开的每个非公共子串分别构成该报文的一个分段,其中每个公共子串在当前报文组的每个报文中均具有相同的取值和相同的位置,且每个报文中与所述公共子串前后相邻的最小组成单位在所述当前报文组的至少一个其它报文的相应位置处具有不同的取值;
所述在所述提取的报文中搜索满足所述当前语义关联的关联语义特征的所有字段对,包括:在所述提取的报文中基于该报文的分段搜索满足所述当前语义关联的关联语义特征的所有字段对。
在本发明的一实施例中,所述在所述提取的报文中基于该报文的分段搜索满足所述当前语义关联的关联语义特征的所有字段对,对所述搜索出的字段对在所述当前报文组中其他报文的相应位置进行验证,包括:
A1、根据所述当前语义关联的关联语义特征确定自变量字段和因变量字段的位置关系;
B1、将所述提取的报文的每个分段分别作为当前语义关联所描述的字段对的潜在自变量字段,对于每个潜在自变量字段沿满足所述位置关系的方向在所述提取的报文中搜索该潜在自变量字段所对应的因变量字段,若搜索到所述对应的因变量字段,则将所述对应的因变量字段以及该潜在自变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对;对所述搜索到的字段对在当前报文组的其它报文中的相应位置进行验证;
C1、将所述提取的报文作为当前搜索区域;
D1、在所述当前搜索区域中,根据所述位置关系确定因变量字段的搜索方向及因变量字段的搜索起始分段;
E1、从所述搜索起始分段的满足所述位置关系的相邻分段开始,按照分段组内元素由少到多或由多到少的次序依次遍历所有可能的分段组,所述分段组包括至少两个且连续的分段,将当前遍历的分段组作为当前语义关联所描述的字段对的潜在自变量字段,在所述搜索起始分段中搜索该潜在自变量字段所对应的因变量字段,在搜索到所述对应的因变量字段时,将所述对应的因变量字段及该潜在自变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对,对所述搜索到的字段对在所述当前报文组的其它报文中的相应位置进行验证,若所述当前搜索区域中还存在未搜索因变量字段的分段,则将所述搜索起始分段在所述搜索方向上的相邻分段作为当前的搜索起始分段,并返回执行本步骤;否则,执行步骤F1;
F1、将所述当前搜索区域中的每个分段分别作为当前分段,在所述当前分段中根据所述位置关系确定自变量字段的搜索方向及搜索起始位置;
G1、设置指向所述搜索起始位置的静态位置索引和动态位置索引;
H1、将所述静态位置索引与所述动态位置索引之间的连续单位组作为当前语义关联所描述的字段对的潜在自变量字段,所述连续单位组包括至少一个且连续的最小组成单位,所述最小组成单位为报文中不可再分的组成单位;在所述当前分段中沿满足所述位置关系的方向搜索潜在的因变量字段,在所述潜在的因变量字段能够与所述潜在自变量字段构成满足所述当前语义关联的关联语义特征的字段对时,或者,在所述潜在的因变量字段能够与所述潜在自变量字段中以所述动态位置索引为一边界的部分连续单位组构成满足所述当前语义关联的关联语义特征的字段对时,将所述字段对作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对,对所述搜索到的字段对在所述当前报文组的其它报文中的相应位置进行验证,若所述字段对通过验证,且所述在动态位置索引没有到达所述当前分段的搜索终点时,在所述搜索方向上将与所述动态位置索引相邻的最小组成单位作为当前的搜索起始位置,并返回执行步骤G1;若所述字段对没有通过验证且所述动态位置索引没有到达所述当前分段的搜索终点,则以所述当前分段中的最小组成单位为搜索单位向所述搜索方向移动所述动态位置索引;在所述潜在的因变量字段无法与所述潜在自变量字段或所述潜在自变量字段中以所述动态位置索引为一边界的部分连续单位组构成满足当前语义关联的关联语义特征的字段对时,若动态位置索引没有到达当前分段的搜索终点,则以当前分段中的最小组成单位为搜索单位向所述搜索方向移动所述动态位置索引,并返回执行本步骤;若所述动态位置索引到达所述当前分段的搜索终点,且在所述当前分段中搜索到字段对,则将当前分段中搜索到的每个字段对分别作为当前分段的一个子分段,将搜索到的每个字段对间隔开的每个连续单位组分别作为当前分段的一个子分段,在所述当前分段的子分段的数量大于1时,将所述当前分段作为所述当前搜索区域,将所述子分段作为当前搜索区域的分段,并返回执行步骤D1;若所述动态位置索引到达当前分段的搜索终点,且在所述当前分段中未搜索到字段对,则结束对所述当前分段的搜索。
在本发明的又一实施例中,所述在所述提取的报文中基于该报文的分段搜索满足所述当前语义关联的关联语义特征的所有字段对,包括:
A1、根据所述当前语义关联的关联语义特征确定自变量字段和因变量字段的位置关系;
B1、将所述提取的报文的每个分段分别作为所述当前语义关联所描述的字段对的潜在自变量字段,对于每个潜在自变量字段沿满足所述位置关系的方向在所述提取的报文中搜索该潜在自变量字段所对应的因变量字段,若搜索到所述对应的因变量字段,则将所述对应的因变量字段以及该潜在自变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对;
C1、将所述提取的报文作为当前搜索区域;
D1、在所述当前搜索区域中,根据所述位置关系确定因变量字段的搜索方向及因变量字段的搜索起始分段;
E1、从所述搜索起始分段的满足所述位置关系的相邻分段开始,按照分段组内元素由少到多或由多到少的次序依次遍历所有可能的分段组,所述分段组包括至少两个且连续的分段,将当前遍历的分段组作为所述当前语义关联所描述的字段对的潜在自变量字段,在所述搜索起始分段中搜索该潜在自变量字段所对应的因变量字段,在搜索到所述对应的因变量字段时,将所述对应的因变量字段及该潜在自变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对;若当前搜索区域中还存在未搜索因变量字段的分段,则将所述搜索起始分段在所述搜索方向上的相邻分段作为当前的搜索起始分段,并返回执行本步骤;否则,执行步骤F1;
F1、将所述当前搜索区域中的每个分段分别作为当前分段,在所述当前分段中根据所述位置关系确定自变量字段的搜索方向及搜索起始位置;
G1、设置指向所述搜索起始位置的静态位置索引和动态位置索引;
H1、将所述静态位置索引与所述动态位置索引之间的连续单位组作为当前语义关联所描述的字段对的潜在自变量字段,所述连续单位组包括至少一个且连续的最小组成单位,所述最小组成单位为报文中不可再分的组成单位;在所述当前分段中沿满足所述位置关系的方向搜索潜在的因变量字段,在所述潜在的因变量字段能够与所述潜在自变量字段构成满足所述当前语义关联的关联语义特征的字段对时,或者,在所述潜在的因变量字段能够与所述潜在自变量字段中以所述动态位置索引为一边界的部分连续单位组构成满足所述当前语义关联的关联语义特征的字段对时,将所述字段对作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对,若所述动态位置索引没有到达所述当前分段的搜索终点,则在所述搜索方向上将与所述动态位置索引相邻的最小组成单位作为当前的搜索起始位置,并返回执行步骤G1;在所述潜在的因变量字段无法与所述潜在自变量字段或所述潜在自变量字段中以所述动态位置索引为一边界的部分连续单位组构成满足所述当前语义关联的关联语义特征的字段对时,若所述动态位置索引没有到达当前分段的搜索终点,则以当前分段中的最小组成单位为搜索单位向所述搜索方向移动所述动态位置索引,并返回执行本步骤;若所述动态位置索引到达当前分段的搜索终点,且在当前分段中搜索到字段对,则将当前分段中搜索到的每个字段对分别作为所述当前分段的一个子分段,将搜索到的每个字段对间隔开的每个连续单位组分别作为当前分段的一个子分段,在所述当前分段的子分段的数量大于1时,将所述当前分段作为所述当前搜索区域,将所述子分段作为当前搜索区域的分段,并返回执行步骤D1;若所述动态位置索引到所述达当前分段的搜索终点,且在所述当前分段中未搜索到字段对,则结束对所述当前分段的搜索;
所述对搜索出的字段对在当前报文组的其它报文中的相应位置进行验证为:在所述搜索完成后,对所有搜索出的字段对在当前报文组的其它报文中的相应位置进行验证;或者为:每搜索出一个字段对时,对所述搜索出的字段对在当前报文组的其它报文中的相应位置并行进行验证。
在本发明的一实施例中,所述当前语义关联所描述的字段对包括:长度字段为因变量字段,长度字段的取值所描述的字段或字段组为自变量字段的字段对;所述当前语义关联的关联语义特征包括:因变量字段的取值等于自变量字段的长度、因变量字段位于自变量字段的前面。
在本发明的一实施例中,所述在所述提取的报文中基于该报文的分段搜索满足所述当前语义关联的关联语义特征的所有字段对,对搜索出的字段对在所述当前报文组的其它报文中的相应位置进行验证,包括:
A2、根据所述当前语义关联的关联语义特征确定自变量字段和因变量字段的位置关系;
B2、在所述提取的报文中,根据所述位置关系确定因变量字段的搜索方向及因变量字段的搜索起始分段;
C2、从所述搜索起始分段的满足所述位置关系的相邻分段开始,按照分段组内元素由少到多或由多到少的次序依次遍历所有可能的分段组,所述分段组包括至少一个且连续的分段,将当前遍历的分段组作为所述当前语义关联所描述的字段对的潜在自变量字段,在所述搜索起始分段中搜索该潜在自变量字段所对应的因变量字段,在搜索到所述对应的因变量字段时,将所述对应的因变量字段及该潜在自变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对,对所述搜索到的字段对在当前报文组的其它报文中的相应位置进行验证;若当前搜索区域中还存在未搜索因变量字段的分段,则将所述搜索起始分段在所述搜索方向上的相邻分段作为当前的搜索起始分段,并返回执行本步骤;否则,执行步骤D2;
D2、将所提取的报文中的每个分段分别作为当前分段,在所述当前分段中根据所述位置关系确定自变量字段的搜索方向及搜索起始位置;
E2、设置指向所述搜索起始位置的静态位置索引和动态位置索引;
F2、将所述静态位置索引与所述动态位置索引之间的连续单位组作为所述当前语义关联所描述的字段对的潜在自变量字段,所述连续单位组包括至少一个且连续的最小组成单位,所述最小组成单位为报文中不可再分的组成单位;在所述当前分段中沿满足所述位置关系的方向搜索潜在的因变量字段,在所述潜在的因变量字段能够与所述潜在自变量字段构成满足所述当前语义关联的关联语义特征的字段对时,或者,在所述潜在的因变量字段能够与所述潜在自变量字段中以所述动态位置索引为一边界的部分连续单位组构成满足所述当前语义关联的关联语义特征的字段对时,将所述字段对作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对,对所述搜索到的字段对在当前报文组的其它报文中的相应位置进行验证,若所述字段对通过验证,且在所述动态位置索引没有到达所述当前分段的搜索终点时,在所述搜索方向上将与所述动态位置索引相邻的最小组成单位作为当前的搜索起始位置,并返回执行步骤E2;若所述字段对没有通过验证且动态位置索引没有到达当前分段的搜索终点,则以当前分段中的最小组成单位为搜索单位向所述搜索方向移动所述动态位置索引;在所述潜在的因变量字段无法与所述潜在自变量字段或所述潜在自变量字段中以所述动态位置索引为一边界的部分连续单位组构成满足所述当前语义关联的关联语义特征的字段对时,若动态位置索引没有到达当前分段的搜索终点,则以当前分段中的最小组成单位为搜索单位向所述搜索方向移动所述动态位置索引,并返回执行本步骤;若所述动态位置索引到达当前分段的搜索终点,则结束对所述当前分段的搜索。
在本发明的又一实施例中,所述在所述提取的报文中基于该报文的分段搜索满足所述当前语义关联的关联语义特征的所有字段对,包括:
A2、根据所述当前语义关联的关联语义特征确定自变量字段和因变量字段的位置关系;
B2、在所述提取的报文中,根据所述位置关系确定因变量字段的搜索方向及因变量字段的搜索起始分段;
C2、从所述搜索起始分段的满足所述位置关系的相邻分段开始,按照分段组内元素由少到多或由多到少的次序依次遍历所有可能的分段组,所述分段组包括至少两个且连续的分段,将当前遍历的分段组作为所述当前语义关联所描述的字段对的潜在自变量字段,在所述搜索起始分段中搜索该潜在自变量字段所对应的因变量字段,在搜索到所述对应的因变量字段时,将所述对应的因变量字段及该潜在自变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对;若所述提取的报文中还存在未搜索因变量字段的分段,则将所述搜索起始分段在所述搜索方向上的相邻分段作为当前的搜索起始分段,并返回执行本步骤;否则,执行步骤D2;
D2、将所述提取的报文中的每个分段分别作为当前分段,在所述当前分段中根据所述位置关系确定自变量字段的搜索方向及搜索起始位置;
E2、设置指向所述搜索起始位置的静态位置索引和动态位置索引;
F2、将所述静态位置索引与所述动态位置索引之间的连续单位组作为所述当前语义关联所描述的字段对的潜在自变量字段,所述连续单位组包括至少一个且连续的最小组成单位,所述最小组成单位为报文中不可再分的组成单位;在所述当前分段中沿满足所述位置关系的方向搜索潜在的因变量字段,在所述潜在的因变量字段能够与所述潜在自变量字段构成满足所述当前语义关联的关联语义特征的字段对时,或者,在所述潜在的因变量字段能够与所述潜在自变量字段中以所述动态位置索引为一边界的部分单位组构成满足所述当前语义关联的关联语义特征的字段对时,将所述字段对作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对,若所述动态位置索引没有到达所述当前分段的搜索终点,则在所述搜索方向上将与所述动态位置索引相邻的最小组成单位作为当前的搜索起始位置,并返回执行步骤E2;在所述潜在的因变量字段无法与所述潜在自变量字段或所述潜在自变量字段中以所述动态位置索引为一边界的部分单位组构成满足当前语义关联的关联语义特征的字段对时,若动态位置索引没有到达当前分段的搜索终点,则以当前分段中的最小组成单位为搜索单位向所述搜索方向移动所述动态位置索引,并返回执行本步骤;若所述动态位置索引到达所述当前分段的搜索终点,则结束对所述当前分段的搜索;
所述对搜索出的字段对在当前报文组的其它报文中的相应位置进行验证为:在所述搜索完成后,对所有搜索出的字段对在当前报文组的其它报文中的相应位置进行验证;或者为:每搜索出一个字段对时,对所述搜索出的字段对在当前报文组的其它报文中的相应位置并行进行验证。
在本发明的一实施例中,所述当前语义关联所描述的字段对包括:校验码字段为因变量字段,校验码字段的取值所描述的字段或字段组为自变量字段的字段对;所述当前语义关联的关联语义特征包括:因变量字段的取值等于自变量字段的运算校验和、因变量字段位于自变量字段的后面。
本发明所提出的协议的逆向工程系统,包括:
语义关联信息存储模块,用于存储预先确定的至少一种存在于报文字段间的语义关联,所述语义关联用于描述字段对中自变量字段和因变量字段之间的关联语义特征;所述自变量字段包括至少一个报文字段;
字段对搜索模块,用于从具有相同格式类型的当前报文组中提取出一个报文,在所提取的报文中搜索满足所述当前语义关联的关联语义特征的所有字段对;
字段对校验模块,用于对所述字段对搜索模块搜索出的字段对在当前报文组的其它报文中的相应位置进行验证;
协议格式确定模块,用于对通过所述字段对校验模块验证的字段对,根据所述当前语义关联的关联语义特征确定当前报文组的报文中与所述通过验证的字段对相对应的位置的协议格式。
在本发明的一实施例中,所述字段对搜索模块包括:
第一报文提取模块,用于从具有相同格式类型的当前报文组中提取出一个报文;
第一位置关系确定模块,用于根据所述当前语义关联的关联语义特征确定自变量字段和因变量字段的位置关系;
遍历搜索模块,用于在所述第一报文提取模块提取的报文中,遍历所有可能的连续单位组,所述连续单位组包括至少一个且连续的最小组成单位,所述最小组成单位为报文中不可再分的组成单位;将当前遍历的连续单位组作为所述当前语义关联所描述的字段对的潜在自变量字段,在所述提取的报文中按照满足所述位置关系的方向搜索所述潜在自变量字段所对应的因变量字段,在搜索到所述对应的因变量字段时,将所述潜在自变量字段及搜索到的因变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对。
较佳地,该系统进一步包括:分段模块,用于在当前报文组的所有报文中找出各个公共子串,在每个报文中,每个公共子串分别构成所述报文的一个分段,各公共子串所间隔开的每个非公共子串分别构成所述报文的一个分段;每个公共子串在当前报文组的每个报文中均具有相同的取值和相同的位置,且每个报文中与所述公共子串前后相邻的最小组成单位在当前报文组的至少一个其它报文的相应位置处具有不同的取值;
所述字段对搜索模块用于在所提取的报文中基于所述分段搜索满足当前语义关联的关联语义特征的所有字段对。
在本发明的一实施例中,所述字段搜索模块包括:
第二报文提取模块,用于从所述分段模块中提取出一个报文,并将所提取的报文作为当前搜索区域;
第二位置关系确定模块,用于根据当前语义关联的关联语义特征确定自变量字段和因变量字段的位置关系;
第一搜索模块,用于将所述提取的报文的每个分段分别作为当前语义关联所描述的字段对的一个潜在自变量字段,对于每个潜在自变量字段沿满足所述位置关系的方向在所提取的报文中搜索该潜在自变量字段所对应的因变量字段,若搜索到对应的因变量字段,则将所述对应的因变量字段以及该潜在自变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对;
第二搜索模块,用于在当前搜索区域中,根据所述位置关系确定因变量字段的搜索方向及因变量字段的搜索起始分段,从所述搜索起始分段的满足所述位置关系的相邻分段开始,按照分段组内元素由少到多或由多到少的次序依次遍历所有可能的分段组,所述分段组包括至少两个且连续的分段,将当前遍历的分段组作为当前语义关联所描述的字段对的潜在自变量字段,在所述搜索起始分段中搜索该潜在自变量字段所对应的因变量字段,在搜索到对应的因变量字段时,将所述对应的因变量字段及该潜在自变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对;若当前搜索区域中还存在未搜索因变量字段的分段,则将所述搜索起始分段在所述搜索方向上的相邻分段作为当前的搜索起始分段,并重复前述搜索;
第三搜索模块,用于将当前搜索区域中的每个分段分别作为当前分段,在所述当前分段中根据所述位置关系确定自变量字段的搜索方向及搜索起始位置,并设置指向所述搜索起始位置的静态位置索引和动态位置索引;将所述静态位置索引与所述动态位置索引之间连续单位组作为当前语义关联所描述的字段对的潜在自变量字段,所述连续单位组包括至少一个且连续的最小组成单位,所述最小组成单位为报文中不可再分的组成单位;在所述当前分段中按照满足所述位置关系的方向搜索潜在的因变量字段,在所述潜在的因变量字段能够与所述潜在自变量字段构成满足当前语义关联的关联语义特征的字段对时,或者,在所述潜在的因变量字段能够与所述潜在自变量字段中以所述动态位置索引为一边界的部分连续单位组构成满足当前语义关联的关联语义特征的字段对时,将所述字段对作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对,若动态位置索引没有到达当前分段的搜索终点,则在所述搜索方向上将与所述动态位置索引相邻的最小组成单位作为当前的搜索起始位置,设置指向所述搜索起始位置的静态位置索引和动态位置索引,并重复上述搜索过程;在所述潜在的因变量字段无法与所述潜在自变量字段或所述潜在自变量字段中以所述动态位置索引为一边界的部分连续单位组构成满足当前语义关联的关联语义特征的字段对时,若动态位置索引没有到达当前分段的搜索终点,则以当前分段中的最小组成单位为搜索单位向所述搜索方向移动所述动态位置索引,并重复上述搜索过程;若动态位置索引到达当前分段的搜索终点,且在当前分段中搜索到字段对,则将当前分段中搜索到的每个字段对分别作为当前分段的一个子分段,将每个字段对间隔开的每个连续单位组分别作为当前分段的一个子分段,在所述当前分段的子分段的数量大于1时,将所述当前分段作为当前搜索区域,将所述子分段作为当前搜索区域的分段,通知第二搜索模块在当前搜索区域内搜索;若动态位置索引到达当前分段的搜索终点,且在当前分段中未搜索到字段对,则结束对所述当前分段的搜索。
在本发明的一实施例中,所述字段搜索模块包括:
第三报文提取模块,用于从所述分段模块中提取出一个报文;
第三位置关系确定模块,用于根据所述当前语义关联的关联语义特征确定自变量字段和因变量字段的位置关系;
第四搜索模块,用于在所述第三报文提取模块提取的报文中,根据所述位置关系确定因变量字段的搜索方向及因变量字段的搜索起始分段;从所述搜索起始分段的满足所述位置关系的相邻分段开始,按照分段组内元素由少到多或由多到少的次序依次遍历所有可能的分段组,所述分段组包括至少一个且连续的分段,将当前遍历的分段组作为所述当前语义关联所描述的字段对的潜在自变量字段,在所述搜索起始分段中搜索该潜在自变量字段所对应的因变量字段,在搜索到对应的因变量字段时,将所述对应的因变量字段及该潜在自变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对;若当前搜索区域中还存在未搜索因变量字段的分段,则将所述搜索起始分段在所述搜索方向上的相邻分段作为当前的搜索起始分段,并重复执行上述搜索过程;
第五搜索模块,用于将所述第三报文提取模块提取的报文中的每个分段分别作为当前分段,在所述当前分段中根据所述位置关系确定自变量字段的搜索方向及搜索起始位置,设置指向所述搜索起始位置的静态位置索引和动态位置索引,将所述静态位置索引与所述动态位置索引之间的连续单位组作为当前语义关联所描述的字段对的潜在自变量字段,所述连续单位组包括至少一个且连续的最小组成单位,所述最小组成单位为报文中不可再分的组成单位;在所述当前分段中满足所述位置关系的方向搜索潜在的因变量字段,在所述潜在的因变量字段能够与所述潜在自变量字段构成满足当前语义关联的关联语义特征的字段对时,或者,在所述潜在的因变量字段能够与所述潜在自变量字段中以所述动态位置索引为一边界的部分连续单位组构成满足当前语义关联的关联语义特征的字段对时,将所述字段对作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对,若动态位置索引没有到达当前分段的搜索终点,则在所述搜索方向上将与所述动态位置索引相邻的最小组成单位作为当前的搜索起始位置,设置指向所述搜索起始位置的静态位置索引和动态位置索引,并重复执行上述搜索过程;在所述潜在的因变量字段无法与所述潜在自变量字段或所述潜在自变量字段中以所述动态位置索引为一边界的部分连续单位组构成满足当前语义关联的关联语义特征的字段对时,若动态位置索引没有到达当前分段的搜索终点,则以当前分段中的最小组成单位为搜索单位向所述搜索方向移动所述动态位置索引,并重复执行上述搜索过程;若动态位置索引到达当前分段的搜索终点,则结束对所述当前分段的搜索。
从上述方案中可以看出,由于本发明中采用基于语义关联的方法对协议进行逆向工程,即预先确定至少一种存在于报文字段间的语义关联,该语义关联描述了自变量字段和因变量字段构成的字段对之间的关联语义特征;并从具有相同格式类型的当前报文组中提取出一个报文,在所提取的报文中搜索满足当前语义关联的关联语义特征的所有字段对,对搜索出的字段对在当前报文组的其它报文中的相应位置进行验证,对通过验证的字段对,根据当前语义关联的关联语义特征确定当前报文组的报文中与所述通过验证的字段对相对应的位置的协议格式。从而可以直接根据协议报文自动进行未知协议的逆向工程,而无需访问协议实施实体的源代码程序。此外,由于语义关联不仅存在于可打印字符编码的协议报文中,而且存在于二进制编码的报文中,因此不仅可以基于可打印字符编码的协议报文进行未知协议的逆向工程,而且可以基于二进制编码的协议报文进行未知协义的逆向工程,应用范围较广。
此外,该方法还可以与其他协义的逆向工程方法联合使用,以提高所确定的协议格式的准确性。
在本发明的一个实施例中,通过先对报文组中的报文进行分段,并基于分度在所提取的报文中搜索满足当前语义关联的关联语义特征的所有字段对,可以提高逆向工程的效率,并且降低错检率。
附图说明
下面将通过参照附图详细描述本发明的优选实施例,使本领域的普通技术人员更清楚本发明的上述及其它特征和优点,附图中:
图1为本发明实施例中未知协议的逆向工程方法的示例性流程图。
图2为本发明实施例中对报文组中N个报文P1,P2,...,PN分段后的示意图。
图3为本发明实施例中一种基于分段在报文中搜索满足当前语义关联的关联语义特征的字段对的方法流程图。
图4为本发明实施例中又一种基于分段在报文中搜索满足当前语义关联的关联语义特征的字段对的方法流程图。
图5为本发明实施例中未知协议的逆向工程系统的示例性结构图。
图6为图5中所示字段对搜索模块的一种内部结构示意图。
图7为图5中所示字段对搜索模块的又一种内部结构示意图。
图8为图5中所示字段对搜索模块的再一种内部结构示意图。
图中:101-采集报文流102-划分报文组103-确定当前报文组104-确定当前语义关联105-搜索、验证并确定协议格式106-判断是否有未处理的语义关联107-判断是否有未处理的报文流
301-确定位置关系302-以单个分段为单位进行搜索303-确定当前搜索区域304-确定分段间的搜索方向及搜索起始分段305-以多个分段为单位进行搜索306-判断是否搜索到对应的结果307-确定搜索到的字段对308-判断是否有未搜索的分段309-确定搜索起始分段310-确定分段内的搜索方向及搜索起始位置311-设置指向搜索起始位置的位置索引312-在分段内进行搜索313-判断是否搜索到对应的结果314-确定搜索到的字段对315-判断是否搜索到终点316-确定搜索起始位置,并设置指向搜索起始位置的位置索引317-确定当前分段内的子分段318-判断子分段的数量是否大于1319-确定当前搜索区域320-判断是否搜索到终点321-移动位置索引
401-确定位置关系402-确定分段间的搜索方向及搜索起始分段403-以分段为单位搜索404-判断是否搜索到对应的结果405-确定搜索到的字段对406-判断是否有未搜索的分段407-确定搜索起始分段408-确定分段内的搜索方向及搜索起始位置409-设置指向搜索起始位置的位置索引410-分段内搜索411-判断是否搜索到对应的结果412-确定搜索到的字段对413-判断是否搜索到终点414-确定搜索起始位置,并设置指向搜索起始位置的位置索引415-判断是否搜索到终点416-移动位置索引
501-报文采集模块502-报文分组模块503-语义关联信息存储模块504-字段对搜索模块505-字段对校验模块506-协议格式确定模块507-分段模块
601-第一报文提取模块602-第一位置关系确定模块603-遍历搜索模块
701-第二报文提取模块702-第二位置关系确定模块703-第一搜索模块704-第二搜索模块705-第三搜索模块
801-第三报文提取模块802-第三位置关系确定模块803-第四搜索模块804-第五搜索模块
具体实施方式
本发明实施例中,考虑到在大部分协议中,报文中的字段并不是完全孤立存在的,而是在某些字段之间存在着语义关联,即依存关系。其中一个字段的变化通常会引起另外一个字段的变化,或连续多个字段构成的字段组的变化通常会引起另外一个字段的变化。如某字段或字段组的长度变化将会引起长度字段的取值变化。又如,某字段或字段组的取值变化将会引起校验码字段的取值变化等。因此本发明实施例中采用基于语义关联的方式进行未知协议的自动逆向工程。
为描述方便,本文中将主动变化的字段或字段组称为自变量字段,将随自变量字段的变化而变化的字段称为因变量字段。对于上述两个示例,则有:长度字段为因变量字段,长度字段的取值所对应的字段或字段组为自变量字段;校验码字段为因变量字段,校验码字段的取值所对应的字段或字段组为自变量字段。这里,自变量字段和与其对应的因变量字段构成一个具有语义关联的字段对。不同的语义关联描述了不同的关联语义特征。例如,包括长度字段的字段对的关联语义特征可包括:因变量字段的取值等于自变量字段的长度,因变量字段位于自变量字段的前面等。又如,包括校验码字段的字段对的关联语义特征可包括:因变量字段的取值等于自变量字段的运算校验和,因变量字段位于自变量字段的后面等。
因此本发明中可基于语义关联在协议报文中查找满足当前语义关联的关联语义特征的字段对,根据查找到的字段对来确定协议报文对应位置的协议格式。
实际应用中,由于仅对单个报文进行字段对的查找,会发生虽然满足当前语义关联的关联语义特征,但实际上并不是要查找的字段对的情况,为避免这种情况,本发明实施例中可在相同格式类型的其它报文中对上述单个报文中查找到的字段对在相应位置进行验证,若相同格式类型的其它报文都通过了验证或大概率的通过了验证,则可确定所查找到的字段对是准确的,并可根据当前语义关联的关联语义特征确定当前格式类型报文中与所述通过验证的字段对相对应的位置的协议格式。
实际应用中,为了找到相同格式类型的报文,可对采集的报文流进行分组,将相同格式类型的报文分到同一组。
为使本发明的目的、技术方案和优点更加清楚,以下举实施例对本发明进一步详细说明。
图1为本发明实施例中未知协议的逆向工程方法的示例性流程图。如图1所示,该方法包括如下步骤:
步骤101,采集协议实施实体之间的协议报文流。
本实施例中,为了尽可能多的对各种格式类型的协议报文进行逆向工程,本步骤中应尽可能的采集各种格式类型的报文,为此,可使协议实施实体在不同阶段运行,如开始、结束、数据交换等阶段,并采集各个运行阶段的协议报文。
并且为了在同一格式类型的多个报文中进行搜索和验证,本步骤中应尽可能的使协议实施实体之间在每个运行阶段传输不同的数据,以采集到当前运行阶段内相同格式类型的对应不同数据的多个报文实例。
本实施例中的协议实施实体可以是任意的协议实施实体A和协议实施实体B。例如,可以是客户端和服务器,也可以是点对点(PTP)的两个实体。
具体实现时,本步骤可采用现有的抓包工具,如网络包分析工具Wireshark或Tcpdump等采集协议实施实体之间的协议报文流。
步骤102,对所述协议报文流进行分组,得到至少一个报文组,其中具有相同格式类型的报文被分到同一个报文组。即每个报文组中包括相同格式类型的不同报文。
由于步骤102中采集到的协议报文流中通常包含各种格式类型的报文,因此本步骤中可对其进行预处理,将相同格式类型的报文划分到一个报文组中,以方便在同一个报文组中进行报文的搜索和验证。
具体实现时,可采用数据挖掘领域的数据分类法,如决策树(DecisionTree)、贝叶斯网络(BayesianNetwork)、支持向量集(SupportVectorSet)等,或采用聚类分析法,如切分聚类(PartitioningCluster)或层次聚类(HierarchicalClustering)等,对协议报文流进行分组,将具有相同格式类型的报文分到同一个报文组。
步骤103,从各报文组中确定待处理的当前报文组。
本步骤中可依次将各报文组确定为当前报文组。
步骤104,从预先确定的至少一种存在于报文字段间的语义关联中确定当前语义关联,所述当前语义关联描述了字段对中自变量字段和因变量字段之间的关联语义特征。
本实施例中,需预先确定至少一种存在于报文字段间的语义关联,语义关联描述了字段对中自变量字段和因变量字段之间的关联语义特征。如,长度语义关联和/或校验码语义关联等。
其中,长度语义关联对应的由自变量字段和因变量字段构成的字段对可包括:长度字段为因变量字段,长度字段的取值所对应的字段或字段组为自变量字段的字段对;长度语义关联所描述的字段对的关联语义特征可包括:因变量字段的取值等于自变量字段的长度,且因变量字段位于自变量字段的前面等。
校验码语义关联对应的自变量字段和因变量字段构成的字段对可包括:校验码字段为因变量字段,校验码字段的取值所对应的字段或字段组为自变量字段的字段对;校验码语义关联所描述的字段对的关联语义特征包括:因变量字段的取值等于自变量字段的运算校验和,且因变量字段位于自变量字段的后面等。
此外,还可以有其它类型的语义关联,此处不再一一列举。
若存在多种语义关联,则本步骤中可依次或者随机将各语义关联确定为当前语义关联。
步骤105,从当前报文组中提取出一个报文,在所提取的报文中搜索满足当前语义关联的关联语义特征的所有字段对,对搜索出的字段对在当前报文组的其它报文中的相应位置进行验证,即验证其它报文中的相应位置是否同样存在满足当前语义关联的关联语义特征的字段对,如都存在,则验证通过,对通过验证的字段对,可根据当前语义关联的关联语义特征确定当前报文组的报文中与所述通过验证的字段对相对应的位置的协议格式。
具体实现时,可以在整个搜索完成后,即搜索到所有字段对后,再对每个搜索到的字段对在当前报文组的其它报文中的相应位置进行验证。或者,也可以在每搜索到一个字段对时,便对该字段对在当前报文组的其它报文中的相应位置进行验证,验证结束后再搜索下一个字段对。又或者,也可以并行执行搜索和验证过程,即在每搜索到一个字段对时,便对该字段对在当前报文组的其它报文中的相应位置进行验证,同时还可开始搜索另一个字段对,即搜索和验证同步并行进行,这种并行搜索验证的方式可以节约时间,提高逆向工程的效率。具体采用何种实现方法,可根据实际需要确定。
为便于理解,后文中将详细描述步骤105的几种具体实现过程。
实际应用中,若在当前报文组中未找到验证成功的满足当前语义关联的关联语义特征的字段对,则可能是该报文组对应的报文格式不存在该语义关联。
本实施例中,对于存在多种语义关联的情况,可在执行完步骤104后继续执行步骤106。
步骤106,判断是否还存在未处理的语义关联,如果存在,则返回执行步骤104;否则结束对当前格式类型的报文组的逆向工程,并执行步骤107。
步骤107,判断是否还存在未处理的报文组,如果存在,则返回执行步骤103;否则,结束。
实际应用中,步骤105可有多种具体实现方法。下面列举其中两种。
第一种:直接以报文中的最小组成单位为搜索组合单位在报文中进行搜索。
首先,由于不同语义关联所描述的字段对中自变量字段和因变量字段的位置关系有可能是不同的,因此本步骤中,可首先根据当前语义关联的关联语义特征确定自变量字段和因变量字段的位置关系。例如,对于长度语义关联,其因变量字段位于自变量字段的前面;又如,对于校验码语义关联,其因变量字段位于自变量字段的后面。
之后,直接以报文的最小组成单位为搜索组合单位,在所提取的报文中搜索满足当前语义关联的关联语义特征的所有字段对。具体可包括:在所提取的报文中,遍历由连续的最小组成单位构成的连续单位组的所有可能的组合,即所有可能的连续单位组,所述连续单位组包括至少一个且连续的最小组成单位,将当前遍历的连续单位组作为当前语义关联所描述的的字段对的潜在自变量字段,在所提取的报文中按照满足所述位置关系的方向搜索所述潜在自变量字段所对应的因变量字段,在搜索到所述对应的因变量字段时,将所述潜在自变量字段及搜索到的因变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对。
其中,所述最小组成单位为报文中不可再分的组成单位,如对于二进制编码的报文,其最小组成单位为字节,对于可打印字符编码的报文,其最小组成单位为字符。
在上述过程中,遍历方法可有多种。下面分别以长度语义关联和校验码语义关联为例进行描述。
实际应用中,上述位置关系的确定和连续单位组的遍历也可以顺序颠倒执行,也即可以先确定位置关系,再开始遍历,也可以先遍历到潜在自变量字段以后再确定位置关系,再根据位置关系查找因变量。
示例一、长度语义关联
首先确定遍历方向,可以是由前到后,也可以是由后到前,还可以是从设定的任意起始位置开始的遍历方向。这里首先以从前到后的遍历方向为例。
根据所确定的遍历方向及自变量字段与因变量字段之间的位置关系设定自变量字段的搜索起始位置,对于长度语义关联,由于因变量字段(即长度字段)位于自变量字段的前面,因此本步骤中可在前面预留出因变量字段的长度后,将紧邻所述因变量字段长度的后一个最小组成单位的位置作为自变量字段的搜索起始位置。之后,按照连续单位组内元素由少到多或由多到少的顺序依次将从所述搜索起始位置开始的包含后面若干最小组成单位的连续单位组作为当前语义关联所描述的字段对的潜在自变量字段,之后在自变量字段的搜索起始位置之前的报文区域内搜索是否存在满足当前语义关联的关联语义特征的因变量字段,即是否存在一个取值等于潜在自变量字段长度的字段,如果存在,则将所述潜在自变量字段及搜索到的因变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对;如果不存在,则将自变量字段的当前搜索起始位置向后移动一个最小组成单位作为新的搜索起始位置,并返回执行上述搜索过程,直到自变量字段的搜索起始位置到达最后一个最小组成单位,停止当前搜索。
下面以从后到前的遍历方向为例。
根据所确定的遍历方向及自变量字段与因变量字段之间的位置关系设定自变量字段的搜索起始位置,对于长度语义关联,由于因变量字段(即长度字段)位于自变量字段的前面,因此本步骤中可将报文的最后一个最小组成单位作为自变量字段的搜索起始位置,按照连续单位组内元素由少到多或由多到少的顺序依次将从所述搜索起始位置开始的包含前面若干最小组成单位的连续单位组作为当前语义关联所描述的字段对的潜在自变量字段,之后在当前连续单位组之前的报文区域内搜索是否存在满足当前语义关联的关联语义特征的因变量字段,即是否存在一个取值等于潜在自变量字段长度的字段,如果存在,则将所述潜在自变量字段及搜索到的因变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对;如果不存在,则将自变量字段的当前搜索起始位置向前移动一个最小组成单位作为新的搜索起始位置,并返回执行上述搜索过程,直到自变量字段的搜索起始位置到达预留出因变量字段的长度后的最前面一个最小组成单位,停止当前搜索。
其中,对于二进制编码的协议报文,其最小组成单位为字节,并且由于长度语义关联对应的因变量字段一般由1个字节、2个字节或4个字节等构成,因此这里可依次遍历每种可能长度的因变量字段,看是否有满足长度语义关联所对应的字段对的关联语义特征。
此外,对于可打印字字符(如前面的ASCII码或Unicode码等)编码的协议报文,其最小组成单位为字符。此时,长度语义关联对应的因变量字段可以是带有“length”标记的字段,搜索时可对其进行匹配。
示例二、校验码语义关联
可首先确定遍历方向,可以是从前到后,也可以是从后到前,还可以是从设定的任意起始位置。首先以从前到后的遍历方向为例。
根据所确定的遍历方向及自变量字段与因变量字段之间的位置关系设定自变量字段的搜索起始位置,对于检验码语义关联,由于因变量字段(即校验码字段)位于自变量字段的后面,因此本步骤中可将最前面的一个最小组成单位作为自变量字段的搜索起始位置,按照连续单位组内元素由少到多或由多到少的顺序依次将从所述搜索起始位置开始的包含后面若干最小组成单位的连续单位组作为当前语义关联所描述的字段对的潜在自变量字段,之后在当前连续单位组之后的报文区域内搜索是否存在满足当前语义关联的关联语义特征的因变量字段,即是否存在一个取值等于潜在自变量字段的运算校验和的字段,如果存在,则将所述潜在自变量字段及搜索到的因变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对;如果不存在,则将自变量字段的当前搜索起始位置向后移动一个最小组成单位作为新的搜索起始位置,并返回执行上述搜索过程,直到自变量字段的搜索起始位置到达预留出因变量字段长度后的最后一个最小组成单位,停止当前搜索。
下面以从后到前的遍历方向为例。
根据所确定的遍历方向及自变量字段与因变量字段之间的位置关系设定自变量字段的搜索起始位置,对于校验码语义关联,由于因变量字段(即校验码字段)位于自变量字段的后面,因此本步骤中可在报文后面预留出因变量字段的长度后,将紧邻所述因变量字段长度的前一个最小组成单位的位置作为自变量字段的搜索起始位置将报文的最后面一个最小组成单位作为自变量字段的搜索起始位置,按照连续单位组内元素由少到多或由多到少的顺序依次将从所述搜索起始位置开始的包含前面若干最小组成单位的连续单位组作为当前语义关联所描述的字段对的潜在自变量字段,之后在当前搜索起始位置之后的报文区域内搜索是否存在满足当前语义关联的关联语义特征的因变量字段,即是否存在一个取值等于潜在自变量字段的运算校验和的字段,如果存在,则将所述潜在自变量字段及搜索到的因变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对;如果不存在,则将自变量字段的当前搜索起始位置向前移动一个最小组成单位作为新的搜索起始位置,并返回执行上述搜索过程,直到自变量字段的搜索起始位置到达最前面一个最小组成单位,停止当前搜索。
对于校验码语义关联,除了可按上述示例二中列举的方法进行遍历以外,还可以按照下列示例三中的方法进行遍历。
示例三、校验码语义关联
根据当前语义关联的关联语义特征中的自变量字段与因变量字段的位置关系,在当前分段中确定自变量字段的遍历方向及搜索起始位置;
设置指向所述搜索起始位置的静态位置索引和动态位置索引;
将所述静态位置索引与所述动态位置索引之间的由连续的最小组成单位构成的连续单位组作为当前语义关联所描述的字段对的潜在自变量字段,在所述当前分段中满足所述位置关系的方向搜索潜在的因变量字段,在所述潜在的因变量字段能够与所述潜在自变量字段或所述潜在自变量字段中以所述动态位置索引为一边界的部分连续单位组构成满足当前语义关联的关联语义特征的字段对时,将所述字段对作为搜索到的一个字段对,若动态位置索引没有到达当前分段的搜索终点,则在所述搜索方向上将与所述动态位置索引相邻的最小组成单位作为当前的搜索起始位置,设置指向所述搜索起始位置的静态位置索引和动态位置索引,并返回执行本步骤;在所述潜在的因变量字段无法与所述潜在自变量字段或所述潜在自变量字段中以所述动态位置索引为一边界的部分连续单位组构成满足当前语义关联的关联语义特征的字段对时,若动态位置索引没有到达当前分段的搜索终点,则以当前分段中的最小组成单位为搜索单位向所述搜索方向移动所述动态位置索引,并返回执行本步骤;若动态位置索引到达当前分段的搜索终点,则结束对当前分段的搜索。
在示例三中,若每次搜索到字段对便对其在当前报文组的其它报文中的相应位置进行验证的话,则在所述字段对通过验证时,根据当前语义关联的关联语义特征确定当前报文组的报文中与所述通过验证的字段对相对应的位置的协议格式,并在动态位置索引没有到达当前分段的搜索终点时,在所述搜索方向上将与所述动态位置索引相邻的最小组成单位作为当前的搜索起始位置,并设置指向所述搜索起始位置的静态位置索引和动态位置索引,之后重复前述搜索;若所述字段对没有通过验证且动态位置索引没有到达当前分段的搜索终点,则以当前分段中的最小组成单位为搜索单位向所述搜索方向移动所述动态位置索引,之后重复前述搜索。
第二种:先对报文进行分段,再在所提取的报文中基于所述分段搜索满足当前语义关联的关联语义特征的所有字段对。
这种方法在从当前报文组中提取出一个报文之前,可首先在当前报文组的所有报文中找出各个公共子串,在每个报文中,每个公共子串分别构成所述报文的一个分段,各公共子串所间隔开的每个非公共子串分别构成所述报文的一个分段。其中,每个公共子串在当前报文组的每个报文中均具有相同的取值和相同的位置,且每个报文中与所述公共子串前后相邻的最小组成单位在当前报文组的至少一个其它报文的相应位置处具有不同的取值。
例如,若当前报文组中存在N个报文P1,P2,...,PN,这N个报文为具有相同格式类型的不同报文实例。在这个N个报文中,有些字段在每个报文中通常会取不同的值,如序号、数据等;而有些字段在每个报文中通常会取相同的值,如类型等。本文中称这些在每个报文中通常取值相同且位置相同的字段为报文中的公共子串。因此本实施例中可在当前报文组的所有报文中找出各个公共子串,且每个报文中与所述公共子串前后相邻的最小组成单位在当前报文组的至少一个其它报文的相应位置处具有不同的取值,这样是为了避免将公共子串中的各部分再次作为公共子串,例如,假设采用可打印字符编码的各报文的相同位置处均包括“string”子串,查找公共子串的目的是查找出整个“string”,将其作为一个公共子串,而不是将“s”作为一个公共子串,将“t”作为一个公共子串,或将“st”作为一个公共子串等。
具体实现时,可采用序列对齐算法(SequenceAlignmentAlgorithm)或多重序列对齐算法(MultipleSequenceAlignmentAlgorithm)等在当前报文组的所有报文中找出各个公共子串。
图2示出了对报文组中N个报文P1,P2,...,PN分段后的示意图。如图2所示,si表示各个公共子串,dni表示各个非公共子串。其中,i=1,2,...,n=1,2,...,N。可见,每个报文被划分成各个分段。
之后,在所提取的报文中基于所述分段搜索满足当前语义关联的关联语义特征的所有字段对,具体可包括:以分段为搜索组合单元,在多个分段间搜索满足当前语义关联的关联语义特征的字段对;以分段内的最小组成单位为搜索组合单位,在每个分段内搜索满足当前语义关联的关联语义特征的字段对。
这种方法由于先将报文粗分为不同的分段,并基于分段进行字段对搜索,可以提高检索的效率,并降低误检率。
具体实现时,在所提取的报文中基于分段搜索满足当前语义关联的关联语义特征的所有字段对的方法也可有多种实现形式,下面分别列举两个示例:
示例一:对于在报文中存在嵌套的字段对,需要进行多重搜索。如,长度语义关联对应的字段对。
图3为本发明实施例中基于分段在报文中搜索满足当前语义关联的关联语义特征的字段对的一种方法流程图。如图3所示,该方法包括如下步骤:
步骤301,根据当前语义关联的关联语义特征确定自变量字段和因变量字段的位置关系。
对于长度语义关联,确定其因变量字段位于自变量字段的前面。
步骤302,将所提取的报文中的每个分段分别作为当前语义关联所描述的字段对的一个潜在自变量字段,对于每个潜在自变量字段沿满足所述位置关系的方向在所提取的报文中搜索该潜在自变量字段所对应的因变量字段,若搜索到对应的因变量字段,则将所述对应的因变量字段以及该潜在自变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对。
具体搜索时,可按照由前向后或由后向前的顺序,依次将每个分段作为当前语义关联所描述的字段对的一个潜在自变量字段,对于长度语义关联,可在所述潜在自变量字段的前方报文区域搜索对应的因变量字段,即取值等于该潜在自变量长度的字段,对于二进制编码的报文,可验证由1个字节、2个字节或4个字节等构成的字段的取值。
步骤303,将所提取的报文作为当前搜索区域。
步骤304,在当前搜索区域中,根据所述位置关系确定因变量字段的搜索方向及因变量字段的搜索起始分段。
对于长度语义关联,可确定由前向后或由后向前或从设定的任意起始位置开始的搜索方向,此处以由后向前的搜索方向为例。则长度字段可从倒数第三个分段开始向前搜索。
步骤305,从所述搜索起始分段的满足所述位置关系的相邻分段开始,按照分段组内元素由少到多或由多到少的次序依次遍历由连续的分段构成的分段组所有可能的组合,即所有可能的分段组,所述分段组包括至少两个且连续的分段,将当前遍历的分段组作为当前语义关联所描述的字段对的潜在自变量字段,在所述搜索起始分段中搜索该潜在自变量字段所对应的因变量字段。
对于长度语义关联,可从搜索起始分段后面的相邻分段开始,按照分段组内元素由少到多或由多到少的次序依次遍历由连续的分段构成的分段组所有可能的组合。以图2中所示的分段为例,若假设当前提取的报文为P1,且当前的搜索起始分段为d1i,则可依次遍历分段组sid1(i+1)、sid1(i+s)si+1、......,将当前遍历的分段组作为当前语义关联所描述的字段对的潜在自变量字段,在d1i中搜索对应的因变量字段。又假设当前提取的报文为P1,且当前的搜索起始分段为si,则可依次遍历分段组d1(+1)si+1、d1(+1)si+1d1(i+2)、......,将当前遍历的分段组作为当前语义关联所描述的字段对的潜在自变量字段,在si中搜索对应的因变量字段。
步骤306,判断是否搜索到对应的因变量字段,如搜索到对应的因变量字段,则执行步骤307;否则,执行步骤308。
步骤307,将所述潜在自变量字段及搜索到的因变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对,并执行步骤308。
步骤308,判断当前搜索区域中是否还存在未搜索因变量字段的分段,如存在,则执行步骤309;否则执行步骤310。
步骤309,将所述搜索起始分段在所述搜索方向上的相邻分段作为当前的搜索起始分段,并返回执行步骤305。
对于上述由后向前的搜索方向,可将搜索起始分段前面的分段作为当前的搜索起始分段。
步骤310,将当前搜索区域中的每个分段依次作为当前分段,在当前分段中根据所述位置关系确定自变量字段的搜索方向及搜索起始位置。
对于长度语义关联,可确定由前到后,或由后到前,或从设定的任意起始位置开始的搜索方向。这里以由后到前的搜索方向为例。由于因变量字段(即长度字段)位于自变量字段的前面,因此本步骤中可将报文的最后一个最小组成单位作为自变量字段的搜索起始位置。
其中,对于二进制编码的协议报文,其最小组成单位为字节,则当前分段可表示为b1b2b3b4...bl;对于可打印字字符编码的协议报文,其最小组成单位为字符,则当前分段可表示为st1st2st3st4...stl。
步骤311,设置指向所述搜索起始位置的静态位置索引和动态位置索引。
本实施例中,可分别用tstatic和tdynamic表示静态位置索引和动态位置索引,则本步骤中,可首先令tdynamic=istatic=l。
步骤312,将所述静态位置索引与所述动态位置索引之间的由连续的最小组成单位构成的连续单位组作为当前语义关联所描述的字段对的潜在自变量字段,在所述当前分段中满足所述位置关系的方向搜索潜在的因变量字段。
对于长度语义关联,可在潜在自变量字段前面的分段区域内搜索潜在因变量字段,对于二进制编码的报文,可在潜在自变量字段前面的分段区域内提取1个字节、2个字节或4个字节等的字段,并计算其取值。
步骤313,判断所述潜在的因变量字段是否能够与所述潜在自变量字段或所述潜在自变量字段中以所述动态位置索引为一边界的部分连续单位组构成满足当前语义关联的关联语义特征的字段对,如能够,则执行步骤314;否则,执行步骤320。
对于上述长度语义关联,假设上述计算的取值中存在取值m小于或等于静态位置索引与动态位置索引之间的连续单位组的长度,则执行步骤314;若上述计算的取值中均大于静态位置索引与动态位置索引之间的连续单位组的长度,则执行步骤320。
步骤314,将所述字段对作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对。
对于上述长度语义关联,可将idynamic与idynamic+m之间的连续单位组作为与取值为m的因变量字段相对应的自变量字段,并将该因变量字段及对应的自变量字段作为识别出的字段对。
步骤315,判断动态位置索引是否到达当前分段的搜索终点,如没有,则执行步骤316;否则,执行步骤317。
对于上述长度语义关联,当前分段的搜索终点为预留出因变量字段后的最前面一个最小组成单位。
步骤316,在所述搜索方向上将与所述动态位置索引相邻的最小组成单位作为当前的搜索起始位置,并设置指向所述搜索起始位置的静态位置索引和动态位置索引,之后返回执行步骤312。
对于上述长度语义关联,则可将idynamic之前的最小组成单位作为当前的搜索起始位置,并令idynamic=idynamic-1,istatic=idynamic。
步骤317,将当前分段中搜索到的每个字段对分别作为当前分段的一个子分段,并将个字段对所间隔开的每个连续单位组分别作为当前分段的一个子分段。
步骤318,判断所述当前分段的子分段的数量是否大于1,如是,则执行步骤319;否则,结束对当前分段的搜索。
步骤319,将所述当前分段作为当前搜索区域,将所述子分段作为当前搜索区域的分段,并返回执行步骤304。
步骤320,判断动态位置索引是否到达当前分段的搜索终点,如没有,则执行步骤321;否则,结束对当前分段的搜索。
步骤321,以当前分段中的最小组成单位为搜索单位向所述搜索方向移动所述动态位置索引,并返回执行步骤312。
对于上述长度语义关联,本步骤中可令istatic=istatic-1。
上述方法中,步骤302与步骤303-321之间没有严格的先后执行顺序,例如,也可先执行步骤303-321,再执行步骤302。
本实施例中,可分别在步骤302、步骤307和步骤314中对每次搜索到的字段对在当前报文组的其它报文中的相应位置进行验证,以避免在搜索过程中存在巧合的情况,并在所述字段对通过验证时,根据当前语义关联的关联语义特征确定当前报文组的报文中与所述通过验证的字段对相对应的位置的协议格式。其中,在对步骤314中搜索到的字段对进行验证时,对于在每搜索到一个字段对时,便对该字段对在当前报文组的其它报文中的相应位置进行验证,验证结束后再搜索下一个字段对的情况,若验证通过,则执行步骤315;若验证不通过,则可执行步骤320,或者执行步骤315。
或者,本实施例中,也可在上述搜索完成后,再对所搜索出的各个字段对在当前报文组的其它报文中的相应位置进行验证。
示例二:对于在报文中不存在嵌套的字段对,可只进行一重搜索。如,校验码语义关联对应的字段对。
图4为本发明又实施例中基于分段在报文中搜索满足当前语义关联的关联语义特征的字段对的又一种方法流程图。如图4所示,该方法包括如下步骤:
步骤401,根据当前语义关联的关联语义特征确定自变量字段和因变量字段的位置关系。
对于校验码语义关联,确定其因变量字段位于自变量字段的后面。
步骤402,在所提取的报文中,根据所述位置关系确定因变量字段的搜索方向及因变量字段的搜索起始分段。
对于校验码语义关联,可确定由前向后或由后向前或从设定的任意起始位置开始的搜索方向,此处以由前向后的搜索方向为例。则长度字段可从第二个分段开始向前搜索。
步骤403,从所述搜索起始分段的满足所述位置关系的相邻分段开始,按照分段组内元素由少到多或由多到少的次序依次遍历由连续的分段构成的分段组所有可能的组合,即所有可能的分段组,所述分段组包括至少一个且连续的分段,将当前遍历的分段组作为当前语义关联所描述的字段对的潜在自变量字段,在所述搜索起始分段中搜索该潜在自变量字段所对应的因变量字段。
对于校验码语义关联,可从搜索起始分段前面的相邻分段开始,按照组内元素由少到多或由多到少的次序依次遍历由连续的分段构成的分段组所有可能的组合。以图2中所示的分段为例,若假设当前提取的报文为P1,且当前的搜索起始分段为d1i,则可依次遍历分段组si-1d1(i-1)、si-1d1(i-1)si-2、......,将当前遍历的分段组作为当前语义关联所描述的字段对的潜在自变量字段,在d1i中搜索对应的因变量字段。又假设当前提取的报文为P1,且当前的搜索起始分段为si,则可依次遍历分段组d1isi-1、d1isi-1d1(i-1)、......,将当前遍历的分段组作为当前语义关联所描述的字段对的潜在自变量字段,在si中搜索对应的因变量字段。
步骤404,判断是否搜索到对应的因变量字段,如搜索到对应的因变量字段,则执行步骤405;否则,执行步骤406。
步骤405,将所述潜在自变量字段及搜索到的因变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对。
步骤406,判断当前搜索区域中是否还存在未搜索因变量字段的分段,如存在,则执行步骤407;否则执行步骤408。
步骤407,将所述搜索起始分段在所述搜索方向上的相邻分段作为当前的搜索起始分段,并返回执行步骤403;否则,执行步骤408。
对于上述由前向后的搜索方向,可将搜索起始分段后面的分段作为当前的搜索起始分段。
步骤408,将当前搜索区域中的每个分段依次作为当前分段,在当前分段中确定自变量字段的搜索方向及搜索起始位置。
对于校验码语义关联,可确定由前到后,或由后到前,或从设定的任意起始位置开始的搜索方向。这里以由前到后的搜索方向为例。由于因变量字段(即长度字段)位于自变量字段的后面,因此本步骤中可将报文的最前面一个最小组成单位作为自变量字段的搜索起始位置。
其中,对于二进制编码的协议报文,其最小组成单位为字节,则当前分段可表示为b1b2b3b4...bl;对于可打印字字符编码的协议报文,其最小组成单位为字符,则当前分段可表示为st1st2st3st4...stl。
步骤409,设置指向所述搜索起始位置的静态位置索引和动态位置索引。
本实施例中,可分别用istatic和idynamic表示静态位置索引和动态位置索引,则本步骤中,可首先令idynamic=istatic=1。
步骤410,将所述静态位置索引与所述动态位置索引之间的由连续的最小组成单位构成的连续单位组作为当前语义关联所描述的字段对的潜在自变量字段,在所述当前分段中满足所述位置关系的方向搜索潜在的因变量字段。
对于校验码语义关联,可在潜在自变量字段后面的分段区域内搜索潜在因变量字段,对于二进制编码的报文,可在潜在自变量字段后面的分段区域内提取1个字节或2个字节等的字段,并计算其取值。
步骤411,判断所述潜在的因变量字段是否能够与所述潜在自变量字段或所述潜在自变量字段中从所述动态位置索引开始的部分连续单位组构成满足当前语义关联的关联语义特征的字段对,如能够,则执行步骤412;否则,执行步骤415。
对于上述校验码语义关联,假设上述计算的取值中存在取值m等于静态位置索引与动态位置索引之间的连续单位组的运算校验和,或者等于连续单位组中的从动态位置索引开始的一部分的运算校验和,则执行步骤412;否则,执行步骤415。
步骤412,将所述字段对作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对。
对于上述校验码语义关联,可将对应的连续单位组或部分连续单位组作为与取值为m的因变量字段相对应的自变量字段,并将该因变量字段及对应的自变量字段作为识别出的字段对。
步骤413,判断动态位置索引是否到达当前分段的搜索终点,如没有,则执行步骤414;否则,结束对当前分段的搜索。
对于上述校验码语义关联,当前分段的搜索终点为预留出因变量字段后的最后面一个最小组成单位。
步骤414,在所述搜索方向上将与所述动态位置索引相邻的最小组成单位作为当前的搜索起始位置,并设置指向所述搜索起始位置的静态位置索引和动态位置索引,之后返回执行步骤410。
对于上述校验码语义关联,则可将idynamic之后的最小组成单位作为当前的搜索起始位置,并令idynamic=idynamic+1,istatic=idynamic。
步骤415,判断动态位置索引是否到达当前分段的搜索终点,如没有,则执行步骤416;否则,结束对当前分段的搜索。
步骤416,以当前分段中的最小组成单位为搜索单位向所述搜索方向移动所述动态位置索引,并返回执行步骤410。
对于上述长度语义关联,本步骤中可令istatic=istatic+1。
上述方法中,步骤402-407与步骤408-416之间没有严格的先后执行顺序,例如,也可先执行步骤408-416,再执行步骤402-407。
本实施例中,可分别在步骤405和步骤412中对每次搜索到的字段对在当前报文组的其它报文中的相应位置进行验证,以避免在搜索过程中存在巧合的情况,并在所述字段对通过验证时,根据当前语义关联的关联语义特征确定当前报文组的报文中与所述通过验证的字段对相对应的位置的协议格式。其中,在对步骤412中搜索到的字段对进行验证时,对于在每搜索到一个字段对时,便对该字段对在当前报文组的其它报文中的相应位置进行验证,验证结束后再搜索下一个字段对的情况,若验证通过,则执行步骤413;若验证不通过,则可执行步骤415,或者执行步骤413。
或者,本实施例中,也可在上述搜索完成后,再对所搜索出的各个字段对在当前报文组的其它报文中的相应位置进行验证。
以上对本发明实施例中的未知协议的逆向工程方法进行了详细描述,下面再对本发明实施例中未知协议的逆向工程系统进行详细描述。
图5为本发明实施例中未知协议的逆向工程系统的示例性结构图。如图5所示,该系统可包括:报文采集模块501、报文分组模块502、语义关联信息存储模块503、字段对搜索模块504、字段对校验模块505和协议格式确定模块506。
其中,报文采集模块501用于采集协议实施实体之间的协议报文流。报文采集模块501的具体实现过程可与图1所示步骤101中描述的过程一致,此处不再赘述。
报文分组模块502用于对所述协议报文流进行分组,得到至少一个报文组;其中具有相同格式类型的报文被分到同一个报文组。报文分组模块502的具体实现过程可与图1所示步骤102描述中的过程一致,此处不再赘述。
语义关联信息存储模块503用于存储预先确定的至少一种存在于报文字段间的语义关联,所述语义关联用于描述字段对中自变量字段和因变量字段之间的关联语义特征。具体的语义关联、自变量字段和因变量字段构成的字段对及其对应的关联语义特征等均可与图1所示步骤104中的描述一致,此处不再赘述。
字段对搜索模块504用于从具有相同格式类型的当前报文组中提取出一个报文,在所提取的报文中搜索满足当前语义关联的关联语义特征的所有字段对,并将搜索到的字段对的信息提供给字段对校验模块505。字段对搜索模块504的具体实现过程可与方法实施例中描述的对应实现一致,例如也可以包括方法实施例中列举的两种具体实现形式。
具体实现时,可由语义关联信息存储模块503确定欲处理的当前语义关联,并将所确定的信息提供给字段对搜索模块504,则字段对搜索模块504可在对满足当前语义关联的关联语义特征的字段对的搜索完成后,通知语义关联信息存储模块503继续确定当前语义关联。
或者,语义关联信息存储模块503也可将所存储的语义关联信息提供给字段对搜索模块504,由字段对搜索模块504确定当前的语义关联,并在对满足当前语义关联的关联语义特征的字段对的搜索完成后,重新从未处理的语义关联中确定当前语义关联。
此外,具体实现时,可由报文分组模块502确定欲处理的当前报文组,并将所确定的当前报文组提供给字段对搜索模块504,此时报文分组模块502可依次将每个报文组确定为当前报文组。则字段对搜索模块504可在对当前报文组的搜索完成后,通知报文分组模块502重新确定当前报文组。
或者,报文分组模块502也可将所划分的所有报文组同时提供给字段对搜索模块504,由字段对搜索模块504确定欲处理当前报文组,此时,字段对搜索模块504可在对当前报文组的搜索完成后,重新从未处理的报文组中确定当前报文组。
字段对校验模块505用于对字段对搜索模块搜索出的字段对在当前报文组的其它报文中的相应位置进行验证。具体实现时,当前报文组的其他报文可以是由字段对搜索模块504提供给字段对校验模块505的,也可以是由报文分组模块502提供给字段对校验模块505的。
具体实现时,字段对校验模块505可以在字段对搜索模块504完成整个搜索后,再对每个搜索到的字段对在当前报文组的其它报文中的相应位置进行验证。或者,字段对校验模块505也可以在字段对搜索模块504每搜索到一个字段对时,便对该字段对在当前报文组的其它报文中的相应位置进行验证,验证结束后再通知字段对搜索模块504搜索下一个字段对。又或者,字段对校验模块505也可以于字段对搜索模块504并行处理搜索和验证过程,即字段对校验模块505在字段对搜索模块504每搜索到一个字段对时,便对该字段对在当前报文组的其它报文中的相应位置进行验证,同时字段对搜索模块504还可开始搜索另一个字段对,即字段对搜索模块504的搜索和字段对校验模块505的验证同步并行进行,这种并行搜索验证的方式可以节约时间,提高逆向工程的效率。具体采用何种实现方式,可根据实际需要确定。
协议格式确定模块506用于对通过字段对校验模块验证的字段对,根据当前语义关联的关联语义特征确定当前报文组的报文中与所述通过验证的字段对相对应的位置的协议格式。
在本发明的另一实施例中,报文采集模块501和/或报文分组模块502均可由现有模块实现,此时本发明实施例中的未知协议的逆向工程系统可不包括报文采集模块501和/或报文分组模块502。
基于不同的具体实现,字段对搜索模块504可有不同的具体实现结构。图6示出了图5中所示字段对搜索模块的一种内部结构示意图。如图6所示,该字段对搜索模块可包括:第一报文提取模块601、第一位置关系确定模块602和遍历搜索模块603。
其中,第一报文提取模块601用于从具有相同格式类型的当前报文组中提取出一个报文。
第一位置关系确定模块602用于根据当前语义关联的关联语义特征确定自变量字段和因变量字段的位置关系。
遍历搜索模块603用于在所述报文提取模块601提取的报文中,遍历由连续的最小组成单位构成的连续单位组的所有可能的组合,即所有可能的连续单位组,所述连续单位组包括至少一个且连续的最小组成单位,将当前遍历的连续单位组作为当前语义关联所描述的字段对的潜在自变量字段,在所提取的报文中满足所述位置关系的方向搜索所述潜在自变量字段所对应的因变量字段,在搜索到所述对应的因变量字段时,将所述潜在自变量字段及搜索到的因变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对。
具体实现时,针对不同的语义关联及不同的遍历方向,第一遍历搜索模块602可进行适应性的处理,如可根据实际情况执行示例一至示例三中所列举的各种具体实现情况等。
此外,与本实施例中的未知协议的逆向工程方法相一致,本实施例中的未知协议的逆向工程系统中可如图5中的虚线部分所示,进一步包括:分段模块507,用于在当前报文组的所有报文中找出各个公共子串,在每个报文中,每个公共子串分别构成所述报文的一个分段,各公共子串所间隔开的每个非公共子串也分别构成所述报文的一个分段;所述公共子串在当前报文组的每个报文中均具有相同的取值和相同的位置,且每个报文中与所述公共子串前后相邻的最小组成单位在当前报文组的至少一个其它报文的相应位置处具有不同的取值。其中,分段模块507的具体实现过程可与本发明实施例中未知协议的逆向工程方法中描述的实现过程一致,此处不再赘述。
此时,字段对搜索模块504可在所提取的报文中基于所述分段搜索满足当前语义关联的关联语义特征的所有字段对,具体可包括:以分段为搜索组合单元,在多个分段间搜索满足当前语义关联的关联语义特征的字段对;以分段内的最小组成单位为搜索组合单位,在每个分段内搜索满足当前语义关联的关联语义特征的字段对。
相应地,字段对校验模块505在对字段对搜索模块504搜索出的字段对进行校验时,当前报文组的其他报文可以是由字段对搜索模块504提供给字段对校验模块505的,也可以是由报文分组模块502提供给字段对校验模块505的,还可以是由分段模块507提供给字段对校验模块505的。
针对不同的实现,字段对搜索模块504可具有不同的内部结构实现形式。图7示出图5中所示字段对搜索模块的又一种内部结构示意图。如图7所示,该字段对搜索模块可包括:第二报文提取模块701、第二位置关系确定模块702、第一搜索模块703、第二搜索模块704和第三搜索模块705。
其中,第二报文提取模块701用于从所述分段模块507中提取出一个报文,并将所提取的报文作为当前搜索区域。
第二位置关系确定模块702用于根据当前语义关联的关联语义特征确定自变量字段和因变量字段的位置关系。
第一搜索模块703用于将所述提取的报文的每个分段分别作为当前语义关联所描述的字段对的一个潜在自变量字段,对于每个潜在自变量字段沿满足所述位置关系的方向在所提取的报文中搜索该潜在自变量字段所对应的因变量字段,若搜索到对应的因变量字段,则将所述对应的因变量字段以及该潜在自变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对。
第二搜索模块704用于在当前搜索区域中,根据所述位置关系确定因变量字段的搜索方向及因变量字段的搜索起始分段,从所述搜索起始分段的满足所述位置关系的相邻分段开始,按照分段组内元素由少到多或由多到少的次序依次遍历由连续的分段构成的分段组所有可能的组合,即所有可能的分段组,所述分段组包括至少两个且连续的分段,将当前遍历的分段组作为当前语义关联所描述的字段对的潜在自变量字段,在所述搜索起始分段中搜索该潜在自变量字段所对应的因变量字段,在搜索到对应的因变量字段时,将所述潜在自变量字段及搜索到的因变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对;若当前搜索区域中还存在未搜索因变量字段的分段,则将所述搜索起始分段在所述搜索方向上的相邻分段作为当前的搜索起始分段,并重复前述搜索。
第三搜索模块705用于将当前搜索区域中的每个分段分别作为当前分段,在所述当前分段中根据所述位置关系确定自变量字段的搜索方向及搜索起始位置,并设置指向所述搜索起始位置的静态位置索引和动态位置索引;将所述静态位置索引与所述动态位置索引之间的由连续的最小组成单位构成的连续单位组作为当前语义关联所描述的字段对的潜在自变量字段,在所述当前分段中满足所述位置关系的方向搜索潜在的因变量字段,在所述潜在的因变量字段能够与所述潜在自变量字段或所述潜在自变量字段中以所述动态位置索引为一边界的部分连续单位组构成满足当前语义关联的关联语义特征的字段对时,将所述字段对作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对,若动态位置索引没有到达当前分段的搜索终点,则在所述搜索方向上将与所述动态位置索引相邻的最小组成单位作为当前的搜索起始位置,设置指向所述搜索起始位置的静态位置索引和动态位置索引,并重复上述搜索过程;在所述潜在的因变量字段无法与所述潜在自变量字段或所述潜在自变量字段中以所述动态位置索引为一边界的部分连续单位组构成满足当前语义关联的关联语义特征的字段对时,若动态位置索引没有到达当前分段的搜索终点,则以当前分段中的最小组成单位为搜索单位向所述搜索方向移动所述动态位置索引,并重复上述搜索过程;若动态位置索引到达当前分段的搜索终点,且在当前分段中搜索到字段对,则将当前分段中搜索到的每个字段对分别作为当前分段的一个子分段,将每个字段对所间隔开的每个连续单位组分别作为当前分段的一个子分段,在所述当前分段的子分段的数量大于1时,将所述当前分段作为当前搜索区域,将所述子分段作为当前搜索区域的分段,通知第二搜索模块704在当前搜索区域内搜索;若动态位置索引到达当前分段的搜索终点,且在当前分段中未搜索到字段对,则结束对当前分段的搜索。
其中,对于字段对校验模块505在字段对搜索模块504每搜索到一个字段对时,便对该字段对在当前报文组的其它报文中的相应位置进行验证,验证结束后再通知字段对搜索模块504搜索下一个字段对的情况,字段对校验模块505在校验通过时,将校验通过消息通知给字段对搜索模块504,相应地,字段对搜索模块504在判断动态位置索引没有到达当前分段的搜索终点时,在所述搜索方向上将与所述动态位置索引相邻的最小组成单位作为当前的搜索起始位置,设置指向所述搜索起始位置的静态位置索引和动态位置索引,之后重复搜索过程。字段对校验模块505在校验没有通过时,将校验失败消息通知给字段对搜索模块504,相应地,字段对搜索模块504在判断动态位置索引没有到达当前分段的搜索终点时,以当前分段中的最小组成单位为搜索单位向所述搜索方向移动所述动态位置索引,之后重复搜索过程。
图7所示各功能模块的具体实现过程可与图3所示方法中的相应描述一致。
图8示出图5中所示字段对搜索模块的再一种内部结构示意图。如图8所示,该字段对搜索模块可包括:第三报文提取模块801、第三位置关系确定模块802、第四搜索模块803和第五搜索模块804。
其中,第三报文提取模块801用于从所述分段模块507中提取出一个报文。
第三位置关系确定模块802用于根据当前语义关联的关联语义特征确定自变量字段和因变量字段的位置关系。
第四搜索模块803用于在所述第三报文提取模块801提取的报文中,根据所述位置关系确定因变量字段的搜索方向及因变量字段的搜索起始分段;从所述搜索起始分段的满足所述位置关系的相邻分段开始,按照分段组内元素由少到多或由多到少的次序依次遍历由连续的分段构成的分段组所有可能的组合,即所有可能的分段组,所述分段组包括至少一个且连续的分段,将当前遍历的分段组作为当前语义关联所描述的字段对的潜在自变量字段,在所述搜索起始分段中搜索该潜在自变量字段所对应的因变量字段,在搜索到对应的因变量字段时,将所述潜在自变量字段及搜索到的因变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对;若当前搜索区域中还存在未搜索因变量字段的分段,则将所述搜索起始分段在所述搜索方向上的相邻分段作为当前的搜索起始分段,并重复执行上述搜索过程。
第五搜索模块804用于将所述第三报文提取模块801提取的报文中的每个分段分别作为当前分段,在当前分段中根据所述位置关系确定自变量字段的搜索方向及搜索起始位置,设置指向所述搜索起始位置的静态位置索引和动态位置索引,将所述静态位置索引与所述动态位置索引之间的由连续的最小组成单位构成的连续单位组作为当前语义关联所描述的字段对的潜在自变量字段,在所述当前分段中满足所述位置关系的方向搜索潜在的因变量字段,在所述潜在的因变量字段能够与所述潜在自变量字段或所述潜在自变量字段中以所述动态位置索引为一边界的部分连续单位组构成满足当前语义关联的关联语义特征的字段对时,将所述字段对作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对,若动态位置索引没有到达当前分段的搜索终点,则在所述搜索方向上将与所述动态位置索引相邻的最小组成单位作为当前的搜索起始位置,设置指向所述搜索起始位置的静态位置索引和动态位置索引,并重复执行上述搜索过程;在所述潜在的因变量字段无法与所述潜在自变量字段或所述潜在自变量字段中以所述动态位置索引为一边界的部分连续单位组构成满足当前语义关联的关联语义特征的字段对时,若动态位置索引没有到达当前分段的搜索终点,则以当前分段中的最小组成单位为搜索单位向所述搜索方向移动所述动态位置索引,并重复执行上述搜索过程;若动态位置索引到达当前分段的搜索终点,则结束对当前分段的搜索。
其中,对于字段对校验模块505在字段对搜索模块504每搜索到一个字段对时,便对该字段对在当前报文组的其它报文中的相应位置进行验证,验证结束后再通知字段对搜索模块504搜索下一个字段对的情况,字段对校验模块505在校验通过时,将校验通过消息通知给字段对搜索模块504,相应地,字段对搜索模块504在判断动态位置索引没有到达当前分段的搜索终点时,在所述搜索方向上将与所述动态位置索引相邻的最小组成单位作为当前的搜索起始位置,设置指向所述搜索起始位置的静态位置索引和动态位置索引,之后重复搜索过程。字段对校验模块505在校验没有通过时,将校验失败消息通知给字段对搜索模块504,相应地,字段对搜索模块504在判断动态位置索引没有到达当前分段的搜索终点时,以当前分段中的最小组成单位为搜索单位向所述搜索方向移动所述动态位置索引,之后重复搜索过程。
图8所示各功能模块的具体实现过程可与图4所示方法中的相应描述一致。
本发明实施例中,预先确定至少一种存在于报文字段间的语义关联,描述了自变量字段和因变量字段构成的字段对之间的关联语义特征;并从具有相同格式类型的当前报文组中提取出一个报文,在所提取的报文中搜索满足当前语义关联的关联语义特征的所有字段对,对搜索出的字段对在当前报文组的其它报文中的相应位置进行验证,对通过验证的字段对,根据当前语义关联的关联语义特征确定当前报文组的报文中与所述通过验证的字段对相对应的位置的协议格式
可见,通过采用基于语义关联的方法对未知协议进行逆向工程,可以直接根据协议报文自动进行未知协议的逆向工程,而无需访问协议实施实体的源代码程序。此外,由于语义关联不仅存在于可打印字符编码的协议报文中,而且存在于二进制编码的报文中,因此不仅可以基于可打印字符编码的协议报文进行未知协议的逆向工程,而且可以基于二进制编码的协议报文进行未知协义的逆向工程,应用范围较广。
此外,本发明实施例中的技术方案还可以与其他协义的逆向工程方法联合使用,以提高所确定的协议格式的准确性。
在本发明的一个实施例中,通过先对报文组中的报文进行分段,并基于分度在所提取的报文中搜索满足当前语义关联的关联语义特征的所有字段对,可以提高逆向工程的效率,并且降低错检率。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (15)
1.一种协议的逆向工程方法,包括:
确定当前语义关联,所述当前语义关联选自预先确定的至少一种语义关联中,所述语义关联用于描述字段对的因变量字段和自变量字段之间的关联语义特征;所述自变量字段包括至少一个报文字段;
确定当前报文组,所述报文组选自获取的至少一组报文组中,且所述当前报文组包含的报文具有相同的格式类型;
从所述当前报文组中提取出一个报文;
在所述提取的报文中搜索满足所述当前语义关联的关联语义特征的所有字段对,对所述搜索出的字段对在所述当前报文组中其他报文的相应位置进行验证;
对通过验证的字段对,根据所述当前语义关联的关联语义特征确定所述当前报文组中报文的相应位置的协议格式,所述相应位置为与所述通过验证的字段对相对应的位置。
2.根据权利要求1所述的方法,其中,所述在所提取的报文中搜索满足当前语义特征的所有字段对,包括:
根据所述当前语义关联的关联语义特征确定自变量字段和因变量字段的位置关系;
在所提取的报文中,遍历所有可能的连续单位组,所述连续单位组由至少一个且连续的最小组成单位构成;所述最小组成单位为报文中不可再分的组成单位;
将当前遍历的连续单位组作为所述当前语义关联所描述的字段对的潜在自变量字段;
在所述提取的报文中按照满足所述位置关系的方向搜索所述潜在自变量字段所对应的因变量字段;
在搜索到所述对应的因变量字段时,将所述潜在自变量字段及搜索到的因变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对。
3.根据权利要求2所述的方法,其中,
所述当前语义关联所描述的字段对包括:长度字段为因变量字段,长度字段的取值所描述的字段或字段组为自变量字段的字段对;所述当前语义关联的关联语义特征包括:因变量字段的取值等于自变量字段的长度、因变量字段位于自变量字段的前面;和/或,
所述当前语义关联所描述的的字段对包括:校验码字段为因变量字段,校验码字段的取值所描述的字段或字段组为自变量字段的字段对;所述当前语义关联的关联语义特征包括:因变量字段的取值等于自变量字段的运算校验和、因变量字段位于自变量字段的后面。
4.根据权利要求1所述的方法,其中,
在所述从所述当前报文组中提取出一个报文之前,所述方法进一步包括:在所述当前报文组的所有报文中找出各个公共子串,在每个报文中,每个公共子串分别构成该报文的一个分段,各公共子串所间隔开的每个非公共子串分别构成该报文的一个分段,其中每个公共子串在当前报文组的每个报文中均具有相同的取值和相同的位置,且每个报文中与所述公共子串前后相邻的最小组成单位在所述当前报文组的至少一个其它报文的相应位置处具有不同的取值;
所述在所述提取的报文中搜索满足所述当前语义关联的关联语义特征的所有字段对,包括:
在所述提取的报文中基于该报文的分段搜索满足所述当前语义关联的关联语义特征的所有字段对。
5.根据权利要求4所述的方法,其中,所述在所述提取的报文中基于该报文的分段搜索满足所述当前语义关联的关联语义特征的所有字段对,对所述搜索出的字段对在所述当前报文组中其他报文的相应位置进行验证,包括:
A1、根据所述当前语义关联的关联语义特征确定自变量字段和因变量字段的位置关系;
B1、将所述提取的报文的每个分段分别作为当前语义关联所描述的字段对的潜在自变量字段,对于每个潜在自变量字段沿满足所述位置关系的方向在所述提取的报文中搜索该潜在自变量字段所对应的因变量字段,若搜索到所述对应的因变量字段,则将所述对应的因变量字段以及该潜在自变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对;对所述搜索到的字段对在当前报文组的其它报文中的相应位置进行验证;
C1、将所述提取的报文作为当前搜索区域;
D1、在所述当前搜索区域中,根据所述位置关系确定因变量字段的搜索方向及因变量字段的搜索起始分段;
E1、从所述搜索起始分段的满足所述位置关系的相邻分段开始,按照分段组内元素由少到多或由多到少的次序依次遍历所有可能的分段组,所述分段组包括至少两个且连续的分段,将当前遍历的分段组作为当前语义关联所描述的字段对的潜在自变量字段,在所述搜索起始分段中搜索该潜在自变量字段所对应的因变量字段,在搜索到所述对应的因变量字段时,将所述对应的因变量字段及该潜在自变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对,对所述搜索到的字段对在所述当前报文组的其它报文中的相应位置进行验证,若所述当前搜索区域中还存在未搜索因变量字段的分段,则将所述搜索起始分段在所述搜索方向上的相邻分段作为当前的搜索起始分段,并返回执行本步骤;否则,执行步骤F1;
F1、将所述当前搜索区域中的每个分段分别作为当前分段,在所述当前分段中根据所述位置关系确定自变量字段的搜索方向及搜索起始位置;
G1、设置指向所述搜索起始位置的静态位置索引和动态位置索引;
H1、将所述静态位置索引与所述动态位置索引之间的连续单位组作为当前语义关联所描述的字段对的潜在自变量字段,所述连续单位组包括至少一个且连续的最小组成单位,所述最小组成单位为报文中不可再分的组成单位;在所述当前分段中沿满足所述位置关系的方向搜索潜在的因变量字段,在所述潜在的因变量字段能够与所述潜在自变量字段构成满足所述当前语义关联的关联语义特征的字段对时,或者,在所述潜在的因变量字段能够与所述潜在自变量字段中以所述动态位置索引为一边界的部分连续单位组构成满足所述当前语义关联的关联语义特征的字段对时,将所述字段对作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对,对所述搜索到的字段对在所述当前报文组的其它报文中的相应位置进行验证,若所述字段对通过验证,且所述在动态位置索引没有到达所述当前分段的搜索终点时,在所述搜索方向上将与所述动态位置索引相邻的最小组成单位作为当前的搜索起始位置,并返回执行步骤G1;若所述字段对没有通过验证且所述动态位置索引没有到达所述当前分段的搜索终点,则以所述当前分段中的最小组成单位为搜索单位向所述搜索方向移动所述动态位置索引;在所述潜在的因变量字段无法与所述潜在自变量字段或所述潜在自变量字段中以所述动态位置索引为一边界的部分连续单位组构成满足当前语义关联的关联语义特征的字段对时,若动态位置索引没有到达当前分段的搜索终点,则以当前分段中的最小组成单位为搜索单位向所述搜索方向移动所述动态位置索引,并返回执行本步骤;若所述动态位置索引到达所述当前分段的搜索终点,且在所述当前分段中搜索到字段对,则将当前分段中搜索到的每个字段对分别作为当前分段的一个子分段,将搜索到的每个字段对间隔开的每个连续单位组分别作为当前分段的一个子分段,在所述当前分段的子分段的数量大于1时,将所述当前分段作为所述当前搜索区域,将所述子分段作为当前搜索区域的分段,并返回执行步骤D1;若所述动态位置索引到达当前分段的搜索终点,且在所述当前分段中未搜索到字段对,则结束对所述当前分段的搜索。
6.根据权利要求4所述的方法,其中,所述在所述提取的报文中基于该报文的分段搜索满足所述当前语义关联的关联语义特征的所有字段对,包括:
A1、根据所述当前语义关联的关联语义特征确定自变量字段和因变量字段的位置关系;
B1、将所述提取的报文的每个分段分别作为所述当前语义关联所描述的字段对的潜在自变量字段,对于每个潜在自变量字段沿满足所述位置关系的方向在所述提取的报文中搜索该潜在自变量字段所对应的因变量字段,若搜索到所述对应的因变量字段,则将所述对应的因变量字段以及该潜在自变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对;
C1、将所述提取的报文作为当前搜索区域;
D1、在所述当前搜索区域中,根据所述位置关系确定因变量字段的搜索方向及因变量字段的搜索起始分段;
E1、从所述搜索起始分段的满足所述位置关系的相邻分段开始,按照分段组内元素由少到多或由多到少的次序依次遍历所有可能的分段组,所述分段组包括至少两个且连续的分段,将当前遍历的分段组作为所述当前语义关联所描述的字段对的潜在自变量字段,在所述搜索起始分段中搜索该潜在自变量字段所对应的因变量字段,在搜索到所述对应的因变量字段时,将所述对应的因变量字段及该潜在自变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对;若当前搜索区域中还存在未搜索因变量字段的分段,则将所述搜索起始分段在所述搜索方向上的相邻分段作为当前的搜索起始分段,并返回执行本步骤;否则,执行步骤F1;
F1、将所述当前搜索区域中的每个分段分别作为当前分段,在所述当前分段中根据所述位置关系确定自变量字段的搜索方向及搜索起始位置;
G1、设置指向所述搜索起始位置的静态位置索引和动态位置索引;
H1、将所述静态位置索引与所述动态位置索引之间的连续单位组作为当前语义关联所描述的字段对的潜在自变量字段,所述连续单位组包括至少一个且连续的最小组成单位,所述最小组成单位为报文中不可再分的组成单位;在所述当前分段中沿满足所述位置关系的方向搜索潜在的因变量字段,在所述潜在的因变量字段能够与所述潜在自变量字段构成满足所述当前语义关联的关联语义特征的字段对时,或者,在所述潜在的因变量字段能够与所述潜在自变量字段中以所述动态位置索引为一边界的部分连续单位组构成满足所述当前语义关联的关联语义特征的字段对时,将所述字段对作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对,若所述动态位置索引没有到达所述当前分段的搜索终点,则在所述搜索方向上将与所述动态位置索引相邻的最小组成单位作为当前的搜索起始位置,并返回执行步骤G1;在所述潜在的因变量字段无法与所述潜在自变量字段或所述潜在自变量字段中以所述动态位置索引为一边界的部分连续单位组构成满足所述当前语义关联的关联语义特征的字段对时,若所述动态位置索引没有到达当前分段的搜索终点,则以当前分段中的最小组成单位为搜索单位向所述搜索方向移动所述动态位置索引,并返回执行本步骤;若所述动态位置索引到达当前分段的搜索终点,且在当前分段中搜索到字段对,则将当前分段中搜索到的每个字段对分别作为所述当前分段的一个子分段,将搜索到的每个字段对间隔开的每个连续单位组分别作为当前分段的一个子分段,在所述当前分段的子分段的数量大于1时,将所述当前分段作为所述当前搜索区域,将所述子分段作为当前搜索区域的分段,并返回执行步骤D1;若所述动态位置索引到所述达当前分段的搜索终点,且在所述当前分段中未搜索到字段对,则结束对所述当前分段的搜索;
所述对搜索出的字段对在当前报文组的其它报文中的相应位置进行验证为:在所述搜索完成后,对所有搜索出的字段对在所述当前报文组的其它报文中的相应位置进行验证;或者为:每搜索出一个字段对时,对所述搜索出的字段对在所述当前报文组的其它报文中的相应位置并行进行验证。
7.根据权利要求5或6所述的方法,其中,所述当前语义关联所描述的字段对包括:长度字段为因变量字段,长度字段的取值所描述的字段或字段组为自变量字段的字段对;所述当前语义关联的关联语义特征包括:因变量字段的取值等于自变量字段的长度、因变量字段位于自变量字段的前面。
8.根据权利要求4所述的方法,其中,所述在所述提取的报文中基于该报文的分段搜索满足所述当前语义关联的关联语义特征的所有字段对,对搜索出的字段对在所述当前报文组的其它报文中的相应位置进行验证,包括:
A2、根据所述当前语义关联的关联语义特征确定自变量字段和因变量字段的位置关系;
B2、在所述提取的报文中,根据所述位置关系确定因变量字段的搜索方向及因变量字段的搜索起始分段;
C2、从所述搜索起始分段的满足所述位置关系的相邻分段开始,按照分段组内元素由少到多或由多到少的次序依次遍历所有可能的分段组,所述分段组包括至少一个且连续的分段,将当前遍历的分段组作为所述当前语义关联所描述的字段对的潜在自变量字段,在所述搜索起始分段中搜索该潜在自变量字段所对应的因变量字段,在搜索到所述对应的因变量字段时,将所述对应的因变量字段及该潜在自变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对,对所述搜索到的字段对在当前报文组的其它报文中的相应位置进行验证;若当前搜索区域中还存在未搜索因变量字段的分段,则将所述搜索起始分段在所述搜索方向上的相邻分段作为当前的搜索起始分段,并返回执行本步骤;否则,执行步骤D2;
D2、将所提取的报文中的每个分段分别作为当前分段,在所述当前分段中根据所述位置关系确定自变量字段的搜索方向及搜索起始位置;
E2、设置指向所述搜索起始位置的静态位置索引和动态位置索引;
F2、将所述静态位置索引与所述动态位置索引之间的连续单位组作为所述当前语义关联所描述的字段对的潜在自变量字段,所述连续单位组包括至少一个且连续的最小组成单位,所述最小组成单位为报文中不可再分的组成单位;在所述当前分段中沿满足所述位置关系的方向搜索潜在的因变量字段,在所述潜在的因变量字段能够与所述潜在自变量字段构成满足所述当前语义关联的关联语义特征的字段对时,或者,在所述潜在的因变量字段能够与所述潜在自变量字段中以所述动态位置索引为一边界的部分连续单位组构成满足所述当前语义关联的关联语义特征的字段对时,将所述字段对作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对,对所述搜索到的字段对在当前报文组的其它报文中的相应位置进行验证,若所述字段对通过验证,且在所述动态位置索引没有到达所述当前分段的搜索终点时,在所述搜索方向上将与所述动态位置索引相邻的最小组成单位作为当前的搜索起始位置,并返回执行步骤E2;若所述字段对没有通过验证且动态位置索引没有到达当前分段的搜索终点,则以当前分段中的最小组成单位为搜索单位向所述搜索方向移动所述动态位置索引;在所述潜在的因变量字段无法与所述潜在自变量字段或所述潜在自变量字段中以所述动态位置索引为一边界的部分连续单位组构成满足所述当前语义关联的关联语义特征的字段对时,若动态位置索引没有到达当前分段的搜索终点,则以当前分段中的最小组成单位为搜索单位向所述搜索方向移动所述动态位置索引,并返回执行本步骤;若所述动态位置索引到达当前分段的搜索终点,则结束对所述当前分段的搜索。
9.根据权利要求4所述的方法,其中,所述在所述提取的报文中基于该报文的分段搜索满足所述当前语义关联的关联语义特征的所有字段对,包括:
A2、根据所述当前语义关联的关联语义特征确定自变量字段和因变量字段的位置关系;
B2、在所述提取的报文中,根据所述位置关系确定因变量字段的搜索方向及因变量字段的搜索起始分段;
C2、从所述搜索起始分段的满足所述位置关系的相邻分段开始,按照分段组内元素由少到多或由多到少的次序依次遍历所有可能的分段组,所述分段组包括至少两个且连续的分段,将当前遍历的分段组作为所述当前语义关联所描述的字段对的潜在自变量字段,在所述搜索起始分段中搜索该潜在自变量字段所对应的因变量字段,在搜索到所述对应的因变量字段时,将所述对应的因变量字段及该潜在自变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对;若所述提取的报文中还存在未搜索因变量字段的分段,则将所述搜索起始分段在所述搜索方向上的相邻分段作为当前的搜索起始分段,并返回执行本步骤;否则,执行步骤D2;
D2、将所述提取的报文中的每个分段分别作为当前分段,在所述当前分段中根据所述位置关系确定自变量字段的搜索方向及搜索起始位置;
E2、设置指向所述搜索起始位置的静态位置索引和动态位置索引;
F2、将所述静态位置索引与所述动态位置索引之间的连续单位组作为所述当前语义关联所描述的字段对的潜在自变量字段,所述连续单位组包括至少一个且连续的最小组成单位,所述最小组成单位为报文中不可再分的组成单位;在所述当前分段中沿满足所述位置关系的方向搜索潜在的因变量字段,在所述潜在的因变量字段能够与所述潜在自变量字段构成满足所述当前语义关联的关联语义特征的字段对时,或者,在所述潜在的因变量字段能够与所述潜在自变量字段中以所述动态位置索引为一边界的部分单位组构成满足所述当前语义关联的关联语义特征的字段对时,将所述字段对作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对,若所述动态位置索引没有到达所述当前分段的搜索终点,则在所述搜索方向上将与所述动态位置索引相邻的最小组成单位作为当前的搜索起始位置,并返回执行步骤E2;在所述潜在的因变量字段无法与所述潜在自变量字段或所述潜在自变量字段中以所述动态位置索引为一边界的部分单位组构成满足当前语义关联的关联语义特征的字段对时,若动态位置索引没有到达当前分段的搜索终点,则以当前分段中的最小组成单位为搜索单位向所述搜索方向移动所述动态位置索引,并返回执行本步骤;若所述动态位置索引到达所述当前分段的搜索终点,则结束对所述当前分段的搜索;
所述对搜索出的字段对在当前报文组的其它报文中的相应位置进行验证为:在所述搜索完成后,对所有搜索出的字段对在所述当前报文组的其它报文中的相应位置进行验证;或者为:每搜索出一个字段对时,对所述搜索出的字段对在所述当前报文组的其它报文中的相应位置并行进行验证。
10.根据权利要求8或9所述的方法,其中,所述当前语义关联所描述的字段对包括:校验码字段为因变量字段,校验码字段的取值所描述的字段或字段组为自变量字段的字段对;
所述当前语义关联的关联语义特征包括:因变量字段的取值等于自变量字段的运算校验和、因变量字段位于自变量字段的后面。
11.一种协议的逆向工程系统,包括:
语义关联信息存储模块(503),用于存储预先确定的至少一种存在于报文字段间的语义关联,所述语义关联用于描述字段对中自变量字段和因变量字段之间的关联语义特征;所述自变量字段包括至少一个报文字段;
字段对搜索模块(504),用于从具有相同格式类型的当前报文组中提取出一个报文,在所提取的报文中搜索满足所述当前语义关联的关联语义特征的所有字段对;
字段对校验模块(505),用于对所述字段对搜索模块(504)搜索出的字段对在当前报文组的其它报文中的相应位置进行验证;
协议格式确定模块(506),用于对通过所述字段对校验模块(505)验证的字段对,根据所述当前语义关联的关联语义特征确定当前报文组的报文中与所述通过验证的字段对相对应的位置的协议格式。
12.根据权利要求11所述的系统,其中,所述字段对搜索模块(504)包括:
第一报文提取模块(601),用于从具有相同格式类型的当前报文组中提取出一个报文;
第一位置关系确定模块(602),用于根据所述当前语义关联的关联语义特征确定自变量字段和因变量字段的位置关系;
遍历搜索模块(603),用于在所述第一报文提取模块(601)提取的报文中,遍历所有可能的连续单位组,所述连续单位组包括至少一个且连续的最小组成单位,所述最小组成单位为报文中不可再分的组成单位;将当前遍历的连续单位组作为所述当前语义关联所描述的字段对的潜在自变量字段,在所述提取的报文中按照满足所述位置关系的方向搜索所述潜在自变量字段所对应的因变量字段,在搜索到所述对应的因变量字段时,将所述潜在自变量字段及搜索到的因变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对。
13.根据权利要求11所述的系统,其中,该系统进一步包括:分段模块(507),用于在当前报文组的所有报文中找出各个公共子串,在每个报文中,每个公共子串分别构成所述报文的一个分段,各公共子串所间隔开的每个非公共子串分别构成所述报文的一个分段;每个公共子串在当前报文组的每个报文中均具有相同的取值和相同的位置,且每个报文中与所述公共子串前后相邻的最小组成单位在当前报文组的至少一个其它报文的相应位置处具有不同的取值;
所述字段对搜索模块(504)用于在所提取的报文中基于所述分段搜索满足当前语义关联的关联语义特征的所有字段对。
14.根据权利要求13所述的系统,其中,所述字段搜索模块(504)包括:
第二报文提取模块(701),用于从所述分段模块(507)中提取出一个报文,并将所提取的报文作为当前搜索区域;
第二位置关系确定模块(702),用于根据当前语义关联的关联语义特征确定自变量字段和因变量字段的位置关系;
第一搜索模块(703),用于将所述提取的报文的每个分段分别作为当前语义关联所描述的字段对的一个潜在自变量字段,对于每个潜在自变量字段沿满足所述位置关系的方向在所提取的报文中搜索该潜在自变量字段所对应的因变量字段,若搜索到对应的因变量字段,则将所述对应的因变量字段以及该潜在自变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对;
第二搜索模块(704),用于在当前搜索区域中,根据所述位置关系确定因变量字段的搜索方向及因变量字段的搜索起始分段,从所述搜索起始分段的满足所述位置关系的相邻分段开始,按照分段组内元素由少到多或由多到少的次序依次遍历所有可能的分段组,所述分段组包括至少两个且连续的分段,将当前遍历的分段组作为当前语义关联所描述的字段对的潜在自变量字段,在所述搜索起始分段中搜索该潜在自变量字段所对应的因变量字段,在搜索到对应的因变量字段时,将所述对应的因变量字段及该潜在自变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对;若当前搜索区域中还存在未搜索因变量字段的分段,则将所述搜索起始分段在所述搜索方向上的相邻分段作为当前的搜索起始分段,并重复前述搜索;
第三搜索模块(705),用于将当前搜索区域中的每个分段分别作为当前分段,在所述当前分段中根据所述位置关系确定自变量字段的搜索方向及搜索起始位置,并设置指向所述搜索起始位置的静态位置索引和动态位置索引;将所述静态位置索引与所述动态位置索引之间连续单位组作为当前语义关联所描述的字段对的潜在自变量字段,所述连续单位组包括至少一个且连续的最小组成单位,所述最小组成单位为报文中不可再分的组成单位;在所述当前分段中按照满足所述位置关系的方向搜索潜在的因变量字段,在所述潜在的因变量字段能够与所述潜在自变量字段构成满足当前语义关联的关联语义特征的字段对时,或者,在所述潜在的因变量字段能够与所述潜在自变量字段中以所述动态位置索引为一边界的部分连续单位组构成满足当前语义关联的关联语义特征的字段对时,将所述字段对作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对,若动态位置索引没有到达当前分段的搜索终点,则在所述搜索方向上将与所述动态位置索引相邻的最小组成单位作为当前的搜索起始位置,设置指向所述搜索起始位置的静态位置索引和动态位置索引,并重复上述搜索过程;在所述潜在的因变量字段无法与所述潜在自变量字段或所述潜在自变量字段中以所述动态位置索引为一边界的部分连续单位组构成满足当前语义关联的关联语义特征的字段对时,若动态位置索引没有到达当前分段的搜索终点,则以当前分段中的最小组成单位为搜索单位向所述搜索方向移动所述动态位置索引,并重复上述搜索过程;若动态位置索引到达当前分段的搜索终点,且在当前分段中搜索到字段对,则将当前分段中搜索到的每个字段对分别作为当前分段的一个子分段,将每个字段对间隔开的每个连续单位组分别作为当前分段的一个子分段,在所述当前分段的子分段的数量大于1时,将所述当前分段作为当前搜索区域,将所述子分段作为当前搜索区域的分段,通知第二搜索模块(704)在当前搜索区域内搜索;若动态位置索引到达当前分段的搜索终点,且在当前分段中未搜索到字段对,则结束对所述当前分段的搜索。
15.根据权利要求13所述的系统,其中,所述字段搜索模块(504)包括:
第三报文提取模块(801),用于从所述分段模块(507)中提取出一个报文;
第三位置关系确定模块(802),用于根据所述当前语义关联的关联语义特征确定自变量字段和因变量字段的位置关系;
第四搜索模块(803),用于在所述第三报文提取模块(801)提取的报文中,根据所述位置关系确定因变量字段的搜索方向及因变量字段的搜索起始分段;从所述搜索起始分段的满足所述位置关系的相邻分段开始,按照分段组内元素由少到多或由多到少的次序依次遍历所有可能的分段组,所述分段组包括至少一个且连续的分段,将当前遍历的分段组作为所述当前语义关联所描述的字段对的潜在自变量字段,在所述搜索起始分段中搜索该潜在自变量字段所对应的因变量字段,在搜索到对应的因变量字段时,将所述对应的因变量字段及该潜在自变量字段作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对;若当前搜索区域中还存在未搜索因变量字段的分段,则将所述搜索起始分段在所述搜索方向上的相邻分段作为当前的搜索起始分段,并重复执行上述搜索过程;
第五搜索模块(804),用于将所述第三报文提取模块(801)提取的报文中的每个分段分别作为当前分段,在所述当前分段中根据所述位置关系确定自变量字段的搜索方向及搜索起始位置,设置指向所述搜索起始位置的静态位置索引和动态位置索引,将所述静态位置索引与所述动态位置索引之间的连续单位组作为当前语义关联所描述的字段对的潜在自变量字段,所述连续单位组包括至少一个且连续的最小组成单位,所述最小组成单位为报文中不可再分的组成单位;在所述当前分段中满足所述位置关系的方向搜索潜在的因变量字段,在所述潜在的因变量字段能够与所述潜在自变量字段构成满足当前语义关联的关联语义特征的字段对时,或者,在所述潜在的因变量字段能够与所述潜在自变量字段中以所述动态位置索引为一边界的部分连续单位组构成满足当前语义关联的关联语义特征的字段对时,将所述字段对作为搜索到的满足所述当前语义关联的关联语义特征的一个字段对,若动态位置索引没有到达当前分段的搜索终点,则在所述搜索方向上将与所述动态位置索引相邻的最小组成单位作为当前的搜索起始位置,设置指向所述搜索起始位置的静态位置索引和动态位置索引,并重复执行上述搜索过程;在所述潜在的因变量字段无法与所述潜在自变量字段或所述潜在自变量字段中以所述动态位置索引为一边界的部分连续单位组构成满足当前语义关联的关联语义特征的字段对时,若动态位置索引没有到达当前分段的搜索终点,则以当前分段中的最小组成单位为搜索单位向所述搜索方向移动所述动态位置索引,并重复执行上述搜索过程;若动态位置索引到达当前分段的搜索终点,则结束对所述当前分段的搜索。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110293790.3A CN103036848B (zh) | 2011-09-29 | 2011-09-29 | 协议的逆向工程方法及系统 |
DE102012216321A DE102012216321A1 (de) | 2011-09-29 | 2012-09-13 | Verfahren und System zur Nachkonstruktion von Protokollen |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110293790.3A CN103036848B (zh) | 2011-09-29 | 2011-09-29 | 协议的逆向工程方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103036848A CN103036848A (zh) | 2013-04-10 |
CN103036848B true CN103036848B (zh) | 2015-11-25 |
Family
ID=47878802
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110293790.3A Expired - Fee Related CN103036848B (zh) | 2011-09-29 | 2011-09-29 | 协议的逆向工程方法及系统 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN103036848B (zh) |
DE (1) | DE102012216321A1 (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103955539B (zh) * | 2014-05-19 | 2017-03-22 | 中国人民解放军信息工程大学 | 一种获取二进制协议数据中控制字段划分点的方法及装置 |
CN106301996B (zh) * | 2015-06-26 | 2019-10-08 | 中国移动通信集团公司 | 一种ptp报文自动测试的方法及装置 |
CN106484611B (zh) * | 2015-09-02 | 2021-01-15 | 腾讯科技(深圳)有限公司 | 基于自动化协议适配的模糊测试方法和装置 |
CN108960307A (zh) * | 2018-06-22 | 2018-12-07 | 中国人民解放军战略支援部队信息工程大学 | 一种私有协议字段格式提取方法、装置及服务器 |
CN109040081B (zh) * | 2018-08-10 | 2020-08-04 | 哈尔滨工业大学(威海) | 一种基于bwt的协议字段逆向分析系统及方法 |
CN111314268B (zh) * | 2018-12-11 | 2022-06-07 | 航天信息股份有限公司 | 一种数据包分析方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101488861A (zh) * | 2008-12-19 | 2009-07-22 | 中山大学 | 一种网络未知应用的关键词提取方法 |
CN101707532A (zh) * | 2009-10-30 | 2010-05-12 | 中山大学 | 一种未知应用层协议自动分析方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8935677B2 (en) | 2008-04-07 | 2015-01-13 | Microsoft Corporation | Automatic reverse engineering of input formats |
-
2011
- 2011-09-29 CN CN201110293790.3A patent/CN103036848B/zh not_active Expired - Fee Related
-
2012
- 2012-09-13 DE DE102012216321A patent/DE102012216321A1/de not_active Withdrawn
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101488861A (zh) * | 2008-12-19 | 2009-07-22 | 中山大学 | 一种网络未知应用的关键词提取方法 |
CN101707532A (zh) * | 2009-10-30 | 2010-05-12 | 中山大学 | 一种未知应用层协议自动分析方法 |
Also Published As
Publication number | Publication date |
---|---|
DE102012216321A1 (de) | 2013-04-04 |
CN103036848A (zh) | 2013-04-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103036848B (zh) | 协议的逆向工程方法及系统 | |
US9336203B2 (en) | Semantics-oriented analysis of log message content | |
CN109450900B (zh) | 拟态判决方法、装置及系统 | |
CN101267313B (zh) | 泛洪攻击检测方法及检测装置 | |
CN104243315A (zh) | 用于唯一枚举解析树中的路径的装置和方法 | |
US9519718B2 (en) | Webpage information detection method and system | |
Cui et al. | Malicious URL detection with feature extraction based on machine learning | |
CN102801709A (zh) | 一种钓鱼网站识别系统及方法 | |
US20170053031A1 (en) | Information forecast and acquisition method based on webpage link parameter analysis | |
Zhang et al. | Toward unsupervised protocol feature word extraction | |
CN106062740B (zh) | 生成多个索引数据字段的方法和装置 | |
CN112989348B (zh) | 攻击检测方法、模型训练方法、装置、服务器及存储介质 | |
CN114153980A (zh) | 知识图谱构建方法和装置、检查方法、存储介质 | |
US20140280929A1 (en) | Multi-tier message correlation | |
CN110912756B (zh) | 一种面向ip定位的网络拓扑边界路由ip识别算法 | |
CN108199878B (zh) | 高性能ip网络中个人标识信息识别系统及方法 | |
CN105357118A (zh) | 一种基于规则的流量分类方法和系统 | |
KR101556714B1 (ko) | 검색결과 제공 방법, 시스템 및 컴퓨터 판독 가능한 기록 매체 | |
Apostolico et al. | Compact recognizers of episode sequences | |
JP4282549B2 (ja) | サービス検索装置とその方法、プログラム | |
CN104008136A (zh) | 一种文本查找的方法和装置 | |
KR100992440B1 (ko) | 여러 개의 연속된 부분패턴을 이용한 다중 패턴매칭 방법 | |
CN109462598B (zh) | 一种从网络报文中提取账号信息的方法 | |
CN108924100B (zh) | 一种异常用户识别方法 | |
CN113746738A (zh) | 数据转发方法、装置及相关设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20151125 Termination date: 20180929 |
|
CF01 | Termination of patent right due to non-payment of annual fee |