CN108628600B - 基于控制流分析的软件动态行为建模方法和装置 - Google Patents

基于控制流分析的软件动态行为建模方法和装置 Download PDF

Info

Publication number
CN108628600B
CN108628600B CN201810434107.5A CN201810434107A CN108628600B CN 108628600 B CN108628600 B CN 108628600B CN 201810434107 A CN201810434107 A CN 201810434107A CN 108628600 B CN108628600 B CN 108628600B
Authority
CN
China
Prior art keywords
function
calling
call
software
branch
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.)
Active
Application number
CN201810434107.5A
Other languages
English (en)
Other versions
CN108628600A (zh
Inventor
胡昌振
任家东
何洪豆
赵谷雨
赵小林
单纯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Yanshan University
Beijing Institute of Technology BIT
Original Assignee
Yanshan University
Beijing Institute of Technology BIT
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Yanshan University, Beijing Institute of Technology BIT filed Critical Yanshan University
Priority to CN201810434107.5A priority Critical patent/CN108628600B/zh
Publication of CN108628600A publication Critical patent/CN108628600A/zh
Application granted granted Critical
Publication of CN108628600B publication Critical patent/CN108628600B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/77Software metrics

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种基于控制流分析的软件动态行为建模方法和装置,该方法对软件动态执行过程的函数执行轨迹进行追踪,建立以函数执行来描述的软件动态行为序列数据库;分析软件动态行为序列,提取函数调用逻辑关系和函数调用统计数据,形成函数调用控制流信息;根据函数调用控制流信息,将软件系统抽象成为一种多标签动态软件行为网络模型。从控制流分析和统计的角度出发,结合复杂网络的理论方法,更加全面和细致的分析了软件函数动态调用关系,能够更加全面科学的对软件行为进行表达和度量。

Description

基于控制流分析的软件动态行为建模方法和装置
技术领域
本发明涉及软件动态行为安全分析技术领域,具体涉及基于控制流分析的软件动态行为建模方法和装置。
背景技术
随着软件功能需求的日趋复杂,软件系统的组织结构和内部控制关系也越发繁杂,软件质量、可靠性和安全性越来越难以控制。软件安全是信息安全领域中的一个核心问题,恶意攻击往往利用软件系统中的漏洞来窃取数据,甚至破坏资源。除此之外,软件系统的日趋庞大导致软件设计不可避免地存在缺陷,使得软件系统常常出现故障,甚至失效。因此,保障软件系统安全可靠运行的可信软件技术成为计算机软件与理论研究的重要方向。
当前,可信软件技术研究面临挑战,传统软件工程理论和方法难易满足现代软件系统需求的可信要求,至今尚未建立公认的可信软件理论。保证软件运行时的行为安全是可信软件技术研究的重要目标,软件动态行为分析是软件动态可信研究的重要内容。
现代软件系统逐步向组件式、接口式开发演进,加上面向对象编程的广泛使用,使得系统开发普遍以功能函数调用为主,加快了软件系统的开发进度。函数是软件系统的基本功能单元,在一定程度上保证了功能的原子性,同时促成了系统能够业务的复杂性和多样性。因此,从函数的层次描述软件行为,以动态分析刻画软件的行为模式,能够为软件行为安全研究提供更加科学合理的模型和方法。
现有的软件行为建模方法分为静态和动态两种。在静态分析方法中,文献[1]描述了一些软件静态调用分析建模方法,如火焰图等;文献[2]中通过分析软件中类之间的依赖关系来分析软件行为中的重要节点,以压缩类图。在动态分析方法中,发明专利[3]追踪系统调用关系,使用序列模式分析方法对调用序列进行分析建模,最后建立状态转移图;发明专利[4]将系统调用序列与隐马尔可夫模型结合建模模型来评估软件行为;发明专利[5]通过追踪软件标记代码,获得软件源代码函数转移图,并进一步分析得到软件API最小功能块转移图作为软件行为模板,以检测软件异常。另外,文献[6]结合复杂网络和软件动态函数调用,建立了软件以调用网模型。
[1]Shropshire J,Menard P.Teaching Static Call Analysis to DetectAnomalous Software Behavior[J].2016.
[2]Thung F,Lo D,Osman M H,et al.Condensing class diagrams byanalyzing design and network metrics using optimistic classification[C]//Proceedings of the 22nd International Conference on ProgramComprehension.ACM,2014:110-121.
[3]赖英旭,张文雯,杨震,等.基于状态层的软件行为建模方法:,CN102831059A[P].2012.
[4]胡昌振,薛静锋,张妍,等.一种基于系统调用的软件行为评估方法:,CN105528286A[P].2016.
[5]赖英旭,赵轶文,刘静,等.基于函数模板的软件行为分析方法:,CN 104751059B[P].2017.
[6]Qu Y,Guan X,Zheng Q,et al.Calling Network:A New Method forModeling Software Runtime Behaviors[J].Acm Sigsoft Software EngineeringNotes,2015,40(1):1-8.。
现有的软件行为建模分析方法包括:静态结构分析法,序列模式分析法,复杂网络建模分析法和基于状态图的建模分析方法等。但是,现有的方法缺乏对软件系统中函数间的控制流分析和动态行为统计特性分析;而从代码层级建立状态图等分析方法易导致状态爆炸的问题,存在对软件行为分析粒度过细的弊端。因此,针对软件动态行为描述的建模分析方法亟需更加科学合理的解决方案。
发明内容
有鉴于此,本发明提供了一种基于控制流分析的软件动态行为建模方法和装置,从控制流分析和统计的角度出发,结合复杂网络的理论方法,更加全面和细致的分析了软件函数动态调用关系,提出了一种新颖的软件行为描述模型,能够更加全面科学的对软件行为进行表达和度量,对于软件动态行为的研究,本发明的优点会更加突出。
为了解决上述技术问题,本发明采用如下技术方案。
一种基于控制流分析的软件动态行为建模方法,包括如下步骤:
步骤一、对软件动态执行过程的函数执行轨迹进行追踪,建立以函数执行来描述的软件动态行为序列数据库;
步骤二、分析软件动态行为序列,提取函数调用逻辑关系和函数调用统计数据,形成函数调用控制流信息;
步骤三、根据函数调用控制流信息,将软件系统抽象成为一种多标签动态软件行为网络模型。
优选地,步骤一通过收集软件运行时的行为日志实现,具体包括:
设计追踪脚本,在函数调用时和即将退出时动态注入跟踪代码;设计测试用例并执行软件,收集运行过程中函数执行的记录点,即轨迹点,形成轨迹序列;通过设计大量测试用例并执行,最终建立软件动态行为序列数据库。
优选地,所述软件动态行为序列数据库中包含多条轨迹序列TS,每个轨迹序列由多个轨迹点TP组成;每个轨迹点TP是一个三元组(Type,Class,Method);其中,Type表示轨迹点的类型,Type∈{i,o},i表示刚进入函数,o表示即将跳出函数;Class表示函数所在类名或者文件名,Method表示函数名。
优选地,所述步骤二提取的函数调用逻辑关系包括:直接调用、分支调用、循环调用和递归调用;所述函数调用统计数据包括平均循环调用次数、平均递归深度,以及分支调用概率。
优选地,所述步骤二具体包括:
步骤21:分析软件动态行为序列,对函数执行轨迹序列中轨迹点出现的顺序、重复出现次数进行分析:
①根据如下规则来判断函数调用关系控制类型:
a.如果在函数A中出现对函数B的连续调用,则函数A与函数B的调用关系即为循环调用;
b.如果在函数A中出现对函数A本身的调用,则函数A中发生了递归调用;
c.除以上2种情况外的函数调用暂记为直接调用;
②累计函数调用次数信息,包括函数循环次数、递归深度和非连续调用次数;其中在记录非连续调用次数时,对于循环和递归调用,只在第一次调用出现时累计;
步骤22:递归调用关系转换:
对于函数A调用函数B,且函数B自身为递归函数的情况,会产生两条调用关系A→B和B→B,此时将B→B的调用统计数据和调用类型都累计到A→B上,而将B→B删除;其中→表示箭头左侧函数调用右侧函数;
步骤23:分支调用关系判定:
根据前两步的结果,对调用关系是否为分支调用进行判定,主要依据如下:
如果函数A与函数B存在调用关系,且函数A被调用的次数多于函数A调用函数B的次数,则函数A与函数B的调用关系即为分支调用;分支调用的调用次数根据已统计的循环次数、递归深度和非连续调用次数计算。
优选地,如果A→B判定为分支调用,存在以下两种情况:
a.若A→B原调用关系为直接调用,则将A→B调用关系更改为分支调用;
b.若A→B原调用关系为循环或递归调用,则将A→B调用关系在原有基础之上增加分支调用,即变成复合调用关系。
优选地,所述步骤三具体包括:
步骤31:根据函数调用的循环次数、递归深度和非连续调用次数,分别计算函数调用的平均循环次数、平均递归深度和分支调用概率;
步骤32:把函数作为节点,把函数之间的调用关系映射为节点之间的边,边所表示的调用类型作为标签T,边的平均循环次数、平均递归深度和分支调用概率分别作为权重标签L、R和B,建立多标签软件动态调用网SDCN;
其中,标签T的值可选值包括直接调用D、分支调用B、循环调用L和递归调用R;其中,当作为权重标签时,权重标签L的值取平均循环次数,权重标签R的值取平均递归深度,权重标签B的值取分支调用概率。
本发明还提供了一种基于控制流分析的软件动态行为建模装置,包括追踪模块、提取模块和建模模块;
所述追踪模块,用于对软件动态执行过程的函数执行轨迹进行追踪,建立以函数执行来描述的软件动态行为序列数据库;
所述提取模块,用于分析软件动态行为序列,提取函数调用逻辑关系和函数调用统计数据,形成函数调用控制流信息;
所述建模模块,用于根据函数调用控制流信息,将软件系统抽象成为一种多标签动态软件行为网络模型。
优选地,所述提取模块包括:
分析子模块,用于分析软件动态行为序列,对函数执行轨迹序列中轨迹点出现的顺序、重复出现次数进行分析:
①根据如下规则来判断函数调用关系控制类型:
a.如果在函数A中出现对函数B的连续调用,则函数A与函数B的调用关系即为循环调用;
b.如果在函数A中出现对函数A本身的调用,则函数A中发生了递归调用;
c.除以上2种情况外的函数调用暂记为直接调用;
②累计函数调用次数信息,包括函数循环次数、递归深度和非连续调用次数;其中在记录非连续调用次数时,对于循环和递归调用,只在第一次调用出现时累计;
递归调用关系转换子模块,用于对分析子模块所确定的递归调用关系进行转换:对于函数A调用函数B,且函数B自身为递归函数的情况,会产生两条调用关系A→B和B→B,此时将B→B的调用统计数据和调用类型都累计到A→B上,而将B→B删除;其中→表示箭头左侧函数调用右侧函数;
分支调用关系判定子模块,用于在分析子模块和递归调用关系转换子模块完成的基础上,对调用关系是否为分支调用进行判定,主要依据如下:
如果函数A与函数B存在调用关系,且函数A被调用的次数多于函数A调用函数B的次数,则函数A与函数B的调用关系即为分支调用;分支调用的调用次数根据已统计的循环次数、递归深度和非连续调用次数计算。
优选地,所述建模模块包括:
计算子模块,用于根据函数调用的循环次数、递归深度和非连续调用次数,分别计算函数调用的平均循环次数、平均递归深度和分支调用概率,提供给模型形成子模块;
模型形成子模块,用于把函数作为节点,把函数之间的调用关系映射为节点之间的边,边所表示的调用类型作为标签T,边的平均循环次数、平均递归深度和分支调用概率分别作为权重标签L、R和B,建立多标签软件动态调用网SDCN;
其中,标签T的值可选值包括直接调用D、分支调用B、循环调用L和递归调用R;其中,当作为权重标签时,权重标签L的值取平均循环次数,权重标签R的值取平均递归深度,权重标签B的值取分支调用概率。
有益效果:
1、本发明实现了软件动态执行过程中的控制结构识别功能,对软件动态行为进行了控制流分析,对调用关系进行了控制逻辑关系的判定,能够更科学、准确地描述软件行为逻辑关系,刻画软件行为模式和特征;
2、本发明实现了软件动态调用关系的数据统计功能,并结合软件调用关系中呈现的控制结构,对软件行为的统计特性进行了分析,能够从调用发生的频率、可能性、嵌套深度方面揭示软件调用行为模式,提高软件行为可预测性;
3、本发明结合复杂网络理论、软件动态调用关系及其统计特性,建立了多标签软件动态调用网,为软件行为分析提供了一个更加科学、全面、细致的模型。
4、本发明使用函数作为分析单元,既保证了功能的原子性和业务功能的多样性、复杂性,又从一定程度上减轻了基于代码层的状态图分析所带来的状态空间爆炸问题。
附图说明
图1为本发明基于控制流分析的软件动态行为建模方案的建模流程示意图。
图2为步骤二具体实施方式示意图。
图3为递归调用关系转换图。
图4为软件动态调用网示意图。
具体实施方式
本发明提供了一种基于控制流分析的软件动态行为建模方法,其基本思想是:对软件动态执行过程的函数执行轨迹进行追踪,从控制流分析的角度考虑软件的行为特性,并结合软件行为的统计特性建立软件动态行为分析模型。与上述的其他发明相比,首先对软件动态调用序列进行控制流分析,识别软件行为控制结构;其次结合软件调用逻辑关系和软件调用统计数据,对控制关系进行了度量,并结合复杂网络建立了多标签软件动态调用网模型,能够更加全面科学的对软件行为进行表达和度量。
下面结合附图并举实施例,对本发明进行详细描述。
首先给出软件动态行为的相关概念和定义:
在软件中,函数作为基本功能单元,既保证了功能的原子性,又促成了业务功能的多样性和复杂性。因此,函数之间的调用关系以及动态执行过程,是软件行为的直接体现。本发明以函数为分析对象,将软件行为描述为函数之间的调用关系,基于函数之间的控制流分析建立软件动态行为模型。
软件系统中的控制结构包括顺序、选择和循环,通过3种控制结构的组合、嵌套构成软件系统的控制流。基于此,本发明将函数之间的调用关系划分如下:
(1)直接调用(Direct Call):顺序结构,表示两个函数的调用关系是确定性的,调用必然会发生。
(2)分支调用(Branch Call):选择结构,表示两个函数的调用关系是不确定性的,调用的发生是有概率的。
(3)循环调用(Loop Call):循环结构,表示两个函数的调用关系是确定性的,调用必然会发生,而且会连续调用多次。
(4)递归调用(Recursion Call):一种特殊的循环结构,表示两个函数的调用关系是确定性的,调用必然会发生,而且被调用函数是一个递归函数。
函数动态调用关系是指软件实际运行或测试过程中产生的函数调用关系。在软件执行过程中,实时记录软件函数的执行过程,分析函数动态执行序列,从而可以获取函数动态调用关系。为了描述和提取函数动态调用关系,本发明给出以下定义。
【定义1】轨迹点(Trace Point,TP)表示软件动态执行过程中函数执行的记录点,TP是一个三元组(Type,Class,Method)。Type表示记录点的类型,Type∈{i,o},i表示刚进入函数,o表示即将跳出函数。Class表示函数所在类名或者文件名,Method表示函数名。
【定义2】轨迹序列(Trace Sequence,TS)表示软件动态执行过程的轨迹点序列,用来表示一个功能的完整执行过程,TS={TPi,i∈N}。N为轨迹中轨迹点的数量。
【定义3】函数调用(Method Call,MC)表示两个函数之间的调用关系,MC是一个六元组(Caller,Callee,CallType,LoopCount,RecurDepth,DistinctCount)。Caller和Callee分别表示调用者和被调用者,CallType表示函数调用的类型,CallType∈{D,B,L,R},D代表直接调用,B代表分支调用,L代表循环调用,R代表递归调用。LoopCount表示累计循环调用次数,RecurDepth表示累计递归深度,DistinctCount表示累计非连续调用次数,即不考虑循环和递归调用情况下的执行次数。
【定义4】函数调用关系集(Method Calling Map,MCMap)表示软件动态执行的调用关系集合,MCMap={MCi,i∈M}。
【定义5】软件动态调用网(Software Dynamic Calling Network,SDCN):SDCN=(V,E,T,W),其中节点集V表示函数集,边集E表示函数间调用关系集,T表示边的类型标签集,W表示边的标签化权重集。下文在步骤三进行描述时,会具体涉及到T与W的含义和取值。
本发明一种基于控制流分析的软件动态行为建模方法的流程示意图如图1所示。具体操作步骤如下:
步骤一、通过收集和分析软件运行时行为日志,对软件动态执行过程的函数执行轨迹进行追踪,建立以函数执行来描述的动态行为序列数据库。
设计追踪脚本,在函数调用时和即将退出时动态注入跟踪代码。设计测试用例并执行软件,收集运行过程中产生的轨迹点,形成轨迹序列。通过设计大量测试用例并执行,最终建立软件动态行为序列数据库。
本发明具体实施方式中追踪得到的软件动态行为序列数据库如表1所示,该数据库记录了轨迹序列,每个轨迹序列由多个轨迹点TP组成,每个轨迹点TP是一个三元组(Type,Class,Method)。表中的数据为举例数据。
表1软件动态行为序列数据库表
Figure BDA0001654188220000101
Figure BDA0001654188220000111
步骤二、分析软件动态行为序列,提取函数调用逻辑关系和函数调用统计数据,形成函数调用控制流信息。
本发明中,提取的函数调用逻辑关系包括直接调用、分支调用、循环调用和递归调用4种控制结构,并统计函数调用的平均循环次数、平均递归深度和分支调用概率,形成函数调用控制流信息,记录在函数调用关系数据库。
该步骤维护一个函数调用关系集MCMap,在每一步操作中持续更新MCMap中的每个函数调用信息MC。
步骤21:提取函数调用序列中的直接、循环和递归控制结构,统计调用数据。具体实施方式示意图如图2所示。
通过对轨迹序列TS进行分析,得到函数之间的调用关系,包括函数调用类型和调用次数信息。调用关系的提取,主要是通过对轨迹序列中轨迹点出现的顺序、重复出现次数进行分析来实现,具体步骤如下:
顺序读取轨迹序列TS中的轨迹点TP,并根据进入、跳出函数标志初始化函数调用信息MC。
①根据如下规则来判断函数调用关系控制类型:
a.如果在函数A中出现对函数B的连续调用,则A与B的调用关系即为循环调用。
b.如果在函数A中出现对函数A本身的调用,则A中发生了递归调用。
c.除以上2种情况外的函数调用暂记为直接调用。
②累计函数调用次数信息,包括函数循环次数、递归深度和非连续调用次数;其中在记录非连续调用次数时,对于循环和递归调用,只在第一次调用出现时累计。
该步骤获取的初步分析调用关系如表2所示。
表2初步分析调用关系表
Figure BDA0001654188220000121
步骤22:递归调用关系转换。
通过步骤21分析提取后,需要对递归调用关系进行关系转换。原递归关系如图3左边所示,函数A调用函数B,且函数B自身是一个递归函数;将这种递归调用关系转移到A与B调用关系上,同时函数B自身的调用统计数据和调用类型都累计到A与B的调用关系上,如图3所示,原始递归调用表示为A→B(A调用B)和B→B方式,转换后为A→B,将B→B上的统计数据和调用类型累计转移到A→B上,而将B→B删除。这样能方便后续表示和处理函数递归调用关系,但保持其物理含义不变。
该步骤获得的调用关系表如表3所示,其中灰色部分是经过关系转换的。
表3递归转换后调用关系表
Figure BDA0001654188220000131
步骤23:分支调用关系判定。
根据前两步的结果,对调用关系是否为分支调用进行判定,主要依据如下:
如果函数A与函数B存在调用关系,且函数A被调用的次数多于函数A调用函数B的次数,则A与B的调用关系即为分支调用。其中,调用次数根据上面统计的循环次数、递归深度和非连续调用次数来计算。
如果A→B判定为分支调用,存在以下两种情况:
a.若A→B原调用关系为直接调用,则将A→B调用关系更改为分支调用;
b.若A→B原调用关系为循环或递归调用,则将A→B调用关系在原有基础之上增加分支调用,即变成复合调用关系。
通过分支调用关系判定后获取的调用关系如表4所示。
表4分支判定后调用关系表
Figure BDA0001654188220000141
Figure BDA0001654188220000151
步骤三、将软件系统抽象成为一种多标签动态软件行为网络模型。
步骤31:根据函数调用的循环次数、递归深度和非连续调用次数,分别计算函数调用的平均循环次数、平均递归深度和分支调用概率,具体计算公式如下,其中下角标AB表示属于调用关系A→B的统计数据,下角标BC同理:
(1)若调用关系A→B为循环调用,则
Figure BDA0001654188220000152
(2)若调用关系A→B为递归调用,则
Figure BDA0001654188220000153
(3)若存在调用关系A→B和B→C,且B→C为分支调用,则
Figure BDA0001654188220000154
通过计算后获取的调用关系如表5所示。
表5调用关系统计表
Figure BDA0001654188220000155
步骤32:把函数作为节点,把函数之间的调用关系映射为节点之间的边,边所表示的调用类型作为标签T,边的平均循环次数、平均递归深度和分支调用概率分别作为权重标签B、L和R,建立软件动态调用网SDCN。
其中,标签T的值可选值包括直接调用D、分支调用B、循环调用L和递归调用R;其中,L、R、B不仅作为一个符号表示调用类型,又作为权重标签,当作为权重标签时,其被赋予响应的值,具体来说,权重标签L的值取平均循环次数,权重标签R的值取平均递归深度,权重标签B的值取分支调用概率。
软件动态调用网标签说明及权重计算方式如表6所示,建立的软件动态调用网如图4所示。
表6软件动态调用网标签说明
Figure BDA0001654188220000161
图4是一个模拟程序通过多次执行得到软件执行序列,然后通过抽取函数调用关系得到的软件动态调用网络图。图中节点为函数,边为函数之间的调用关系,实线表示调用一定会发生,虚线表示调用的发生存在一定的可能性,也就是分支调用。边的类型标签为T,权重标签包括B、L和R,含义分别为分支调用概率、平均循环次数和平均递归深度。
至此,本流程结束。基于本发明构建的基于控制流分析的多标签软件动态调用网模型,首先可以为软件调用行为模式识别和分析提供基础;其次,能够为软件行为复杂性分析提供依据;最后,能够为软件行为的预测建模提供数据支持。
为了实现上述方法,本发明还提供了一种基于控制流分析的软件动态行为建模装置,包括追踪模块、提取模块和建模模块;其中,提取模块和建模模块为两个重要组成模块。
追踪模块,用于对软件动态执行过程的函数执行轨迹进行追踪,建立以函数执行来描述的软件动态行为序列数据库;
提取模块,用于分析软件动态行为序列,提取函数调用逻辑关系和函数调用统计数据,形成函数调用控制流信息;
建模模块,用于根据函数调用控制流信息,将软件系统抽象成为一种多标签动态软件行为网络模型。
其中,提取模块包括:
分析子模块,用于分析软件动态行为序列,对函数执行轨迹序列中轨迹点出现的顺序、重复出现次数进行分析:
①根据如下规则来判断函数调用关系控制类型:
a.如果在函数A中出现对函数B的连续调用,则函数A与函数B的调用关系即为循环调用;
b.如果在函数A中出现对函数A本身的调用,则函数A中发生了递归调用;
c.除以上2种情况外的函数调用暂记为直接调用;
②累计函数调用次数信息,包括函数循环次数、递归深度和非连续调用次数;其中在记录非连续调用次数时,对于循环和递归调用,只在第一次调用出现时累计;
递归调用关系转换子模块,用于对分析子模块所确定的递归调用关系进行转换:对于函数A调用函数B,且函数B自身为递归函数的情况,会产生两条调用关系A→B和B→B,此时将B→B的调用统计数据和调用类型都累计到A→B上,而将B→B删除;其中→表示箭头左侧函数调用右侧函数;
分支调用关系判定子模块,用于在分析子模块和递归调用关系转换子模块完成的基础上,对调用关系是否为分支调用进行判定,主要依据如下:
如果函数A与函数B存在调用关系,且函数A被调用的次数多于函数A调用函数B的次数,则函数A与函数B的调用关系即为分支调用;分支调用的调用次数根据已统计的循环次数、递归深度和非连续调用次数计算。
建模模块具体包括:
计算子模块,用于根据函数调用的循环次数、递归深度和非连续调用次数,分别计算函数调用的平均循环次数、平均递归深度和分支调用概率,提供给模型形成子模块;
模型形成子模块,用于把函数作为节点,把函数之间的调用关系映射为节点之间的边,边所表示的调用类型作为标签T,边的平均循环次数、平均递归深度和分支调用概率分别作为权重标签L、R和B,建立多标签软件动态调用网SDCN;
其中,标签T的值可选值包括直接调用D、分支调用B、循环调用L和递归调用R;其中,当作为权重标签时,权重标签L的值取平均循环次数,权重标签R的值取平均递归深度,权重标签B的值取分支调用概率。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (6)

1.一种基于控制流分析的软件动态行为建模方法,其特征在于,包括如下步骤:
步骤一、对软件动态执行过程的函数执行轨迹进行追踪,建立以函数执行来描述的软件动态行为序列数据库;
步骤二、分析软件动态行为序列,提取函数调用逻辑关系和函数调用统计数据,形成函数调用控制流信息;
步骤三、根据函数调用控制流信息,将软件系统抽象成为一种多标签动态软件行为网络模型;
所述步骤二具体包括:
步骤21:分析软件动态行为序列,对函数执行轨迹序列中轨迹点出现的顺序、重复出现次数进行分析:
①根据如下规则来判断函数调用关系控制类型:
a.如果在函数A中出现对函数B的连续调用,则函数A与函数B的调用关系即为循环调用;
b.如果在函数A中出现对函数A本身的调用,则函数A中发生了递归调用;
c.除以上2种情况外的函数调用暂记为直接调用;
②累计函数调用次数信息,包括函数循环次数、递归深度和非连续调用次数;其中在记录非连续调用次数时,对于循环和递归调用,只在第一次调用出现时累计;
步骤22:递归调用关系转换:
对于函数A调用函数B,且函数B自身为递归函数的情况,会产生两条调用关系A→B和B→B,此时将B→B的调用统计数据和调用类型都累计到A→B上,而将B→B删除;其中→表示箭头左侧函数调用右侧函数;
步骤23:分支调用关系判定:
根据前两步的结果,对调用关系是否为分支调用进行判定,主要依据如下:
如果函数A与函数B存在调用关系,且函数A被调用的次数多于函数A调用函数B的次数,则函数A与函数B的调用关系即为分支调用;分支调用的调用次数根据已统计的循环次数、递归深度和非连续调用次数计算;
所述步骤三具体包括:
步骤31:根据函数调用的循环次数、递归深度和非连续调用次数,分别计算函数调用的平均循环次数、平均递归深度和分支调用概率;
步骤32:把函数作为节点,把函数之间的调用关系映射为节点之间的边,边所表示的调用类型作为标签T,边的平均循环次数、平均递归深度和分支调用概率分别作为权重标签L、R和B,建立多标签软件动态调用网SDCN;
其中,标签T的值可选值包括直接调用D、分支调用B、循环调用L和递归调用R;其中,当作为权重标签时,权重标签L的值取平均循环次数,权重标签R的值取平均递归深度,权重标签B的值取分支调用概率。
2.如权利要求1所述的方法,其特征在于,步骤一通过收集软件运行时的行为日志实现,具体包括:
设计追踪脚本,在函数调用时和即将退出时动态注入跟踪代码;设计测试用例并执行软件,收集运行过程中函数执行的记录点,即轨迹点,形成轨迹序列;通过设计大量测试用例并执行,最终建立软件动态行为序列数据库。
3.如权利要求2所述的方法,其特征在于,所述软件动态行为序列数据库中包含多条轨迹序列TS,每个轨迹序列由多个轨迹点TP组成;每个轨迹点TP是一个三元组(Type,Class,Method);其中,Type表示轨迹点的类型,Type∈{i,o},i表示刚进入函数,o表示即将跳出函数;Class表示函数所在类名或者文件名,Method表示函数名。
4.如权利要求1所述的方法,其特征在于,所述步骤二提取的函数调用逻辑关系包括:直接调用、分支调用、循环调用和递归调用;所述函数调用统计数据包括平均循环调用次数、平均递归深度,以及分支调用概率。
5.如权利要求1所述的方法,其特征在于,如果A→B判定为分支调用,存在以下两种情况:
a.若A→B原调用关系为直接调用,则将A→B调用关系更改为分支调用;
b.若A→B原调用关系为循环或递归调用,则将A→B调用关系在原有基础之上增加分支调用,即变成复合调用关系。
6.一种基于控制流分析的软件动态行为建模装置,其特征在于,包括追踪模块、提取模块和建模模块;
所述追踪模块,用于对软件动态执行过程的函数执行轨迹进行追踪,建立以函数执行来描述的软件动态行为序列数据库;
所述提取模块,用于分析软件动态行为序列,提取函数调用逻辑关系和函数调用统计数据,形成函数调用控制流信息;
所述建模模块,用于根据函数调用控制流信息,将软件系统抽象成为一种多标签动态软件行为网络模型;
所述提取模块包括:
分析子模块,用于分析软件动态行为序列,对函数执行轨迹序列中轨迹点出现的顺序、重复出现次数进行分析:
①根据如下规则来判断函数调用关系控制类型:
a.如果在函数A中出现对函数B的连续调用,则函数A与函数B的调用关系即为循环调用;
b.如果在函数A中出现对函数A本身的调用,则函数A中发生了递归调用;
c.除以上2种情况外的函数调用暂记为直接调用;
②累计函数调用次数信息,包括函数循环次数、递归深度和非连续调用次数;其中在记录非连续调用次数时,对于循环和递归调用,只在第一次调用出现时累计;
递归调用关系转换子模块,用于对分析子模块所确定的递归调用关系进行转换:对于函数A调用函数B,且函数B自身为递归函数的情况,会产生两条调用关系A→B和B→B,此时将B→B的调用统计数据和调用类型都累计到A→B上,而将B→B删除;其中→表示箭头左侧函数调用右侧函数;
分支调用关系判定子模块,用于在分析子模块和递归调用关系转换子模块完成的基础上,对调用关系是否为分支调用进行判定,主要依据如下:
如果函数A与函数B存在调用关系,且函数A被调用的次数多于函数A调用函数B的次数,则函数A与函数B的调用关系即为分支调用;分支调用的调用次数根据已统计的循环次数、递归深度和非连续调用次数计算;
所述建模模块包括:
计算子模块,用于根据函数调用的循环次数、递归深度和非连续调用次数,分别计算函数调用的平均循环次数、平均递归深度和分支调用概率,提供给模型形成子模块;
模型形成子模块,用于把函数作为节点,把函数之间的调用关系映射为节点之间的边,边所表示的调用类型作为标签T,边的平均循环次数、平均递归深度和分支调用概率分别作为权重标签L、R和B,建立多标签软件动态调用网SDCN;
其中,标签T的值可选值包括直接调用D、分支调用B、循环调用L和递归调用R;其中,当作为权重标签时,权重标签L的值取平均循环次数,权重标签R的值取平均递归深度,权重标签B的值取分支调用概率。
CN201810434107.5A 2018-05-08 2018-05-08 基于控制流分析的软件动态行为建模方法和装置 Active CN108628600B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810434107.5A CN108628600B (zh) 2018-05-08 2018-05-08 基于控制流分析的软件动态行为建模方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810434107.5A CN108628600B (zh) 2018-05-08 2018-05-08 基于控制流分析的软件动态行为建模方法和装置

Publications (2)

Publication Number Publication Date
CN108628600A CN108628600A (zh) 2018-10-09
CN108628600B true CN108628600B (zh) 2020-12-15

Family

ID=63696077

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810434107.5A Active CN108628600B (zh) 2018-05-08 2018-05-08 基于控制流分析的软件动态行为建模方法和装置

Country Status (1)

Country Link
CN (1) CN108628600B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110109702B (zh) * 2019-05-16 2021-07-13 福州大学 基于代码分析的Android计算迁移在线决策方法
CN110543407B (zh) * 2019-08-21 2021-11-05 杭州趣链科技有限公司 一种Solidity智能合约性能静态分析方法
CN111103797B (zh) * 2019-12-09 2022-06-21 南京理工大学 基于多变量控制的软件行为调节方法
CN111625223B (zh) * 2020-05-26 2023-04-28 中国人民解放军国防科技大学 一种基于静态分析与抽象的软件设计重建方法
CN112612709B (zh) * 2020-12-28 2022-08-02 卡斯柯信号有限公司 一种用于铁路信号系统的软件架构安全分析实现方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103473171A (zh) * 2013-08-28 2013-12-25 北京信息科技大学 一种基于函数调用路径的覆盖率动态跟踪方法及装置
CN105045574A (zh) * 2015-06-24 2015-11-11 广东电网有限责任公司电力科学研究院 一种基于复杂网络故障传播的软件关键函数辨识方法
CN106502669A (zh) * 2016-10-20 2017-03-15 北京航空航天大学 一种软件复杂网络的三维坐标模型构建方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8904339B2 (en) * 2006-10-12 2014-12-02 International Business Machines Corporation Method and system for modeling runtime behavior

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103473171A (zh) * 2013-08-28 2013-12-25 北京信息科技大学 一种基于函数调用路径的覆盖率动态跟踪方法及装置
CN105045574A (zh) * 2015-06-24 2015-11-11 广东电网有限责任公司电力科学研究院 一种基于复杂网络故障传播的软件关键函数辨识方法
CN106502669A (zh) * 2016-10-20 2017-03-15 北京航空航天大学 一种软件复杂网络的三维坐标模型构建方法

Also Published As

Publication number Publication date
CN108628600A (zh) 2018-10-09

Similar Documents

Publication Publication Date Title
CN108628600B (zh) 基于控制流分析的软件动态行为建模方法和装置
Momeni et al. Machine learning model for smart contracts security analysis
CN109241740B (zh) 恶意软件基准测试集生成方法及装置
Xiang et al. Detecting data inconsistency based on the unfolding technique of petri nets
CN113139192B (zh) 基于知识图谱的第三方库安全风险分析方法及系统
CN108491228A (zh) 一种二进制漏洞代码克隆检测方法及系统
CN112817787B (zh) 中断驱动嵌入式系统数据竞争的自动检测方法
CN104866764B (zh) 一种基于对象引用图的Android手机恶意软件检测方法
Liao et al. Smartdagger: a bytecode-based static analysis approach for detecting cross-contract vulnerability
Taymouri et al. Computing alignments of well-formed process models using local search
Hu et al. Detect defects of solidity smart contract based on the knowledge graph
CN113468524B (zh) 基于rasp的机器学习模型安全检测方法
CN115374595A (zh) 一种基于过程挖掘的自动化软件过程建模方法及系统
Dabain et al. Design pattern detection using FINDER
US11768754B2 (en) Parallel program scalability bottleneck detection method and computing device
CN116074092B (zh) 一种基于异构图注意力网络的攻击场景重构系统
CN113918534A (zh) 一种策略处理系统及方法
CN116702157A (zh) 一种基于神经网络的智能合约漏洞检测方法
CN111190813B (zh) 基于自动化测试的安卓应用网络行为信息提取系统及方法
CN102799517B (zh) 一种快速的循环扩展检测方法
CN115296896B (zh) 攻击路径动态生成方法、装置、电子设备
Jiang et al. An exploitability analysis technique for binary vulnerability based on automatic exception suppression
Zakurdaeva et al. Detecting architectural integrity violation patterns using machine learning
Jin et al. Dynamic cohesion measurement for distributed system
Malhotra et al. Micro Level Source Code Summarization of Optimal Set of Object Oriented Classes.

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant