CN104063259A - 基于程序文法的指令集类型识别方法 - Google Patents
基于程序文法的指令集类型识别方法 Download PDFInfo
- Publication number
- CN104063259A CN104063259A CN201410248055.4A CN201410248055A CN104063259A CN 104063259 A CN104063259 A CN 104063259A CN 201410248055 A CN201410248055 A CN 201410248055A CN 104063259 A CN104063259 A CN 104063259A
- Authority
- CN
- China
- Prior art keywords
- instruction
- code
- feature
- similarity
- dis
- 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.)
- Pending
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种基于程序文法的指令集类型识别方法,含有如下步骤:1:对各种处理器的指令编码和符号语言特征进行研究,抽取程序的词法、句法和段法特征,构成特征向量空间;2:对词法、句法和段法特征进行特征获取;3:根据2的结果生成目标设备代码的程序文法特征向量;采用向量归一化方法构建多属性决策矩阵;采用基于信息熵的权重分配方法生成带权多属性决策矩阵;4:采用AHP算法求取词法特征的相似度;采用改进后的汇编级相似度评估算法求取句法和段法特征的相似度,在特征向量空间中遍历求取目标设备代码与特征向量空间各项的相似度;5:根据相似度排名及分布情况对识别结果做出判定;本发明在通用性和准确性上具有突出的优势。
Description
(一)、技术领域:本发明涉及一种指令集类型识别方法,特别是涉及一种基于程序文法的指令集类型识别方法。
(二)、背景技术:随着计算机技术、通信技术和微电子技术的飞速发展,电子设备越来越广泛地应用于工业、通信、国防和家庭等不同领域,其作用日益重要。近年来,针对电子设备的安全漏洞、黑客攻击和后门植入屡见不鲜。因此,有必要对电子设备进行安全性分析,验证设备是否满足机密性、完整性、可用性、可控性的要求,查找可能存在的安全缺陷。电子设备中采用固件来存放所使用的操作系统和用户代码,通过对固件进行逆向分析,可以理解设备的功能组成和运行方式,从而支撑电子设备的安全性分析。
对固件代码的分析一般首先对代码进行反汇编,将二进制形式的代码转换为汇编程序,使程序具备可读性,为下一步深入分析提供基础。由于指令集提供了处理器编码与汇编指令助词符的映射关系,因此反汇编的前提是要掌握固件代码使用的指令集。而电子设备为了防止分析,通常会将处理器芯片上的信息抹去,使得分析人员无法得到处理器的指令集信息,进而无法对设备进行分析。如何在处理器指令集不明的情况下,通过抽取固件代码的特征,进而实现由固件代码到其指令集类型的反推,对电子设备的安全性分析有着至关重要的意义。
一般的指令集类型识别方法是通过对代码反汇编结果的人工筛选。这种方法依赖于分析人员的经验,缺乏严格的标准,识别结果的准确性难以保证。另一种方法是根据固件代码的二进制统计特征进行识别,但是目前这种方法仅适用于指令集差异较大的指令集类型识别,不具备通用性。
(三)、发明内容:
本发明要解决的技术问题是:提供一种基于程序文法的指令集类型识别方法,该方法与其它比对方法相比,在通用性和准确性上具有突出的优势。
本发明的技术方案:
一种基于程序文法的指令集类型识别方法,具体为:
步骤1:文法特征的定义和标准特征库的建立:对各种处理器的指令编码和符号语言特征进行统计研究,并利用不同指令集的二进制级代码和符号语言级代码的构造规律,抽取程序的词法特征、句法特征和段法特征,构成特征向量空间,刻画出不同指令集程序代码的表现形式;
步骤2:目标代码文法特征的抽取:针对词法特征,采用基于散列的RK匹配算法进行特征获取;针对句法特征和段法特征,采用反汇编结果二次扫描策略进行特征获取,第一趟扫描反汇编结果后,获取指令频次表并统计汇编级特征指标,第二趟扫描反汇编结果后,获取特征指标CMP-Jcc匹配度和子程序合理度的值;
步骤3:目标代码文法特征的决策矩阵生成:根据步骤2获取的文法特征生成目标设备代码的程序文法特征向量;采用向量归一化方法构建多属性决策矩阵;采用基于信息熵的权重分配方法生成带权多属性决策矩阵;
步骤4:指令集相似度的计算:采用AHP算法求取词法特征的相似度;采用改进后的汇编级相似度评估算法求取句法特征和段法特征的相似度,在特征向量空间中遍历求取目标设备代码与特征向量空间各项的相似度;
步骤5:对相似度进行排序,根据相似度排名及分布情况对识别结果做出判定。
步骤1中,词法特征定义如下:
各种处理器的汇编源程序都存在一些习惯指令组,这些习惯指令组对应的二进制目标代码中存在固定字段,这些固定字段为词法特征;其它有标志性的字段也为词法特征;其它有标志性的字符串或编码的二进制码也为词法特征;词法特征含有:合法操作符、正确操作数、有效跳转地址;
句法特征定义如下:
句法特征是指通过汇编语言的语法、编程风格和习惯所表现出的特征;句法特征含有:跳转目标合法度、CMP-Jcc匹配度、子程序调用/返回指令匹配度、压栈/出栈指令匹配度;
段法特征定义如下:
段法特征是指对目标代码反汇编后,其结果体现出的结构化函数级特性,段法特征含有:汇编代码有效率、汇编有效指令覆盖率、汇编指令平均成片率、程序段覆盖率、汇编指令使用频度。
跳转目标合法度是指:设反汇编结果中,目标地址合法的跳转类指令的条数为Ncj,跳转类指令的总数为Njump,则跳转目标合法度Rcj=Ncj/Njump;
CMP-Jcc匹配度是指:在反汇编结果中,CMP指令与Jcc指令成对出现的概率;
子程序调用/返回指令匹配度是指:设合理子程序个数Nlp,子程序总数为Nproc,子程序调用/返回指令匹配度Rlp=Nlp/Nproc;
压栈/出栈指令匹配度是指:在反汇编结果中,压栈指令数和出栈指令数的绝对偏差量;设压栈指令数为Nis,出栈指令数为Nos,压栈/出栈指令匹配度Dlo=|Nis—Nos|;
汇编代码有效率是指:反汇编结果中可见的有效代码总长度占整个代码总长度的比率,设有效代码总长度为Lvc,整个代码总长度为Lcode,汇编代码有效率Rcov=Lvc/Lcode;
汇编有效指令覆盖率是指:在反汇编结果的程序段中,有效指令总长度占整个程序段总长度的比率,其中,有效指令中不包括数据;设反汇编结果中有效指令总长度为Lvi,程序段总长度为Li,汇编有效指令覆盖率为Riov=Lvi/Li;
汇编指令平均成片率是指:在反汇编结果程序段中,各段成片指令的长度占整个程序段总长度的比例的平均值;设反汇编结果中共有n段成片指令,各段成片指令的长度分别为l1,l2,…,ln,程序段总长度为Li,汇编指令平均成片率为Raci,则Raci=(l1/Li+l2/Li+…+ln/Li)/n;成片指令是指目标代码程序段中连续出现的成片有效指令序列;
程序段覆盖率是指:反汇编结果的程序段总长度占代码总长度的比率;设整个代码总长度为Lcode,程序段总长度为Li,程序段覆盖率为Rioc,则Rioc=Li/Lcode;
汇编指令使用频度含有传送类指令使用频度和运算类指令使用频度;反汇编结果中,设代码段指令总条数为Ni,传送类指令条数为Nci,运算类指令条数为Noi,传送类指令使用频度为Rci,运算类指令使用频度为Roi,则Rci=Nci/Ni,Roi=Noi/Ni。
步骤2中,采用基于散列的RK匹配算法提取词法特征,散列函数构造如下:
假设二进制目标代码中出现的字符集合为Σ,则Σ={0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F},定义Σ的映射P,使得P:Σ→{a0,a1…a15};则对于长度为m的字符串W=W1W2…Wm,对应一个以16为基的整数:
s=P(W1)×16m-1+P(W2)×16m-2+…+P(Wm)
取散列函数为:h(s)=smodq,其中q是适当大的素数;
记si=P[W1]×16i-1+P[W2]×16i-2+…+P[Wi],si是长度为i的字符串W1W2…Wm对应的整数;令s0=0,则:
s=(P(W1)×16m-2+P(W2)×16m-3+…+P(Wm-1)×16+P(Wm))×16+P[Wi]
=si-1×16+P[Wi],i=1,2,…,m
因此,h(si)=(si-1×16+P[Wi])modq=(h(si-1)×16+P[Wi])modq
记字符串T[i;i+m-1]对应的整数si,则:
s=P(ti)×16m-1+P(ti+1)×16m-2+…P(tt+m-1)
二进制代码中字段T[i+1;i+m]对应的整数si+1满足:
xi+1=P(ti+1)×16m-1+P(ti+2)×16m-2+…P(ti+m)=(xi-P(ti)×16m-1)+P(ti+m)
可推出:h(xi+1)=((h(xi)-x*P(ti))*d+P(ti+m))modq,i=1,2,…,n-m;其中,x是常数,x=dm-1modq;算法设计通过计算第一个长度为m的字符串的散列函数值,而后按递推公式计算长度为m的字符串散列函数值;
所述汇编级特征指标含有:汇编代码有效率、汇编有效指令覆盖率、汇编指令平均成片率和程序段覆盖率;
将CMP-Jcc匹配情况归纳为三类:第一类情况是CMP指令的直接后继指令就是Jcc指令;第二类情况是Jcc指令出现在与CMP指令相隔1-2条指令的位置,但这1-2条指令的执行均不影响标志位;第三类情况是CMP指令与Jcc指令之间的间隔指令数在2条以上,或间隔指令数虽然在2条以内,但是其中包含影响标志位的指令;
在进行CMP-Jcc匹配度计算时,将第一类和第二类情况视为匹配,将第三类情况视为不匹配;当出现第一类情况时,匹配计数值加1;当出现第二类情况时,如果CMP指令与Jcc指令的间隔指令数为1条,则匹配计数值加0.5,如果CMP指令与Jcc指令之间的间隔指令数为2条,则匹配计数值加0.25;当出现第三类情况时,如果CMP指令与Jcc指令之间的间隔指令数在3条以上,则匹配计数值减1。
步骤4中,采用AHP算法求取词法特征的相似度的过程为:首先,以特征向量法为词法特征赋权;然后,将步骤2中各种微处理器的词法特征获取结果形成相似度决策矩阵;最后根据加权和法获取各款微处理器所对应的词法特征相似度;
设置识别范围阈值Tp,当微处理器数量>Tp时,执行改进后的汇编级相似度评估算法求取句法特征和段法特征的相似度;当微处理器数量≤Tp时,执行AHP算法求取句法特征和段法特征的相似度;用户可动态设置识别范围阈值Tp,识别范围阈值Tp的默认值设为3;
改进后的汇编级相似度评估算法的步骤为:
步骤4.1:应用特征向量权重分配法为汇编级各特征指标赋权;
步骤4.2:根据在反汇编代码中获取的各项汇编级特征指标值,形成初始汇编级识别决策矩A[m][n];
步骤4.3:用向量规范化法求出规范化决策矩阵A'[m][n];
步骤4.4:应用特征向量权重分配法生成各项汇编级特征的属性权重,并构成加权规范矩阵X={xij};设权重向量为w=(w1,w2,…,wn),则:
xij=wj*zij,zij∈A'[m][n],i=1,2,…,m,j=1,2,…,n;
步骤4.5:确定每个属性的正理想解x*和负理想解x0,设正理想解x*的第j个属性值为负理想解x0的第j个属性值为则:
步骤4.6:确定加权规范矩阵X的元素xij到理想值的欧氏距离为:
步骤4.7:计算未知目标代码相对各微处理器指令集的反汇编级相似度:
则目标代码指令集的极大似然相似度为:
本发明的有益效果:
1、本发明针对电子设备固件程序所属的指令集类型进行识别,根据指令集的二进制编码及其对应汇编指令的构造规律,分别定义程序的词、句、段的文法特征,构成特征向量空间,对各种处理器进行文法特征的抽取,构成标准特征向量空间;在识别过程中,对目标程序进行文法特征的提取,通过比对目标程序与标准特征向量空间的相似度确定目标程序使用的指令集类型,与其它比对方法相比,在通用性和准确性上具有突出的优势。
(四)、附图说明:
图1为指令集特征向量空间示意图;
图2为指令集类型识别流程图。
(五)、具体实施方式:
基于程序文法的指令集类型识别方法具体为:
步骤1:文法特征的定义和标准特征库的建立:对各种处理器的指令编码和符号语言特征进行统计研究,并利用不同指令集的二进制级代码和符号语言级代码的构造规律,抽取程序的词法特征、句法特征和段法特征,构成特征向量空间,刻画出不同指令集程序代码的表现形式;
步骤2:目标代码文法特征的抽取:针对词法特征,采用基于散列的RK匹配算法进行特征获取;针对句法特征和段法特征,采用反汇编结果二次扫描策略进行特征获取,第一趟扫描反汇编结果后,获取指令频次表并统计汇编级特征指标,第二趟扫描反汇编结果后,获取特征指标CMP-Jcc匹配度和子程序合理度的值;
步骤3:目标代码文法特征的决策矩阵生成:根据步骤2获取的文法特征生成目标设备代码的程序文法特征向量;采用向量归一化方法构建多属性决策矩阵;采用基于信息熵的权重分配方法生成带权多属性决策矩阵;
步骤4:指令集相似度的计算:采用简单直观的AHP算法求取词法特征的相似度;采用改进后的汇编级相似度评估算法(TOPSIS PLUS)求取句法特征和段法特征的相似度,在特征向量空间中遍历求取目标设备代码与特征向量空间各项的相似度;
步骤5:对相似度进行排序,根据相似度排名及分布情况对识别结果做出判定。
步骤1中,词法特征定义如下:
各种处理器的汇编源程序都存在一些习惯指令组,这些习惯指令组对应的二进制目标代码中存在固定字段,这些固定字段为词法特征;其它有标志性的字段也为词法特征;其它有标志性的字符串或编码的二进制码也为词法特征;词法特征主要包括:合法操作符、正确操作数、有效跳转地址等;
句法特征定义如下:
句法特征是指通过汇编语言的语法、编程风格和习惯所表现出的特征;句法特征含有:跳转目标合法度、CMP-Jcc匹配度、子程序调用/返回指令匹配度、压栈/出栈指令匹配度;
段法特征定义如下:
段法特征是指对目标代码反汇编后,其结果体现出的结构化函数级特性,段法特征含有:汇编代码有效率、汇编有效指令覆盖率、汇编指令平均成片率、程序段覆盖率、汇编指令使用频度。
跳转目标合法度是指:设反汇编结果中,目标地址合法的跳转类指令的条数为Ncj,跳转类指令的总数为Njump,则跳转目标合法度Rcj=Ncj/Njump;有效跳转指令是指反汇编结果中,对于实现跳转功能的指令,其目标地址是合法的。
CMP-Jcc匹配度是指:CMP代表汇编指令集中CMP、TEST等具有程序流程转移功能的所有指令,即通过比较进而影响标志位的指令,简称CMP指令。Jcc代表所有根据指令相应标志位进行跳转操作的条件跳转指令,简称Jcc指令。大多数微处理器汇编指令集中,同时具备上述两类指令,统计实验结果表明:在常规的汇编程序中,CMP类指令后都伴随着Jcc指令,直接匹配或间接匹配的概率达到90%以上;CMP-Jcc匹配度是指在反汇编结果中,CMP指令与Jcc指令成对出现的概率;
子程序调用/返回指令匹配度是指:对于一个具有一定规模的常规汇编程序,理论上目标代码中有多个子程序,且每个子程序都应该由子程序调用指令调用并以子程序返回指令结束;设合理子程序个数Nlp,子程序总数为Nproc,子程序调用/返回指令匹配度Rlp=Nlp/Nproc;
压栈/出栈指令匹配度是指:堆栈主要起现场和返回地址保护、寄存器内容保护、参数传递、存储局部变量等作用;在正常使用的情况下,堆栈总体应该是趋于平衡的,因此压栈操作和出栈操作指令条数大体应当接近;压栈/出栈指令匹配度是指在反汇编结果中,压栈指令数和出栈指令数的绝对偏差量;设压栈指令数为Nis,出栈指令数为Nos,压栈/出栈指令匹配度Dlo=|Nis—Nos|;
汇编代码有效率是指:反汇编结果中可见的有效代码总长度(字节单位)占整个代码总长度的比率,设有效代码总长度为Lvc,整个代码总长度为Lcode,汇编代码有效率Rcov=Lvc/Lcode;
汇编有效指令覆盖率是指:在反汇编结果的程序段中,有效指令总长度占整个程序段总长度的比率,其中,有效指令中不包括数据;设反汇编结果中有效指令总长度为Lvi,程序段总长度为Li,汇编有效指令覆盖率为Riov=Lvi/Li;
汇编指令平均成片率是指:在反汇编结果程序段中,各段成片指令的长度占整个程序段总长度的比例的平均值;设反汇编结果中共有n段成片指令,各段成片指令的长度分别为l1,l2,…,ln,程序段总长度为Li,汇编指令平均成片率为Raci,则Raci=(l1/Li+l2/Li+…+ln/Li)/n;成片指令是指目标代码程序段中连续出现的成片有效指令序列;
程序段覆盖率是指:反汇编结果的程序段总长度占代码总长度的比率;设整个代码总长度为Lcode,程序段总长度为Li,程序段覆盖率为Rioc,则Rioc=Li/Lcode;
通过对汇编程序的各类指令使用频度的统计实验,传送类指令和运算类指令的使用频度相比其它指令高且频度有一定的区间性;传送类指令平均使用频度在20%-50%,运算类指令平均使用频度在10%-40%;
汇编指令使用频度含有传送类指令使用频度和运算类指令使用频度;反汇编结果中,设代码段指令总条数为Ni,传送类指令条数为Nci,运算类指令条数为Noi,传送类指令使用频度为Rci,运算类指令使用频度为Roi,则Rci=Nci/Ni,Roi=Noi/Ni。
指令集识别特征空间是由词法特征、句法特征和段法特征共同构成的特征集合,在识别分析过程中,必然要对特征集合进行访问和操作,同时不同的微处理器,这些特征指标并不一定都具备,因此特征集合必需设计一种有针对性的管理机制。
最简单直接的办法是建立一个识别特征信息的标识表,该表的功能是存放和管理与指令集识别相关的特征集合中的元素,分为词法特征、句法特征和段法特征三部分内容,指令集特征空间的结构表示如图1所示。
步骤2中,为了提高匹配效率,采用基于散列的RK匹配算法提取词法特征,散列函数构造如下:
假设二进制目标代码中出现的字符集合为Σ,则Σ={0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F},定义Σ的映射P,使得P:Σ→{a0,a1…a15};则对于长度为m的字符串W=W1W2…Wm,对应一个以16为基的整数:
s=P(W1)×16m-1+P(W2)×16m-2+…+P(Wm)
取散列函数为:h(s)=smodq,其中q是适当大的素数;
记si=P[W1]×16i-1+P[W2]×16i-2+…+P[Wi],si是长度为i的字符串W1W2…Wm对应的整数;令s0=0,则:
s=(P(W1)×16m-2+P(W2)×16m-3+…+P(Wm-1)×16+P(Wm))×16+P[Wi]
=si-1×16+P[Wi],i=1,2,…,m
因此,h(si)=(si-1×16+P[Wi])modq=(h(si-1)×16+P[Wi])modq
记字符串T[i;i+m-1]对应的整数si,则:
s=P(ti)×16m-1+P(ti+1)×16m-2+…P(tt+m-1)
二进制代码中字段T[i+1;i+m]对应的整数si+1满足:
xi+1=P(ti+1)×16m-1+P(ti+2)×16m-2+…P(ti+m)=(xi-P(ti)×16m-1)+P(ti+m)
可推出:h(xi+1)=((h(xi)-x*P(ti))*d+P(ti+m))modq,i=1,2,…,n-m;其中,x是常数,x=dm-1modq;算法设计通过计算第一个长度为m的字符串的散列函数值,而后按递推公式计算长度为m的字符串散列函数值;
汇编级特征指标含有:汇编代码有效率、汇编有效指令覆盖率、汇编指令平均成片率和程序段覆盖率;汇编代码有效率、汇编有效指令覆盖率、汇编指令平均成片率、程序段覆盖率、子程序合理度等统计特征的计算较为直观简单,主要讨论CMP-Jcc匹配度的提取算法;
由于CMP测试类指令在绝大多数主流微处理器指令集中都具备,并且CMP-Jcc用法出现频率高,CMP-Jcc匹配度是文法的重要特征指标。通过对汇编代码的统计研究,可以将CMP-Jcc匹配情况归纳为三类:第一类情况是CMP指令的直接后继指令就是Jcc指令;第二类情况是Jcc指令出现在与CMP指令相隔1-2条指令的位置,但这1-2条指令的执行均不影响标志位;第三类情况是CMP指令与Jcc指令之间的间隔指令数在2条以上,或间隔指令数虽然在2条以内,但是其中包含影响标志位的指令;
在进行CMP-Jcc匹配度计算时,将第一类和第二类情况视为匹配,但由于前两种情况出现的机率不同,两者的匹配程度也不同,将第三类情况视为不匹配;采用正负增值和增值递减的方法来表现三类情况的不同;增值是指CMP-Jcc匹配数计数器的增长;当出现第一类情况时,匹配计数值加1;当出现第二类情况时,如果CMP指令与Jcc指令的间隔指令数为1条,则匹配计数值加0.5,如果CMP指令与Jcc指令之间的间隔指令数为2条,则匹配计数值加0.25;当出现第三类情况时,如果CMP指令与Jcc指令之间的间隔指令数在3条以上,则匹配计数值减1;该方法能够较好地控制匹配计算器的变化,从而体现出反汇编正确与否的差异;
根据文法特征提取算法,生成目标设备代码的程序文法特征向量A[m][n];采用向量归一化方法,构建多属性决策矩阵A'[m][n];采用基于信息熵的权重分配方法,生成带权多属性决策矩阵。
若权重向量w=(w1,w2,…wn),则加权多属性决策矩阵为:
X={xij|i=1,…,m;j=1,…,n}
xij=wj×zij,zij∈A'[m][n],i=1,2,…,m,j=1,2,…,n。
步骤4中,采用AHP算法求取词法特征的相似度的过程为:首先,以特征向量法为词法特征赋权;然后,将步骤2中各种微处理器的词法特征获取结果形成相似度决策矩阵;最后根据加权和法获取各款微处理器所对应的词法特征相似度;
由于TOPSIS算法是基于正理想解与负理想解的距离比较,当识别范围内只有一款微处理器的时候,该方法显然是不适用。经过实验证明,当识别范围较小时(即相似度比较参照微处理器数量较少的时候),TOPSIS法亦不够准确,效果反而不如AHP算法;为此,设置识别范围阈值Tp,当微处理器数量>Tp时,执行改进后的汇编级相似度评估算法TOPSISPLUS求取句法特征和段法特征的相似度;当微处理器数量≤Tp时,执行AHP算法求取句法特征和段法特征的相似度;用户可动态设置识别范围阈值Tp,经过大量实验,识别范围阈值Tp的默认值设为3,具体实现流程如图2所示;
句法特征和段法特征对各款主流微处理器都适用,且在符合规范的汇编代码中具有较高的普遍性;因此,汇编级相似度对最终的相似度计算起确定性作用;在算法设计上,采用更为准确的TOPSIS算法,并对其进行改进。改进后的汇编级相似度评估算法TOPSIS PLUS的步骤为:
步骤4.1:应用特征向量权重分配法为汇编级各特征指标赋权;
步骤4.2:根据在反汇编代码中获取的各项汇编级特征指标值,形成初始汇编级识别决策矩A[m][n];
步骤4.3:用向量规范化法求出规范化决策矩阵A'[m][n];
步骤4.4:应用特征向量权重分配法生成各项汇编级特征的属性权重,并构成加权规范矩阵X={xij};设权重向量为w=(w1,w2,…,wn),则:
xij=wj*zij,zij∈A'[m][n],i=1,2,…,m,j=1,2,…,n;
步骤4.5:确定每个属性的正理想解x*和负理想解x0,设正理想解x*的第j个属性值为负理想解x0的第j个属性值为则:
步骤4.6:确定加权规范矩阵X的元素xij到理想值的欧氏距离为:
步骤4.7:计算未知目标代码相对各微处理器指令集的反汇编级相似度:
则目标代码指令集的极大似然相似度为:
Claims (5)
1.一种基于程序文法的指令集类型识别方法,其特征是:
步骤1:文法特征的定义和标准特征库的建立:对各种处理器的指令编码和符号语言特征进行统计研究,并利用不同指令集的二进制级代码和符号语言级代码的构造规律,抽取程序的词法特征、句法特征和段法特征,构成特征向量空间,刻画出不同指令集程序代码的表现形式;
步骤2:目标代码文法特征的抽取:针对词法特征,采用基于散列的RK匹配算法进行特征获取;针对句法特征和段法特征,采用反汇编结果二次扫描策略进行特征获取,第一趟扫描反汇编结果后,获取指令频次表并统计汇编级特征指标,第二趟扫描反汇编结果后,获取特征指标CMP-Jcc匹配度和子程序合理度的值;
步骤3:目标代码文法特征的决策矩阵生成:根据步骤2获取的文法特征生成目标设备代码的程序文法特征向量;采用向量归一化方法构建多属性决策矩阵;采用基于信息熵的权重分配方法生成带权多属性决策矩阵;
步骤4:指令集相似度的计算:采用AHP算法求取词法特征的相似度;采用改进后的汇编级相似度评估算法求取句法特征和段法特征的相似度,在特征向量空间中遍历求取目标设备代码与特征向量空间各项的相似度;
步骤5:对相似度进行排序,根据相似度排名及分布情况对识别结果做出判定。
2.根据权利要求1所述的基于程序文法的指令集类型识别方法,其特征是:所述步骤1中,词法特征定义如下:
各种处理器的汇编源程序都存在一些习惯指令组,这些习惯指令组对应的二进制目标代码中存在固定字段,这些固定字段为词法特征;其它有标志性的字段也为词法特征;其它有标志性的字符串或编码的二进制码也为词法特征;词法特征含有:合法操作符、正确操作数、有效跳转地址;
句法特征定义如下:
句法特征是指通过汇编语言的语法、编程风格和习惯所表现出的特征;句法特征含有:跳转目标合法度、CMP-Jcc匹配度、子程序调用/返回指令匹配度、压栈/出栈指令匹配度;
段法特征定义如下:
段法特征是指对目标代码反汇编后,其结果体现出的结构化函数级特性,段法特征含有:汇编代码有效率、汇编有效指令覆盖率、汇编指令平均成片率、程序段覆盖率、汇编指令使用频度。
3.根据权利要求2所述的基于程序文法的指令集类型识别方法,其特征是:所述跳转目标合法度是指:设反汇编结果中,目标地址合法的跳转类指令的条数为Ncj,跳转类指令的总数为Njump,则跳转目标合法度Rcj=Ncj/Njump;
CMP-Jcc匹配度是指:在反汇编结果中,CMP指令与Jcc指令成对出现的概率;
子程序调用/返回指令匹配度是指:设合理子程序个数Nlp,子程序总数为Nproc,子程序调用/返回指令匹配度Rlp=Nlp/Nproc;
压栈/出栈指令匹配度是指:在反汇编结果中,压栈指令数和出栈指令数的绝对偏差量;设压栈指令数为Nis,出栈指令数为Nos,压栈/出栈指令匹配度Dlo=|Nis—Nos|;
汇编代码有效率是指:反汇编结果中可见的有效代码总长度占整个代码总长度的比率,设有效代码总长度为Lvc,整个代码总长度为Lcode,汇编代码有效率Rcov=Lvc/Lcode;
汇编有效指令覆盖率是指:在反汇编结果的程序段中,有效指令总长度占整个程序段总长度的比率,其中,有效指令中不包括数据;设反汇编结果中有效指令总长度为Lvi,程序段总长度为Li,汇编有效指令覆盖率为Riov=Lvi/Li;
汇编指令平均成片率是指:在反汇编结果程序段中,各段成片指令的长度占整个程序段总长度的比例的平均值;设反汇编结果中共有n段成片指令,各段成片指令的长度分别为l1,l2,…,ln,程序段总长度为Li,汇编指令平均成片率为Raci,则Raci=(l1/Li+l2/Li+…+ln/Li)/n;成片指令是指目标代码程序段中连续出现的成片有效指令序列;
程序段覆盖率是指:反汇编结果的程序段总长度占代码总长度的比率;设整个代码总长度为Lcode,程序段总长度为Li,程序段覆盖率为Rioc,则Rioc=Li/Lcode;
汇编指令使用频度含有传送类指令使用频度和运算类指令使用频度;反汇编结果中,设代码段指令总条数为Ni,传送类指令条数为Nci,运算类指令条数为Noi,传送类指令使用频度为Rci,运算类指令使用频度为Roi,则Rci=Nci/Ni,Roi=Noi/Ni。
4.根据权利要求1所述的基于程序文法的指令集类型识别方法,其特征是:所述步骤2中,采用基于散列的RK匹配算法提取词法特征,散列函数构造如下:
假设二进制目标代码中出现的字符集合为Σ,则Σ={0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F},定义Σ的映射P,使得P:Σ→{a0,a1…a15};则对于长度为m的字符串W=W1W2…Wm,对应一个以16为基的整数:
s=P(W1)×16m-1+P(W2)×16m-2+…+P(Wm)
取散列函数为:h(s)=smodq,其中q是适当大的素数;
记si=P[W1]×16i-1+P[W2]×16i-2+…+P[Wi],si是长度为i的字符串W1W2…Wm对应的整数;令s0=0,则:
s=(P(W1)×16m-2+P(W2)×16m-3+…+P(Wm-1)×16+P(Wm))×16+P[Wi]
=si-1×16+P[Wi],i=1,2,…,m
因此,h(si)=(si-1×16+P[Wi])modq=(h(si-1)×16+P[Wi])modq
记字符串T[i;i+m-1]对应的整数si,则:
s=P(ti)×16m-1+P(ti+1)×16m-2+…P(tt+m-1)
二进制代码中字段T[i+1;i+m]对应的整数si+1满足:
xi+1=P(ti+1)×16m-1+P(ti+2)×16m-2+…P(ti+m)=(xi-P(ti)×16m-1)+P(ti+m)
可推出:h(xi+1)=((h(xi)-x*P(ti))*d+P(ti+m))modq,i=1,2,…,n-m;其中,x是常数,x=dm-1modq;算法设计通过计算第一个长度为m的字符串的散列函数值,而后按递推公式计算长度为m的字符串散列函数值;
所述汇编级特征指标含有:汇编代码有效率、汇编有效指令覆盖率、汇编指令平均成片率和程序段覆盖率;
将CMP-Jcc匹配情况归纳为三类:第一类情况是CMP指令的直接后继指令就是Jcc指令;第二类情况是Jcc指令出现在与CMP指令相隔1-2条指令的位置,但这1-2条指令的执行均不影响标志位;第三类情况是CMP指令与Jcc指令之间的间隔指令数在2条以上,或间隔指令数虽然在2条以内,但是其中包含影响标志位的指令;
在进行CMP-Jcc匹配度计算时,将第一类和第二类情况视为匹配,将第三类情况视为不匹配;当出现第一类情况时,匹配计数值加1;当出现第二类情况时,如果CMP指令与Jcc指令的间隔指令数为1条,则匹配计数值加0.5,如果CMP指令与Jcc指令之间的间隔指令数为2条,则匹配计数值加0.25;当出现第三类情况时,如果CMP指令与Jcc指令之间的间隔指令数在3条以上,则匹配计数值减1。
5.根据权利要求1所述的基于程序文法的指令集类型识别方法,其特征是:所述步骤4中,采用AHP算法求取词法特征的相似度的过程为:首先,以特征向量法为词法特征赋权;然后,将步骤2中各种微处理器的词法特征获取结果形成相似度决策矩阵;最后根据加权和法获取各款微处理器所对应的词法特征相似度;
设置识别范围阈值Tp,当微处理器数量>Tp时,执行改进后的汇编级相似度评估算法求取句法特征和段法特征的相似度;当微处理器数量≤Tp时,执行AHP算法求取句法特征和段法特征的相似度;用户可动态设置识别范围阈值Tp,识别范围阈值Tp的默认值设为3;
改进后的汇编级相似度评估算法的步骤为:
步骤4.1:应用特征向量权重分配法为汇编级各特征指标赋权;
步骤4.2:根据在反汇编代码中获取的各项汇编级特征指标值,形成初始汇编级识别决策矩A[m][n];
步骤4.3:用向量规范化法求出规范化决策矩阵A'[m][n];
步骤4.4:应用特征向量权重分配法生成各项汇编级特征的属性权重,并构成加权规范矩阵X={xij};设权重向量为w=(w1,w2,…,wn),则:
xij=wj*zij,zij∈A'[m][n],i=1,2,…,m,j=1,2,…,n;
步骤4.5:确定每个属性的正理想解x*和负理想解x0,设正理想解x*的第j个属性值为负理想解x0的第j个属性值为则:
步骤4.6:确定加权规范矩阵X的元素xij到理想值的欧氏距离为:
步骤4.7:计算未知目标代码相对各微处理器指令集的反汇编级相似度:
则目标代码指令集的极大似然相似度为:
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410248055.4A CN104063259A (zh) | 2014-06-05 | 2014-06-05 | 基于程序文法的指令集类型识别方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410248055.4A CN104063259A (zh) | 2014-06-05 | 2014-06-05 | 基于程序文法的指令集类型识别方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104063259A true CN104063259A (zh) | 2014-09-24 |
Family
ID=51550983
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410248055.4A Pending CN104063259A (zh) | 2014-06-05 | 2014-06-05 | 基于程序文法的指令集类型识别方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104063259A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105808507A (zh) * | 2016-03-31 | 2016-07-27 | 华中科技大学 | 一种激光焊接件焊缝形貌多表征指标下的综合分析方法 |
CN106531160A (zh) * | 2016-10-26 | 2017-03-22 | 安徽省云逸智能科技有限公司 | 一种基于词网语言模型的连续语音识别系统 |
CN109784059A (zh) * | 2019-01-11 | 2019-05-21 | 北京中睿天下信息技术有限公司 | 一种木马文件溯源方法、系统及设备 |
CN110457046A (zh) * | 2019-08-22 | 2019-11-15 | 广州小鹏汽车科技有限公司 | 混合指令集程序的反汇编方法、装置、存储介质及终端 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101645005A (zh) * | 2008-08-06 | 2010-02-10 | 中国人民解放军信息工程大学 | 基于多维可变描述表的处理器结构与指令系统表示方法 |
-
2014
- 2014-06-05 CN CN201410248055.4A patent/CN104063259A/zh active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101645005A (zh) * | 2008-08-06 | 2010-02-10 | 中国人民解放军信息工程大学 | 基于多维可变描述表的处理器结构与指令系统表示方法 |
Non-Patent Citations (1)
Title |
---|
蒋烈辉: "固件代码逆向分析关键技术研究", 《中国博士学位论文全文数据库》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105808507A (zh) * | 2016-03-31 | 2016-07-27 | 华中科技大学 | 一种激光焊接件焊缝形貌多表征指标下的综合分析方法 |
CN106531160A (zh) * | 2016-10-26 | 2017-03-22 | 安徽省云逸智能科技有限公司 | 一种基于词网语言模型的连续语音识别系统 |
CN109784059A (zh) * | 2019-01-11 | 2019-05-21 | 北京中睿天下信息技术有限公司 | 一种木马文件溯源方法、系统及设备 |
CN109784059B (zh) * | 2019-01-11 | 2020-11-17 | 北京中睿天下信息技术有限公司 | 一种木马文件溯源方法、系统及设备 |
CN110457046A (zh) * | 2019-08-22 | 2019-11-15 | 广州小鹏汽车科技有限公司 | 混合指令集程序的反汇编方法、装置、存储介质及终端 |
CN110457046B (zh) * | 2019-08-22 | 2023-05-12 | 广州小鹏汽车科技有限公司 | 混合指令集程序的反汇编方法、装置、存储介质及终端 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111783875B (zh) | 基于聚类分析的异常用户检测方法、装置、设备及介质 | |
US20240028571A1 (en) | Automatic entity resolution with rules detection and generation system | |
CN110163242B (zh) | 风险识别方法、装置及服务器 | |
CN104598535A (zh) | 一种基于最大熵的事件抽取方法 | |
CN104572958A (zh) | 一种基于事件抽取的敏感信息监控方法 | |
CN107102993B (zh) | 一种用户诉求分析方法和装置 | |
CN104063259A (zh) | 基于程序文法的指令集类型识别方法 | |
CN103324745A (zh) | 基于贝叶斯模型的文本垃圾识别方法和系统 | |
CN113706322B (zh) | 基于数据分析的服务分发方法、装置、设备及存储介质 | |
CN104820703A (zh) | 一种文本精细分类方法 | |
CN104881399B (zh) | 基于概率软逻辑psl的事件识别方法和系统 | |
CN110019790A (zh) | 文本识别、文本监控、数据对象识别、数据处理方法 | |
CN109376964B (zh) | 一种基于记忆神经网络的刑事案件罪名预测方法 | |
CN110119880A (zh) | 一种自动评级方法、装置、存储介质及终端设备 | |
WO2021177897A1 (en) | Systems and methods for machine numeracy | |
CN108038162A (zh) | 基于公文片段和二分图匹配的公文审批人智能推荐方法 | |
KR102519033B1 (ko) | 인공지능 학습 기반의 인공지능 학습 기반의 법안 및 법규정에 대한 모니터링 방법 및 이를 위한 프로그램 | |
CN116232673A (zh) | 隐蔽通道识别方法、装置、计算机设备及存储介质 | |
CN109670304A (zh) | 恶意代码家族属性的识别方法、装置及电子设备 | |
CN114971642A (zh) | 基于知识图谱的异常识别方法、装置、设备及存储介质 | |
CN114817808A (zh) | 非法网站识别方法、装置、电子装置和存储介质 | |
CN112948573B (zh) | 文本标签的提取方法、装置、设备和计算机存储介质 | |
CN117952108A (zh) | 一种实体识别方法、装置、电子设备及介质 | |
CN103092838B (zh) | 一种获取英文词的方法及装置 | |
CN110348581B (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20140924 |