基于压扁控制流认知优先度驱动的程序理解方法及系统转让专利

申请号 : CN201610680665.0

文献号 : CN106095470B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李泽熊吴伟民吴汪洋李宗妮

申请人 : 广东工业大学

摘要 :

本发明公开了一种基于压扁控制流认知优先度驱动的程序理解方法及系统,包括:利用压扁控制流将残缺版本的目标程序的代码划分成具有索引引导的顺序执行基本块;获取与所述目标程序对应的完整版程序;通过所述完整版程序与所述目标程序的映射对比,将所述基本块按照预定规则转化为以二叉树形式表示的理解依赖模型;计算所述理解依赖模型中未理解节点的认知优先度;利用未理解节点的认知优先度,通过多层感知器的神经网络深度学习分析未理解节点的程序的理解;可见,在本实施例中,能实现在程序出现功能代码部分空白残缺的情况下理解程序。

权利要求 :

1.一种基于压扁控制流认知优先度驱动的程序理解方法,其特征在于,包括:利用压扁控制流将残缺版本的目标程序的代码划分成具有索引引导的顺序执行基本块;

获取与所述目标程序对应的完整版程序;

通过所述完整版程序与所述目标程序的映射对比,将所述基本块按照预定规则转化为以二叉树形式表示的理解依赖模型;

计算所述理解依赖模型中未理解节点的认知优先度;

利用未理解节点的认知优先度,通过多层感知器的神经网络深度学习分析未理解节点的程序的理解;

其中,所述计算所述理解依赖模型中未理解节点的认知优先度,包括:将待计算认知优先度的未理解节点作为目标未理解节点;

获取在所述理解依赖模型中,已理解节点与所述目标未理解节点的最短路径距离的距离集合;

获取在所述理解依赖模型中,与所述目标未理解节点距离所述距离集合中不同距离所对应的已理解节点的数量集合;

获取在所述理解依赖模型中,与所述目标未理解节点距离所述距离集合中不同距离所对应的已理解节点的权重值集合;

利用所述距离集合、所述数量集合和所述权重值集合,计算每个未理解节点的认知优先度。

2.根据权利要求1所述的程序理解方法,其特征在于,所述获取与所述目标程序对应的完整版程序,包括:从标准正确代码模板获取与所述目标程序对应的完整版程序;或者,从经过云计算互联网数据挖掘所得的代码模板中获取与所述目标程序对应的完整版程序。

3.根据权利要求2所述的程序理解方法,其特征在于,利用未理解节点的认知优先度,通过多层感知器的神经网络深度学习分析未理解节点的程序的理解,包括:利用未理解节点的认知优先度,将所有未理解节点进行降序排序;

根据所述排序,利用多层感知器的神经网络深度学习分析每个未理解节点的理解。

4.一种基于压扁控制流认知优先度驱动的程序理解系统,其特征在于,包括:基本块划分模块,用于利用压扁控制流将残缺版本的目标程序的代码划分成具有索引引导的顺序执行基本块;

获取模块,用于获取与所述目标程序对应的完整版程序;

理解依赖模型建立模块,用于通过所述完整版程序与所述目标程序的映射对比,将所述基本块按照预定规则转化为以二叉树形式表示的理解依赖模型;

认知优先度计算模块,用于计算所述理解依赖模型中未理解节点的认知优先度;

理解模块,用于利用未理解节点的认知优先度,通过多层感知器的神经网络深度学习分析未理解节点的程序的理解;

其中,所述认知优先度计算模块包括:

目标未理解节点选取单元,用于将待计算认知优先度的未理解节点作为目标未理解节点;

距离集合获取单元,用于获取在所述理解依赖模型中,已理解节点与所述目标未理解节点的最短路径距离的距离集合;

数量集合获取单元,用于获取在所述理解依赖模型中,与所述目标未理解节点距离所述距离集合中不同距离所对应的已理解节点的数量集合;

权重值集合获取单元,用于获取在所述理解依赖模型中,与所述目标未理解节点距离所述距离集合中不同距离所对应的已理解节点的权重值集合;

认知优先度计算单元,用于利用所述距离集合、所述数量集合和所述权重值集合,计算每个未理解节点的认知优先度。

5.根据权利要求4所述的程序理解系统,其特征在于,所述获取模块,包括:第一获取单元,用于从标准正确代码模板获取与所述目标程序对应的完整版程序;或者,第二获取单元,用于从经过云计算互联网数据挖掘所得的代码模板中获取与所述目标程序对应的完整版程序。

6.根据权利要求5所述的程序理解系统,其特征在于,所述理解模块包括:排序单元,用于利用未理解节点的认知优先度,将所有未理解节点进行降序排序;

理解单元,用于根据所述排序,利用多层感知器的神经网络深度学习分析每个未理解节点的理解。

说明书 :

基于压扁控制流认知优先度驱动的程序理解方法及系统

技术领域

[0001] 本发明涉及软件逆向工程领域,更具体地说,涉及一种基于压扁控制流认知优先度驱动的程序理解方法及系统。

背景技术

[0002] 程序理解在软件逆向工程领域中是一个重要的分支。它是一个从计算机程序中通过对程序的分析、抽象和推理来获取知识信息并映射到人脑中,形成关于程序结构和功能思维模型的过程。其目的是在一定规则下提取并分析程序中各种实体之间的关系,形成系统的不同形式和层次的抽象表示,逐步构建所需的理解。目前程序理解的研究主要在程序认知过程的研究和半自动化工具的研究这两个方面。
[0003] 在程序认知过程的研究中,M.A.D.Storey等人从支持不同的理解策略和减轻维护人员认知负担这两方面中提出了可以帮助构造心理模型的14个认知设计元素,从而指导辅助理解的工具的开发设计;M.P.Robillard等人通过分析程序观察行为和成功修改工作的关系,发现系统地采用方法地观察代码比随机的浏览更为有效。在半自动化工具的研究中,早期的Rigi工具支持逆向工程理解,生成了系统的抽象信息和子系统层次关系;Rational Rose工具将需求和系统的体系架构转换成代码,对需求和系统的体系架构进行可视化,理解和精练;SHriMP使用了超文本DA4Java工具提供了递增组合图的功能,可以过滤掉不相关的节点和边简化程序理解可视化图形。EXTRAVIS工具使用大量的顺序视图和环形束视图可视化执行轨迹,来展示父元素和子元素之间隐含的调用关系。在国内北大青鸟程序理解系统JBPAS(Jade Bird Program Analysis System)利用增量分析技术静态分析程序源代码,支持多种理解策略;东南大学提出了一种认知容易度驱动的程序理解过程方法。
[0004] 然而,目前现有技术只考虑了程序可执行情况下进行相关的程序理解,获取相应的程序信息,尚未涉及程序出现功能代码部分空白残缺的情况,因此,如何在程序出现功能代码部分空白残缺的情况下理解程序,是本领域技术人员需要解决的问题。

发明内容

[0005] 本发明的目的在于提供一种基于压扁控制流认知优先度驱动的程序理解方法及系统,以实现在程序出现功能代码部分空白残缺的情况下理解程序。
[0006] 为实现上述目的,本发明实施例提供了如下技术方案:
[0007] 一种基于压扁控制流认知优先度驱动的程序理解方法,包括:
[0008] 利用压扁控制流将残缺版本的目标程序的代码划分成具有索引引导的顺序执行基本块;
[0009] 获取与所述目标程序对应的完整版程序;
[0010] 通过所述完整版程序与所述目标程序的映射对比,将所述基本块按照预定规则转化为以二叉树形式表示的理解依赖模型;
[0011] 计算所述理解依赖模型中未理解节点的认知优先度;
[0012] 利用未理解节点的认知优先度,通过多层感知器的神经网络深度学习分析未理解节点的程序的理解。
[0013] 其中,所述获取与所述目标程序对应的完整版程序,包括:
[0014] 从标准正确代码模板获取与所述目标程序对应的完整版程序;或者,[0015] 从经过云计算互联网数据挖掘所得的代码模板中获取与所述目标程序对应的完整版程序。
[0016] 其中,利用未理解节点的认知优先度,通过多层感知器的神经网络深度学习分析未理解节点的程序的理解,包括:
[0017] 利用未理解节点的认知优先度,将所有未理解节点进行降序排序;
[0018] 根据所述排序,利用多层感知器的神经网络深度学习分析每个未理解节点的理解。
[0019] 其中,所述计算所述理解依赖模型中未理解节点的认知优先度,包括:
[0020] 将待计算认知优先度的未理解节点作为目标未理解节点;
[0021] 获取在所述理解依赖模型中,已理解节点与所述目标未理解节点的最短路径距离的距离集合;
[0022] 获取在所述理解依赖模型中,与所述目标未理解节点距离所述距离集合中不同距离所对应的已理解节点的数量集合;
[0023] 获取在所述理解依赖模型中,与所述目标未理解节点距离所述距离集合中不同距离所对应的已理解节点的权重值集合;
[0024] 利用所述距离集合、所述数量集合和所述权重值集合,计算每个未理解节点的认知优先度。
[0025] 一种基于压扁控制流认知优先度驱动的程序理解系统,包括:
[0026] 基本块划分模块,用于利用压扁控制流将残缺版本的目标程序的代码划分成具有索引引导的顺序执行基本块;
[0027] 获取模块,用于获取与所述目标程序对应的完整版程序;
[0028] 理解依赖模型建立模块,用于通过所述完整版程序与所述目标程序的映射对比,将所述基本块按照预定规则转化为以二叉树形式表示的理解依赖模型;
[0029] 认知优先度计算模块,用于计算所述理解依赖模型中未理解节点的认知优先度;
[0030] 理解模块,用于利用未理解节点的认知优先度,通过多层感知器的神经网络深度学习分析未理解节点的程序的理解。
[0031] 其中,所述获取模块,包括:
[0032] 第一获取单元,用于从标准正确代码模板获取与所述目标程序对应的完整版程序;或者,
[0033] 第二获取单元,用于从经过云计算互联网数据挖掘所得的代码模板中获取与所述目标程序对应的完整版程序。
[0034] 其中,所述理解模块包括:
[0035] 排序单元,用于利用未理解节点的认知优先度,将所有未理解节点进行降序排序;
[0036] 理解单元,用于根据所述排序,利用多层感知器的神经网络深度学习分析每个未理解节点的理解。
[0037] 其中,所述认知优先度计算模块包括:
[0038] 目标未理解节点选取单元,用于将待计算认知优先度的未理解节点作为目标未理解节点;
[0039] 距离集合获取单元,用于获取在所述理解依赖模型中,已理解节点与所述目标未理解节点的最短路径距离的距离集合;
[0040] 数量集合获取单元,用于获取在所述理解依赖模型中,与所述目标未理解节点距离所述距离集合中不同距离所对应的已理解节点的数量集合;
[0041] 权重值集合获取单元,用于获取在所述理解依赖模型中,与所述目标未理解节点距离所述距离集合中不同距离所对应的已理解节点的权重值集合;
[0042] 认知优先度计算单元,用于利用所述距离集合、所述数量集合和所述权重值集合,计算每个未理解节点的认知优先度。
[0043] 通过以上方案可知,本发明实施例提供的一种基于压扁控制流认知优先度驱动的程序理解方法及系统,包括:利用压扁控制流将残缺版本的目标程序的代码划分成具有索引引导的顺序执行基本块;获取与所述目标程序对应的完整版程序;通过所述完整版程序与所述目标程序的映射对比,将所述基本块按照预定规则转化为以二叉树形式表示的理解依赖模型;计算所述理解依赖模型中未理解节点的认知优先度;利用未理解节点的认知优先度,通过多层感知器的神经网络深度学习分析未理解节点的程序的理解;可见,在本实施例中,能实现在程序出现功能代码部分空白残缺的情况下理解程序。

附图说明

[0044] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0045] 图1为本发明实施例公开的一种基于压扁控制流认知优先度驱动的程序理解方法流程示意图;
[0046] 图2为本发明实施例公开的循环结构控制流压扁模型及其相关算法描述示意图;
[0047] 图3为本发明实施例公开的全局代码控制流压扁模型及其相关算法描述示意图;
[0048] 图4为本发明实施例公开的压扁控制流树状理解依赖模型的构造示意图;
[0049] 图5为本发明实施例公开的理解依赖模型示意图;
[0050] 图6为本发明实施例公开的程序分析模型示意图;
[0051] 图7为本发明实施例公开的一种基于压扁控制流认知优先度驱动的程序理解系统结构示意图。

具体实施方式

[0052] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0053] 本发明实施例公开了一种基于压扁控制流认知优先度驱动的程序理解方法及系统,以实现在程序出现功能代码部分空白残缺的情况下理解程序。
[0054] 参见图1,本发明实施例提供的一种基于压扁控制流认知优先度驱动的程序理解方法,包括:
[0055] S101、利用压扁控制流将残缺版本的目标程序的代码划分成具有索引引导的顺序执行基本块;
[0056] 具体的,在本方案中压扁流程序思想为按层次分析处理,该算法是将程序中所有划分成顺序执行的基本块压扁化处理变成具有前驱和后继的集合,使得每个基本块在实际的代码执行的控制流中,通过对调度变量next赋值来指示接下来要执行的基本块。
[0057] 根据算法在程序中的作用范围,压扁控制流算法可以分为基于循环或选择结构控制流压扁、函数体内控制流压扁和全局代码控制流压扁这三类。鉴于分支结构控制流压扁是循环结构控制流压扁的特殊形式,而全局代码控制流压扁与函数体内控制流压扁的实现方法相同,所以下面给出循环结构控制流压扁和全局代码控制流压扁的模型以及相关的算法描述,如图2和图3所示。
[0058] S102、获取与所述目标程序对应的完整版程序;
[0059] 其中,所述获取与所述目标程序对应的完整版程序,包括:
[0060] 从标准正确代码模板获取与所述目标程序对应的完整版程序;或者,[0061] 从经过云计算互联网数据挖掘所得的代码模板中获取与所述目标程序对应的完整版程序。
[0062] 具体的,在本方案中利用云技术在网上爬虫正确程序代码,并进行数据挖掘分类处理,为残缺程序的匹配提供多样化模板,让匹配程序能够感知学习到各种各样的程序算法思想,提高匹配的准确性和精确度。
[0063] S103、通过所述完整版程序与所述目标程序的映射对比,将所述基本块按照预定规则转化为以二叉树形式表示的理解依赖模型;
[0064] 具体的,将划分成具有索引引导的顺序执行基本块的相关程序代码,按一定的规则转化为二叉树形式表示的程序模型,如图4所示。
[0065] 其中,在划分好层次的理解依赖模型中的每个节点具有以下特性:(I,F,W,U,T)。I(Index)表示该程序基本块对应的压扁控制流调度变量next的索引值;F(Function)表示该程序基本块的功能特性;W(Weight)表示该程序基本块功能重要程度的权重值,;U(Understand)表示该开发者对该程序基本块的理解程度,即不理解和理解;T(Thread)表示接下来要执行的程序基本块对应数据集V中的索引值I(Index)。
[0066] S104、计算所述理解依赖模型中未理解节点的认知优先度;
[0067] 其中,所述计算所述理解依赖模型中未理解节点的认知优先度,包括:
[0068] 将待计算认知优先度的未理解节点作为目标未理解节点;
[0069] 获取在所述理解依赖模型中,已理解节点与所述目标未理解节点的最短路径距离的距离集合;
[0070] 获取在所述理解依赖模型中,与所述目标未理解节点距离所述距离集合中不同距离所对应的已理解节点的数量集合;
[0071] 获取在所述理解依赖模型中,与所述目标未理解节点距离所述距离集合中不同距离所对应的已理解节点的权重值集合;
[0072] 利用所述距离集合、所述数量集合和所述权重值集合,计算每个未理解节点的认知优先度。
[0073] 具体的,认知优先程度的计算,即在当前的理解依赖模型中,结合未理解部分和已理解部分的关系,后续应对哪一个未理解部分进行认知工作的优先程度。通过图5可以发现在理解依赖图中,在程序完整版本树状模型Tb上,如果一个尚未被理解的结点v相连的已理解的结点越多,即尚未理解结点与已理解结点间路径的边数越少,那么这个结点v应该越优先被理解。认知优先度CP的计算公式:
[0074]
[0075] 其中,d为理解依赖模型Tb中一个已理解结点va到未理解结点vb的距离,即两结点间最短路径的边的个数,如果va与vb存在直接的索引导向关系,那么d=1;D为d的最大取值,即在Tb中,距离未理解结点vb最远的已理解结点va的距离d;nd为Tb中到未理解结点vb距离为d的已理解结点总个数,Wdi为Tb中到未理解结点vb距离为d的已理解结点vb的W属性权重值。
[0076] 具体的,在图5理解依赖模型中,计算Tb中未理解结点vE的认知优先度CP。对于vE来讲,距离为1的已理解结点有vA这1个,其权值为WA,距离为3的已理解结点有2个,vB、vC的权值分别为WB、WC,因此未理解结点vE的认知优先度:
[0077]
[0078] S105、利用未理解节点的认知优先度,通过多层感知器的神经网络深度学习分析未理解节点的程序的理解。
[0079] 其中,利用未理解节点的认知优先度,通过多层感知器的神经网络深度学习分析未理解节点的程序的理解,包括:
[0080] 利用未理解节点的认知优先度,将所有未理解节点进行降序排序;
[0081] 根据所述排序,利用多层感知器的神经网络深度学习分析每个未理解节点的理解。
[0082] 具体的,在本方案中通过程序神经网络深度学习进行分析匹配,通过多层感知器的神经网络深度学习,不断对利用压扁流驱动的程序的程序进行学习理解分析,具体的分析过程如图6所示。
[0083] 可见,在本方案中利用压扁控制流将程序的代码划分成具有索引引导的顺序执行基本块,通过程序完整版本与残缺版本的映射对比建立理解依赖关系,计算相关认知优先度,并结合控制流中switch语句里next变量的“使用-定值链”常量传播,进行神经网络深度学习分析来驱动功能代码部分残缺无法运行版本程序的理解。其中完整版本的代码的来源除了标准正确代码模板外,还来自经过云计算互联网数据挖掘所得的代码模板,这样本发明能够对残缺未能通过编译的代码进行理解,而且结合云计算海量数据的挖掘可以识别多种编程算法思路。
[0084] 下面对本发明实施例提供的程序理解系统进行介绍,下文描述的程序理解系统与上文描述的程序理解方法可以相互参照。
[0085] 参见图7,本发明实施例提供的一种基于压扁控制流认知优先度驱动的程序理解系统,包括:
[0086] 基本块划分模块100,用于利用压扁控制流将残缺版本的目标程序的代码划分成具有索引引导的顺序执行基本块;
[0087] 获取模块200,用于获取与所述目标程序对应的完整版程序;
[0088] 理解依赖模型建立模块300,用于通过所述完整版程序与所述目标程序的映射对比,将所述基本块按照预定规则转化为以二叉树形式表示的理解依赖模型;
[0089] 认知优先度计算模块400,用于计算所述理解依赖模型中未理解节点的认知优先度;
[0090] 理解模块500,用于利用未理解节点的认知优先度,通过多层感知器的神经网络深度学习分析未理解节点的程序的理解。
[0091] 基于上述技术方案,所述获取模块,包括:
[0092] 第一获取单元,用于从标准正确代码模板获取与所述目标程序对应的完整版程序;或者,
[0093] 第二获取单元,用于从经过云计算互联网数据挖掘所得的代码模板中获取与所述目标程序对应的完整版程序。
[0094] 基于上述技术方案,所述理解模块包括:
[0095] 排序单元,用于利用未理解节点的认知优先度,将所有未理解节点进行降序排序;
[0096] 理解单元,用于根据所述排序,利用多层感知器的神经网络深度学习分析每个未理解节点的理解。
[0097] 基于上述技术方案,所述认知优先度计算模块包括:
[0098] 目标未理解节点选取单元,用于将待计算认知优先度的未理解节点作为目标未理解节点;
[0099] 距离集合获取单元,用于获取在所述理解依赖模型中,已理解节点与所述目标未理解节点的最短路径距离的距离集合;
[0100] 数量集合获取单元,用于获取在所述理解依赖模型中,与所述目标未理解节点距离所述距离集合中不同距离所对应的已理解节点的数量集合;
[0101] 权重值集合获取单元,用于获取在所述理解依赖模型中,与所述目标未理解节点距离所述距离集合中不同距离所对应的已理解节点的权重值集合;
[0102] 认知优先度计算单元,用于利用所述距离集合、所述数量集合和所述权重值集合,计算每个未理解节点的认知优先度。
[0103] 本发明实施例提供的一种基于压扁控制流认知优先度驱动的程序理解方法及系统,包括:利用压扁控制流将残缺版本的目标程序的代码划分成具有索引引导的顺序执行基本块;获取与所述目标程序对应的完整版程序;通过所述完整版程序与所述目标程序的映射对比,将所述基本块按照预定规则转化为以二叉树形式表示的理解依赖模型;计算所述理解依赖模型中未理解节点的认知优先度;利用未理解节点的认知优先度,通过多层感知器的神经网络深度学习分析未理解节点的程序的理解;可见,在本实施例中,能够解决现有技术对代码残缺无法通过编译的程序进行理解的问题,且通过云计算海量数据的挖掘解决了现有技术理解程序算法思想单一的问题。
[0104] 本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
[0105] 对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。