[发明专利]基于二进制程序模块化的开源组件检测方法在审
申请号: | 202210863358.1 | 申请日: | 2022-07-20 |
公开(公告)号: | CN115408700A | 公开(公告)日: | 2022-11-29 |
发明(设计)人: | 刘胜利;郭茜茜;刘明;杨启超;王家丰;张璨;邵文强;吕思欧 | 申请(专利权)人: | 中国人民解放军战略支援部队信息工程大学 |
主分类号: | G06F21/57 | 分类号: | G06F21/57 |
代理公司: | 郑州明华专利代理事务所(普通合伙) 41162 | 代理人: | 王明朗 |
地址: | 450000 河*** | 国省代码: | 河南;41 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 二进制 程序 模块化 组件 检测 方法 | ||
1.一种基于二进制程序模块化的开源组件检测方法,其特征在于:包括二进制程序模块化和开源组件识别,其中二进制程序模块化包括以下内容:
(1)对二进制程序进行函数地址提取和函数调用图创建,通过函数地址和函数有向调用关系的提取构造模块化步骤的输入图;
(2)使用基于模块度改进的BCM算法对二进制程序模块进行划分;
开源组件识别包括以下内容:
(1)特征选择与提取:针对二进制程序的每个模块,提取每个模块中的字符类型及函数的复杂分支序列作为提取特征,其中字符类型包括字符串字面量、字符串数组和导出函数名;对于函数的复杂分支序列,将switch/case、if/else的分支序列作为选择的特征;
(2)模块粒度的开源组件识别:将二进制程序每个模块的提取特征与源码特征进行比对,检测出开源组件所在的二进制模块。
2.根据权利要求1所述的基于二进制程序模块化的开源组件检测方法,其特征在于:对二进制程序模块划分包括以下步骤:
Ⅰ、初始假设每个函数都是一个独立的模块,对任意相邻的节点i和节点j,计算将节点i加入其邻居节点j所在模块C时对应的模块度增量ΔQ,
式中:Si,in表示节点i与模块C内部函数连边权重之和;m是网络中所有边权重之和;Wc是模块C内部所有边的权重和;Sc是所有与模块C内部的函数相关联的边的权重和;
然后计算节点i与所有邻居节点的模块度增量,选出其中最大的一个;当该值为正时,把节点i加人相应的邻居节点所在的模块;否则,节点i留在原模块中;
重复进行,直至不再出现合并现象,划分出第一层模块;
Ⅱ、基于Ⅰ形成的模块结果,重复Ⅰ中的方法对新的模块结果进行模块划分,得到第二层模块,其中模块之间连边的权重是两个模块之间所有节点连边的权重和;
重复直至网络模块度不再增加,完成二进制程序模块划分。
3.根据权利要求1所述的基于二进制程序模块化的开源组件检测方法,其特征在于:从二进制模块中提取字符串的过程为:通过模块中每个函数的地址获取该函数的所有片段,遍历每个函数片段中的所有指令,遍历该指令的数据引用地址,当该地址存放的是字符串时,将字符串的地址及值添加到字符串列表中。
4.根据权利要求1所述的基于二进制程序模块化的开源组件检测方法,其特征在于:从二进制程序中提取导出函数名的过程为:首先需要获取模块中的所有函数名,然后通过遍历整个二进制程序中的导出函数名的方式,保留模块中的导出函数名。
5.根据权利要求1所述的基于二进制程序模块化的开源组件检测方法,其特征在于:开源组件的对比流程为:遍历待匹配的特征类型,获取模块和开源组件的该类型特征;遍历获取的特征,将匹配的特征添加到匹配特征列表中,当匹配的特征得分超过阈值,将该类型特征添加到匹配的特征类型列表中,此列表非空,则该模块复用开源组件。
6.根据权利要求5所述的基于二进制程序模块化的开源组件检测方法,其特征在于:在开源组件识别时,
a、对于字符类型的特征,当二进制程序模块与开源组件中的字符特征一致时,则判定特征为匹配;
b、对于函数的复杂分支序列,通过最长公共子序列长度匹配if/else特征,当最长公共子序列长度超过设定阈值则判定为匹配。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国人民解放军战略支援部队信息工程大学,未经中国人民解放军战略支援部队信息工程大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210863358.1/1.html,转载请声明来源钻瓜专利网。