首页 / 专利库 / 软件 / 软件 / 基于函数模板的软件行为分析方法

基于函数模板的软件行为分析方法

阅读:835发布:2021-06-16

专利汇可以提供基于函数模板的软件行为分析方法专利检索,专利查询,专利分析的服务。并且基于函数模板的 软件 行为分析方法,属于信息安全领域。包括三个步骤,分别为预处理、建模和检测,其中预处理通过插入自定义的分割函数,实现对软件源代码标记,从而获得已标记软件源代码和已标记软件;建模包括根据已标记源代码中函数调用关系建立软件源代码函数转移图,并通过运行已标记软件,监控其调用的API,从而获得软件API最小功能 块 转移图;检测包括通过对待测软件源代码进行预处理、建模,获得待测软件源代码函数转移图和待测软件API最小功能块转移图,并通过将其与建模生成的软件源代码函数转移图和软件API最小功能块转移图进行比对,判断待测软件行为是否异常。本 发明 方法简单易行,可有效地实现软件行为的监测。,下面是基于函数模板的软件行为分析方法专利的具体信息内容。

1.基于函数模板的软件行为分析方法,其特征在于,包含以下步骤:
步骤1:预处理;
步骤1.1:在软件源代码的每两个函数间插入自定义的分割函数,分割函数模拟软件断点的运行状态,将每个分割函数作为一个标记,经过标记的软件源代码称为已标记源代码,相应的软件称为已标记软件;
步骤2:建模;
步骤2.1:概念定义;
节点:包括函数、函数所属的源文件名和同一函数的连续运行次数;本方法所述节点定义为:
[node]:function[file]:xxx.cpp{[constitute]:n}
其中,[node]为节点标记,表示以下内容为节点信息,function为该节点的函数名;
[file]为源代码文件标记,表示冒号后xxx.cpp为函数所属源代码文件名;{…}内为节点可选内容,当函数运行次数>1时,标记[constitute]:n,n为函数运行连续运行次数;
跳转:在运行过程中,从一个节点执行到下一个节点的过程,称为跳转;一个节点可以跳转到多个节点;
步骤2.2:获得软件源代码函数转移图;
根据所述已标记源代码中函数调用关系,生成软件源代码函数转移图;在生成的软件源代码函数转移图中,将已标记软件源代码中第一个被调用函数视为首个运行函数,该函数所在节点称为入口;在生成的软件源代码函数转移图中,存在无跳转的节点,称为出口;
出口表示软件程序或一组函数的结束;
步骤2.3:获得软件API最小功能转移图;
运行所述已标记软件,应用API调用监视工具对所调用的API序列进行监控,得到已标记软件的API序列;用分割函数运行所调用API序列作为分割序列来分割所述已标记软件运行所调用的API序列;被分割序列分割形成的API序列片段,称为API功能块;将已标记软件调用的API序列根据序列的上下文内容用API功能块表示,称为软件API功能块转移图;
多次运行所述已标记软件,获取每一组API功能块,当运行结果满足API功能块转移图涵盖的API序列/本次运行中获取的API序列x100%≥95%,停止运行已标记软件;
对比分析获取的每一组API功能块,取最大公共部分作为该组API最小功能块,形成软件API最小功能块转移图;
将所述建模生成的软件源代码函数转移图和软件API最小功能块转移图作为待测软件的软件行为模板;
步骤3:检测;
步骤3.1:对可能受到攻击或篡改的待测软件源代码进行步骤1中所述预处理和步骤2中所述建模,从而获得待测软件源代码函数转移图和待测软件API最小功能块转移图;
步骤3.2:将待测软件源代码函数转移图与步骤2中所述建模生成的软件函数转移图进行比对,检验节点、跳转、入口、出口是否一致,当待测软件源代码函数转移图出现软件源代码函数转移图中不存在的路径,或者待测软件源代码函数转移图的路径文件内容与软件源代码函数转移图中不一致时,及时进行报警;
步骤3.3:待测软件源代码函数转移图检测无异常的基础上,将待测软件API最小功能块转移图与软件API最小功能块转移图进行比对,如果待测软件API最小功能块转移图与软件API最小功能块转移图不匹配,则及时进行报警。

说明书全文

基于函数模板的软件行为分析方法

技术领域:

[0001] 本发明涉及一种软件行为分析技术,具体涉及一种软件行为分析方法,属于信息安全领域。

背景技术

[0002] 在信息化发展的今天,人们在解决实际问题时候,对软件的需求也越来越大,这也促使了软件产业的进一步发展。软件随着人们需求的增加,其功能也逐渐复杂,规模也越发庞大,与此同时,软件的安全不仅仅关系到我们生活的点点滴滴,也与社会、国家的安全有着密不可分的联系。
[0003] 但是并非所有的软件都能按软件编写者的意图正常运行,有的软件在受到攻击时出现功能异常,在提供相应功能的同时,可能由于存在代码缺陷或源代码被恶意修改,从而带来严重的后果。
[0004] 在金融监管、金融信息、国家重点行业等的信息系统模式、监管信息、安全保障等信息化建设中,人们恶意操作软件所产生恶意行为和软件运行中产生恶意行为都难以用道德或法律的方式进行约束。因此,在计算机及网络中建立一套软件行为规则或行为模板成为了研究者关注的重点。
[0005] 软件行为研究的目标是通过行为分析和学习进行行为建模和检测,依照建模方式主要分为三种方法:静态建模方法、动态建模方法和混合建模方法。静态建模方法是依靠并分析源代码的执行路径建立正确的行为模式,检测时对可能存在漏洞的代码序列进行警报。动态建模方法为在软件运行的过程中,通过加载的方法对进行学习、建模、检测。混合建模方法综合以静态建模为主,再利用动态建模技术对模型进行辅助修订。
[0006] 目前常采用隐尔科夫链的方法建立软件行为的状态转移图,但隐马尔科夫链的方法对每个状态采用一个模糊的概念,并非一个确定的数值或状态,因此在检测恶意软件行为方面存在不足。

发明内容

[0007] 针对上述指出的现有软件行为技术研究的不足,本发明提出了一种基于函数模板的软件行为分析方法,通过建立软件行为模板实现对软件行为的有效评估。
[0008] 如图1所示,本发明中所述基于函数模板的软件行为分析方法包括预处理、建模和检测,其中预处理是对软件源代码进行预处理操作;建模即对软件行为进行学习并建立软件行为模板;检测即对软件行为进行检测。
[0009] 所述基于函数模板的软件行为分析方法包括以下步骤:
[0010] 步骤1:预处理。
[0011] 步骤1.1:在软件源代码的每两个函数间插入自定义的分割函数,分割函数是为了模拟软件断点的运行而插入源代码中。将每个分割函数作为一个标记,经过标记的软件源代码称为已标记源代码,相应的软件称为已标记软件。
[0012] 步骤2:建模,所述建模是通过对所述预处理中获得的已标记源代码及已标记软件进行分析,获得软件源代码函数转移图和软件API最小功能转移图,并以此作为该待测软件的软件行为模板。
[0013] 步骤2.1:首先对所述建模中涉及的概念进行定义:
[0014] 节点:本方法以函数为单位进行研究,节点的定义包括函数、函数所属的源文件名和同一函数的连续运行次数。本方法所述节点定义为:
[0015] [node]:function[file]:xxx.cpp{[constitute]:n}
[0016] 其中,[node]为节点标记,表示以下内容为节点信息。function为该节点的函数名。[file]为源代码文件标记,表示冒号后xxx.cpp为函数所属源代码文件名。{…}内为节点可选内容,当函数运行次数>1时,标记[constitute]:n,n为函数运行连续运行次数。
[0017] 跳转:在运行过程中,从一个节点执行到下一个节点的过程,称为跳转。一个节点可以跳转到多个节点。
[0018] 步骤2.2:获得软件源代码函数转移图。
[0019] 基于所述定义,根据所述已标记源代码中函数调用关系,生成软件源代码函数转移图。在生成的软件源代码函数转移图中,将已标记软件源代码中第一个被调用函数视为首个运行函数,该函数所在节点称为入口。在生成的软件源代码函数转移图中,存在无跳转的节点,称为出口。出口表示软件程序或一组函数的结束。
[0020] 步骤2.3:获得软件API最小功能块转移图。
[0021] 运行所述已标记软件,应用API(Application Programming Interface,应用程序编程接口)调用监视工具对所调用的API序列进行监控,得到已标记软件的API序列。因为位于函数间的分割函数在运行过程中所调用的API序列相同,所以称分割函数运行所调用API序列为分割序列。分割序列作为划分标记,用于将标记并分割所述已标记软件运行所调用的API序列。被分割序列分割形成的API序列片段,称为API功能块。将已标记软件调用的API序列根据序列的上下文内容用API功能块表示,称为已标记软件API功能块转移图。
[0022] 由于计算机运行过程中,代码运行环境、加载状态、运行状态都有所改变,多次运行所述已标记软件,获取每一组API功能块,当运行结果满足以下条件,停止运行已标记软件:
[0023] 已标记软件API功能块转移图涵盖的API序列/本次运行中获取的API序列x100%≥95%
[0024] 对比分析获取的每一组API功能块,取最大公共部分作为该组API最小功能块,形成软件API最小功能块转移图。
[0025] 将所述建模生成的软件源代码函数转移图和软件API最小功能块转移图作为待测软件的软件行为模板。
[0026] 步骤3:检测。
[0027] 步骤3.1:对可能受到攻击或篡改的待测软件源代码进行步骤1中所述预处理和建模处理,从而获得待测软件源代码函数转移图和待测软件API最小功能块转移图。
[0028] 步骤3.2:将待测软件源代码函数转移图与步骤2中所述建模生成的软件源代码函数转移图进行比对,检验节点、跳转、入口、出口是否一致,当待测软件源代码函数转移图出现软件源代码函数转移图中不存在的路径,或者待测软件源代码函数转移图的路径文件内容与软件源代码函数转移图中不一致时,及时进行报警。
[0029] 步骤3.3:待测软件源代码函数转移图检测无异常的基础上,将待测软件API最小功能块转移图与软件API最小功能块转移图进行比对,如果待测软件API最小功能块转移图与软件API最小功能块转移图不匹配,则及时进行报警。
[0030] 本发明通过对软件源代码进行分析,获得软件行为模板并以此作为待测软件的行为规则。将待测软件真实运行时获得的待测软件源代码函数转移图和待测软件API最小功能块转移图与生成的软件行为模板进行比对,判断软件行为是否异常。本发明方法简单易行,可有效的实现软件行为检测。附图说明
[0031] 图1:基于函数模板的软件行为分析方法流程图
[0032] 图2:RSS阅读器软件行为模板生成过程图。
[0033] 其中a为RSS阅读器软件函数预处理,b为RSS阅读器软件行为模板建模。

具体实施方式

[0034] 下面结合附图说明本发明的具体实施方式中基于函数模板的软件行为分析方法,但本发明并不限于以下实施例
[0035] 实施例1
[0036] 如图2所示,以对RSS阅读器软件进行检测为例。
[0037] 步骤1:预处理。
[0038] 步骤1.1:在RSS阅读器软件源代码的每两个函数间插入分割函数int3,分割函数int3模拟软件断点的运行,将每个分割函数int3作为一个标记,经过标记的RSS阅读器软件源代码称为已标记RSS阅读器源代码,相应的软件称为已标记RSS阅读器软件(见图2(a))。
[0039]
[0040]
[0041] 步骤2:建模。
[0042] 步骤2.1:首先对所述建模涉及的概念进行定义:
[0043] 节点:本方法以已标记RSS阅读器源代码中函数为单位进行分析,节点的定义包括已标记RSS阅读器源代码中函数、已标记RSS阅读器源代码中函数所属的源文件名和已标记RSS阅读器源代码中同一函数的连续运行次数。图2(a)中,CAgileReaderApp、InitInstance、CAgileReaderDoc……~CMainFramew为已标记RSS阅读器软件源代码中的函数。其中,函数CAgileReaderApp所属的源文件为AgileReader.cpp,且函数CAgileReaderApp多次被调用,用所述节点定义即表示为:
[0044] [node]:CAgileReaderApp[file]:AgileReader.cpp[constitute]:3[0045] 其中,node为函数所在节点,file为函数所在文件名。当函数运行次数>1时,标记[constitute]:n,n为函数运行连续运行次数。CAgileReaderApp[file]:AgileReader.cpp为[node]:CAgileReaderApp[file]:AgileReader.cpp的子函数。AgileReader.cpp函数连续运行次数为3次,大于1次,则以constitute标记符号进行标记。[constitute]:3表示函数CAgileReaderApp在RSS阅读器软件运行中,该函数连续运行次数最大值为3。
[0046] 跳转:在运行过程中,从一个节点执行到下一个节点的过程,称为跳转。一个节点可以跳转到多个节点。[node]:CAgileReaderApp[file]:AgileReader.cpp[constitute]:3可以跳转到[node]:InitInstance[file]:AgileReader.cpp和[node]:CAgileReaderDoc[file]:AgileReaderDoc.cpp。
[0047] 步骤2.2:获得待测软件源代码函数转移图。
[0048] 基于所述定义,根据所述已标记RSS阅读器源代码中函数调用关系,生成RSS阅读器软件源代码函数转移图。在生成的RSS阅读器软件源代码函数转移图中,将已标记RSS阅读器软件源代码中第一个被调用函数CAgileReaderApp视为首个运行函数,该函数所在的节点称为入口。节点[node]:CAgileReaderApp[file]:AgileReader.cpp[constitute]:3为软件RSS阅读器运行的起始点,则[node]:CAgileReaderApp[file]:AgileReader.cpp[constitute]:3为图的入口。
[0049] 在生成的RSS阅读器软件源代码函数转移图中,存在无跳转的节点,称为出口。出口表示软件程序或一组函数的结束。[node]:~CMainFrame[file]:MainFrm.cpp为无跳转节点,则为图的出口。
[0050] 步骤2.3:获得RSS阅读器软件API最小功能块转移图。
[0051] 运行所述已标记RSS阅读器软件,应用API调用监视工具对所调用的API序列进行监控,得到已标记RSS阅读器软件的API序列。因为位于函数间的分割函数int3在运行过程中所调用的API序列相同,所以称分割函数int3运行所调用API序列为int3分割序列。已标记RSS阅读器软件运行所调用的API序列被int3分割序列分为已标记RSS阅读器软件API序列片段,称为RSS阅读器软件API功能块。将已标记RSS阅读器软件调用的API序列根据序列的上下文内容用已标记RSS阅读器软件API功能块表示,称为RSS阅读器软件API功能块转移图。如[node]:CAgileReaderApp[file]:AgileReader.cpp[constitute]:3运行时所调用的API序列为
[0052] SetBkColor SH
[0053] GetFolderPathW
[0054] GetWindowRgnBox
[0055] GetWindowDC
[0056] SetBkMode
[0057] 由于计算机运行过程中,代码运行环境、加载状态、运行状态都有所改变,通过四次运行,运行结果满足待测RSS阅读器软件API功能块转移图涵盖的API序列/第四次待测软件运行中获取的API序列x100%≥95%,停止运行已标记RSS阅读器软件。
[0058] 其中,[node]:CAgileReaderApp[file]:AgileReader.cpp[constitute]:3的对应API序列分别为:
[0059]
[0060] 将获取的API序列的最大公共部分,即RSS阅读器软件API功能块的最大公共部分,作为该组API最小功能块。本组公共序列为
[0061] SetBkColor SH
[0062] GetFolderPathW
[0063] GetWindowRgnBox
[0064] GetWindowDC
[0065] 该部分为[node]:CAgileReaderApp[file]:AgileReader.cpp[constitute]:3对应的API最小功能转块,形成的RSS阅读器软件API最小功能块转移图如图2(b)所示。
[0066] 将生成的RSS阅读器软件源代码函数转移图和RSS阅读器软件API最小功能块转移图作为待测RSS阅读器软件行为模板。
[0067] 步骤3:检测。
[0068] 步骤3.1:对可能受到攻击或篡改的待测RSS阅读器软件源代码进行步骤1中所述预处理和建模处理,从而获得待测RSS阅读器软件源代码函数转移图和待测RSS阅读器软件API最小功能块转移图。
[0069] 步骤3.2:将待测RSS阅读器软件源代码函数转移图与RSS阅读器软件源代码函数转移图进行比对,检验节点、跳转、入口、出口是否一致。
[0070] 如RSS阅读器软件源代码中[node]:CAgileReaderApp[file]:AgileReader.cpp[constitute]:3,为连续运行次数最大为3,
[0071] 若待测RSS阅读器软件源代码中[node]:CAgileReaderApp[file]:AgileReader.cpp[constitute]:3小于等于3,则检测正常;大于3,则检测异常,及时进行报警。
[0072] 如RSS阅读器软件源代码函数转移图的顺序为[node]:CAgileReaderApp[file]:AgileReader.cpp[constitute]:3跳转到[node]InitInstance[file]:AgileReader.cpp、[node]:CAgileReaderDoc[file]:AgileReaderDoc.cpp,
[0073] 若待测RSS阅读器软件源代码函数转移图为CAgileReaderApp[file]:AgileReader.cpp[constitute]:3跳转到[node]InitInstance[file]:AgileReader.cpp、[node]:CAgileReaderDoc[file]:AgileReaderDoc.cpp,检测无异常,进入步骤3.3;
[0074] 若待测RSS阅读器软件源代码函数转移图为CAgileReaderApp[file]:AgileReader.cpp[constitute]:3跳转到函数[node]InitInstance[file]:
AgileReader.cpp、[node]:CAgileReaderDoc[file]:AgileReaderDoc.cpp、[node]OnMove[file]:MainFrm.cpp,则与RSS阅读器软件源代码函数转移图不匹配,及时进行报警。
[0075] 步骤3.3:待测RSS阅读器软件源代码函数转移图检测无异常的基础上,将待测RSS阅读器软件API最小功能块转移图与RSS阅读器软件API最小功能块转移图进行比对。
[0076] 以待测RSS阅读器软件API最小功能块转移图中的AgileReader.cpp函数所在节点检测为例说明:
[0077] 如已标记RSS阅读器软件API最小功能块转移图中AgileReader.cpp函数所在节点对应的API最小功能块为
[0078] SetBkColor SH
[0079] GetFolderPathW
[0080] GetWindowRgnBox
[0081] GetWindowDC
[0082] 若待测RSS阅读器软件的AgileReader.cpp函数所在节点对应的API最小功能块为[0083] SetBkColor SH
[0084] GetFolderPathW
[0085] GetWindowRgnBox
[0086] GetWindowDC
[0087] 则待测RSS阅读器软件与RSS阅读器软件的API最小功能块转移图相匹配,运行无异常;
[0088] 若待测RSS阅读器软件的AgileReader.cpp函数所在节点对应的API最小功能块为[0089] SetBkColor SH
[0090] GetFolderPathW
[0091] GetUpdateRect(0x001002fc,0x0018e2f0,FALSE)
[0092] BeginPaint(0x001002fc,0x0018e304)
[0093] GetWindowRgnBox
[0094] GetWindowDC
[0095] 则待测RSS阅读器软件API最小功能块转移图中AgileReader.cpp函数所在节点对应的API最小功能块增加了
[0096] GetUpdateRect(0x001002fc,0x0018e2f0,FALSE)
[0097] BeginPaint(0x001002fc,0x0018e304)
[0098] 则待测RSS阅读器软件与RSS阅读器软件API最小功能块转移图不匹配,软件运行异常,及时进行报警。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈