SSA结构解析方法、装置、电子设备和存储介质制造方法及图纸

技术编号:26030925 阅读:21 留言:0更新日期:2020-10-23 21:08
本申请提供了一种SSA结构解析方法、装置、电子设备和存储介质,其中,该方法包括:根据数据流解析规则,划分出多个CFG节点;针对每一个CFG节点,从程序语言的源代码的数据类型中查找与各CFG节点对应的目标节点,并抽取所述目标节点中的信息写入与该目标节点对应的CFG节点中,获得解析后的CFG节点,将所述解析后的CFG节点进行关系的关联,以获得可用于数据流分析的CFG结构数据。由此,CFG节点中包括有程序语言源代码的原路径信息和对应的包的名称,在通过CFG结构进行数据流分析时,即可实现源代码的跨包数据流检测。

【技术实现步骤摘要】
SSA结构解析方法、装置、电子设备和存储介质
本申请涉及程序语言
,具体而言,涉及一种SSA结构解析方法、装置、电子设备和存储介质。
技术介绍
随着网络技术的不断发展,通过不同类型的程序语言编写形成的应用程序也日益增多。为了保证应用程序的使用体验,在发布新的应用程序之前,通常会对该应用程序进行漏洞分析。白盒测试技术是一种常用的漏洞分析技术,白盒测试技术一般可被分为静态分析和动态分析两类技术。静态分析主要有:控制流分析技术、数据流分析技术、信息流分析技术。在使用数据流分析技术进行白盒测试时,需要先将源程序解析为数据流,再对数据流进行分析。目前,现有的白盒测试软件在测试golang语言时,无法将具体的代码内容与具体的包对应起来,导致在对数据流分析时,无法进行跨包数据流追踪,因此,只能在golang语言的单文件包中生效。
技术实现思路
有鉴于此,本申请的目的在于提供一种SSA结构解析方法、装置、电子设备和存储介质,实现源代码的跨包数据流检测。第一方面,本专利技术实施例提供一种程序语言的SSA结构解析方法,应用于电子设备,方法包括:根据数据流解析规则,划分出多个CFG节点;针对每一个CFG节点,从程序语言的源代码的数据类型中查找与各CFG节点对应的目标节点,并抽取目标节点中的信息写入与该目标节点对应的CFG节点中,获得解析后的CFG节点,其中,源代码的数据类型包括多个AST节点类型及多个SSA节点类型;将解析后的CFG节点进行关系的关联,以获得可用于数据流分析的CFG结构数据。在可选的实施方式中,将解析后的CFG节点进行关系的关联,包括:根据源代码解析CFG节点的对应关系,连接CFG节点;根据源代码的上下文的执行逻辑连接CFG边;根据CFG节点之间的包含关系连接AST边。在可选的实施方式中,根据源代码解析CFG节点的对应关系,连接CFG节点,包括:循环遍历源代码中所有CFG节点的对应关系,并将CFG节点进行连接与对应。在可选的实施方式中,方法还包括:根据漏洞分析规则及数据流分析方法对CFG结构进行漏洞分析,获得漏洞检测结果。在可选的实施方式中,在针对每一个CFG节点,从程序语言的源代码的数据类型中查找与各CFG节点对应的目标节点之前,方法还包括:对源代码进行分析,获得对应的程序语言类型,其中,程序语言类型包括go语言;根据程序语言类型将源代码输入至对应的解析引擎中进行解析,其中,解析引擎包括go语言解析引擎。在可选的实施方式中,根据程序语言类型将源代码输入至对应的解析引擎中进行解析,包括:对源代码进行词法分析及语法分析,获得该源代码的SSA结构数据。在可选的实施方式中,对源代码进行词法分析及语法分析,获得该源代码的SSA结构数据,包括:对源代码进行词法解析,转换成对应的标记序列Token,其中,标记序列Token包括标识符、关键字、分隔符、操作符、文字和注释中的至少一种;对标记序列Token进行语法分析,根据语法特征将标记序列Token构建为抽象语法树AST;根据抽象语法树,结合源代码的语法特征,将抽象语法树AST转换为SSA结构数据。第二方面,本专利技术实施例提供一种程序语言的SSA结构解析装置,应用于电子设备,装置包括:CFG节点划分模块,用于根据数据流解析规则,划分出多个CFG节点;解析模块,用于针对每一个CFG节点,从程序语言的源代码的数据类型中查找与各CFG节点对应的目标节点,并抽取目标节点中的信息写入与该目标节点对应的CFG节点中,获得解析后的CFG节点,其中,源代码的数据类型包括多个AST节点类型及多个SSA节点类型;关联模块,用于将解析后的CFG节点进行关系的关联,以获得可用于数据流分析的CFG结构数据。在可选的实施方式中,关联模块包括:节点连接子模块,用于根据源代码解析CFG节点的对应关系,连接CFG节点;CFG边连接子模块,用于根据源代码的上下文的执行逻辑连接CFG边;AST边连接子模块,用于根据CFG节点之间的包含关系连接AST边。在可选的实施方式中,节点连接子模块,具体用于:循环遍历源代码中每行代码中所有CFG节点的对应关系,并将CFG节点进行连接与对应。在可选的实施方式中,装置还包括:漏洞分析模块,用于根据漏洞分析规则及数据流分析方法对CFG结构进行漏洞分析,获得漏洞检测结果。在可选的实施方式中,装置还包括:源代码分析模块,用于对源代码进行分析,获得对应的程序语言类型,其中,程序语言类型包括go语言;源代码输入模块,用于根据程序语言类型将源代码输入至对应的解析引擎中进行解析,其中,解析引擎包括go语言解析引擎。在可选的实施方式中,源代码输入模块,包括:分析子模块,用于对源代码进行词法分析及语法分析,获得该源代码的SSA结构数据。在可选的实施方式中,分析子模块具体用于:对源代码进行词法解析,转换成对应的标记序列Token,其中,标记序列Token包括标识符、关键字、分隔符、操作符、文字和注释中的至少一种;对标记序列Token进行语法分析,根据语法特征将标记序列Token构建为抽象语法树AST;根据抽象语法树,结合源代码的语法特征,将抽象语法树AST转换为SSA结构数据。第三方面,本专利技术实施例提供一种电子设备,包括:处理器、存储介质和总线,存储介质存储有处理器可执行的机器可读指令,当电子设备运行时,处理器与存储介质之间通过总线通信,处理器执行机器可读指令,以执行如前述实施方式任一方法的步骤。第四方面,本专利技术实施例提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器运行时执行如前述实施方式任一方法的步骤。基于上述任一方面,本申请在程序语言的源代码的数据类型包括的各个节点类型中查找与CFG节点对应的目标节点,并抽取该目标节点中的信息写入与之对应的CFG节点中,以此构成CFG结构。由此,CFG节点中包括有程序语言源代码的原路径信息和对应的包的名称,在通过CFG结构进行数据流分析时,即可实现源代码的跨包数据流检测。另外,在一些实施例中,通过CFG结构进行数据流分析,以实现对源代码的白盒测试,还可以降低漏洞的误报率。附图说明为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。图1为本申请实施例提供的数据流分析技术的系统架构图;图2为本申请实施例提供的SSA结构解析方法的流程图之一;图3为本申请实施例提供的图1中的步骤S103的子步骤流程图;图4为一种常见的CFG结本文档来自技高网...

【技术保护点】
1.一种SSA结构解析方法,应用于电子设备,其特征在于,所述方法包括:/n根据数据流解析规则,划分出多个CFG节点;/n针对每一个CFG节点,从程序语言的源代码的数据类型中查找与各CFG节点对应的目标节点,并抽取所述目标节点中的信息写入与该目标节点对应的CFG节点中,获得解析后的CFG节点,其中,所述源代码的数据类型包括多个AST节点类型及多个SSA节点类型;/n将所述解析后的CFG节点进行关系的关联,以获得可用于数据流分析的CFG结构数据。/n

【技术特征摘要】
1.一种SSA结构解析方法,应用于电子设备,其特征在于,所述方法包括:
根据数据流解析规则,划分出多个CFG节点;
针对每一个CFG节点,从程序语言的源代码的数据类型中查找与各CFG节点对应的目标节点,并抽取所述目标节点中的信息写入与该目标节点对应的CFG节点中,获得解析后的CFG节点,其中,所述源代码的数据类型包括多个AST节点类型及多个SSA节点类型;
将所述解析后的CFG节点进行关系的关联,以获得可用于数据流分析的CFG结构数据。


2.根据权利要求1所述的方法,其特征在于,所述将所述解析后的CFG节点进行关系的关联,包括:
根据所述源代码解析所述CFG节点的对应关系,连接所述CFG节点;
根据所述源代码的上下文的执行逻辑连接CFG边;
根据所述CFG节点之间的包含关系连接AST边。


3.根据权利要求2所述的方法,其特征在于,所述根据所述源代码解析所述CFG节点的对应关系,连接所述CFG节点,包括:
循环遍历所述源代码中所有CFG节点的对应关系,并将所述CFG节点进行连接与对应。


4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
根据漏洞分析规则及数据流分析方法对所述CFG结构数据进行漏洞分析,获得漏洞检测结果。


5.根据权利要求1所述的方法,其特征在于,在针对每一个CFG节点,从程序语言的源代码的数据类型中查找与各CFG节点对应的目标节点之前,所述方法还包括:
对所述源代码进行分析,获得对应的程序语言类型,其中,所述程序语言类型包括go语言;
根据所述程序语言类型将所述源代码输入至对应的解析引擎中进行解析,其中,所述解析引擎包括go语言解析引擎。


6.根据权利要求5所述的方法,其特征在于,所述根据所述程序语言类型将所述源代码输入至对应的解析引擎中进行解析,包括:
对所述源代码进行词法分析及语法分析,获得该源代码的SSA结构数据。


7.根据权利要求6所述的方法,其特征在于,对所述源代码进行词法分析及语法分析,获得该源代码的SSA结构数据,包括:
对所述源代码进行词法解析,转换成对应的标记序列Token,其中,所述标记序列Token包括标识符、关键字、分隔符、操作符、文字和注释中的至少一种;
对所述标记序列Token进行语法分析,根据语法特征将标记序列Token构建为抽象语法树AST;
根据所述抽象语法树,结合源代码的语法特征,将所述抽象语法树AST转换为SSA结构数据。


8.一种SSA结构解析装置,应用于电子设备,其特征在于,所述装置包括:
CFG节点划分模块,用于根据数据流解析规则,划分出多个CFG节点;
解析模块,用于针对每一个C...

【专利技术属性】
技术研发人员:张煜昆
申请(专利权)人:北京嘀嘀无限科技发展有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1