[发明专利]基于机器学习的静态程序插桩检测方法及装置有效
申请号: | 202211357366.5 | 申请日: | 2022-11-01 |
公开(公告)号: | CN115576840B | 公开(公告)日: | 2023-04-18 |
发明(设计)人: | 刘昱玮;余媛萍;贾相堃;苏璞睿 | 申请(专利权)人: | 中国科学院软件研究所 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06N20/00;G06N3/0464;G06N3/08 |
代理公司: | 北京君尚知识产权代理有限公司 11200 | 代理人: | 陈艳 |
地址: | 100190 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 机器 学习 静态 程序 检测 方法 装置 | ||
1.一种基于机器学习的程序插桩检测方法,其特征在于,所述方法包括:
获取目标程序,并对所述目标程序进行插桩,得到一个二进制文件;
将所述二进制文件转换为一中间语言表示;
基于所述中间语言表示,计算所述二进制文件中各基本块的特征向量,并将所述特征向量送入机器学习模型,以识别每一基本块的实际插桩结果;其中,所述基于所述中间语言表示,计算所述二进制文件中各基本块的特征向量,包括:
基于所述中间语言,选取每一基本块中的特征;所述特征包括:指令操作码、指令操作数和指令序列;其中,所述指令序列为所述指令操作码按照所述基本块中指令出现顺序进行排序的序列;
根据操作码编码表,获取所述指令操作码的序号,并基于所述序号,得到所述指令操作码的特征向量;其中,所述操作码编码表基于训练集中各指令操作码的出现频率和字母顺序构建;
根据所述指令操作数的操作数长度,获取所述指令操作数的特征向量;
根据基本块中指令操作码编码的向量,计算所述指令序列的特征向量;
基于所述指令操作码的特征向量、所述指令操作数的特征向量与所述指令序列的特征向量,得到所述二进制文件中各基本块的特征向量;
基于所述目标程序和所述中间语言表示,生成代码属性图,并对所述代码属性图使用图神经网络学习,将学习后的节点特征向量进行线性变换,以根据各节点的得分判断每一基本块的预期插桩结果;其中,所述代码属性图中的节点为基本块,所述代码属性图中的边基于基本块间的控制流和数据流依赖关系构建;
根据每一基本块的所述实际插桩结果与所述预期插桩结果,得到所述目标程序的插桩检测结果。
2.如权利要求1所述的方法,其特征在于,所述中间语言表示包括:LLVM IR中间语言表示。
3.如权利要求1所述的方法,其特征在于,所述操作码包括:alloca、store、load和icmp。
4.如权利要求1所述的方法,其特征在于,所述操作数包括:立即数和变量。
5.如权利要求1所述的方法,其特征在于,所述基于所述目标程序和所述中间语言,生成所述二进制文件的代码属性图,包括:
基于所述二进制文件和所述中间语言,生成所述二进制文件的抽象语法树、控制流图和程序依赖图;其中,所述控制流图中基本块信息包括该基本块的出度与入度、指令数量和是否包含插桩代码,所述程序依赖图中信息包括:基本块的数据依赖和控制依赖信息;
将抽象语法树,控制流图和程序依赖图合并为代码属性图。
6.如权利要求1所述的方法,其特征在于,所述根据每一基本块的所述实际插桩结果与所述预期插桩结果,得到所述目标程序的插桩检测结果,包括:
逐个基本块比较实际插桩结果与预期插桩结果;
如果每一基本块的比较结果都是相符,则所述插桩检测结果为插桩正确;
如果至少一个基本块的比较结果是不相符,则所述目标程序的插桩检测结果为插桩错误。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学院软件研究所,未经中国科学院软件研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202211357366.5/1.html,转载请声明来源钻瓜专利网。