基于后缀树的二进制可执行代码的克隆检测算法
- 格式:pdf
- 大小:1.51 MB
- 文档页数:7
国产化平台自主可控测试工具研究设计沈雷;左芸;解群;李翔【摘要】国产计算机系统的自主可控评价可从两方面考虑,一是知识产权自主可控;二是运行安全可靠.文章对国产计算机系统的自主可控评估方法开展研究.重点关注软件自主可控度的评价,对软件代码克隆检测、软件演化分析及溯源分析等方法进行分析,给出了软件自主可控测试工具的设计方案.【期刊名称】《数字技术与应用》【年(卷),期】2019(037)002【总页数】5页(P154-158)【关键词】国产化;自主可控;软件测试【作者】沈雷;左芸;解群;李翔【作者单位】中国电子科技集团公司第三十二研究所,上海 201808;中国电子科技集团公司第三十二研究所,上海 201808;中国电子科技集团公司第三十二研究所,上海 201808;中国电子科技集团公司第三十二研究所,上海 201808【正文语种】中文【中图分类】TP3111 概述随着国家“自主可控”规划的推进,近年来国产软硬件得到快速发展。
硬件方面,龙芯、申威、飞腾等国产处理器经历多个版本的改进升级,性能稳步提升,与国外主流处理器的差距越来越小。
软件方面,以中标麒麟操作系统、锐华操作系统、达梦数据库为代表的国产基础软件也在军政各个行业得到广泛应用,自主可控计算机环境已经逐渐形成。
本文通过分析国产计算机环境的特点,提出一种自主可控测试工具的设计方案,用于对国产计算机系统软硬件自主可控程度进行测试。
2 自主可控发展背景及现状数年前,我国军事装备的基础设备及其核心技术基本靠进口,无法从根本上保障信息的安全,国民经济和国防安全均存在安全隐患。
因此,软硬件自主可控的国产化改进得到了国家的高度重视,随着“自主可控”规划的推进,国内自主可控计算机环境已经逐渐形成,国产关键软硬件产品已开始得到应用(表1)。
目前,国产计算机环境的应用面、规模相对较小,应对复杂装备环境时,兼容性、综合性能、可靠性验证不充分,缺乏有效的诊断分析工具、测试评估环境。
基于二进制代码分析的恶意软件检测技术研究恶意软件对于计算机系统的威胁已经广为人知,作为计算机安全领域的热门研究课题,大量的技术手段被开发出来用于检测和处理此类威胁。
其中,基于二进制代码分析的恶意软件检测技术因其高效、准确等优点逐渐受到重视。
一、二进制代码分析二进制代码是计算机中的一种计算机程序语言。
一般来说,通过编译器将高级语言编写成二进制代码,然后在计算机上运行。
由于计算机能够直接理解二进制代码,因此二进制代码被用于在计算机系统中执行各种任务。
二进制代码的独特性质决定了它在恶意软件检测过程中的重要地位。
二进制代码分析是指通过对二进制文件的逆向工程实现对程序的检测和分析。
在对二进制代码进行分析时,需要先将其反编译成可读的汇编指令,再通过对汇编指令进行分析,识别并提取出其中的信息和特征。
因此,二进制代码分析需要依靠一些特定的工具和方法。
二、基于二进制代码分析的恶意软件检测技术1、静态分析静态分析是指在不运行恶意软件程序的情况下,通过对二进制代码进行分析和检测。
静态分析主要依赖一个称为反汇编器的工具,该工具可以将二进制代码反汇编为汇编指令。
在静态分析中,研究者一般会定义一些规则来识别和分类不同的恶意软件。
这些规则可以包括诸如程序中使用的API、文件及其版本呈现的模式等等。
此外,还可以使用规则来检测恶意软件是否包含病毒特征。
2、动态分析动态分析是指在运行恶意软件程序的过程中,使用监控工具来检测和分析程序行为。
动态分析可以获得更加全面和详细的信息,然而它的成本和复杂度也很高。
目前动态分析主要依赖虚拟机技术。
在虚拟机中运行恶意软件程序时,可以监控和记录程序在虚拟机中的行为。
例如,可以记录程序运行时所打开的文件和网络连接,以及读取和写入这些文件和流量的方式。
然后,可以通过对这些信息的分析和比对,来确定程序是否恶意。
3、混合分析混合分析是指将静态和动态两种分析方法进行结合。
通过混合分析,既可以获得静态分析和动态分析各自的优点,也可以弥补各自缺点。
117基于后缀树的相似代码检测方法的研究禤静1,2(1.广西大学计算机与电子信息学院,广西南宁530004;2.南宁职业技术学院信息工程学院,广西南宁530008)摘要:通常以词或字符为单位构造后缀树进行代码检测,空间开销大,同时增加字符串对比数量。
针对该问题,文章设计了一种基于后缀树的代码相似度检测方法,应用Rabin 指纹算法以句子为单位生成的指纹序来构造后缀树,并结合RMQ 提取后缀树指纹公共子串长度,以此计算出代码的相似度。
关键词:后缀树;Rabin 指纹算法;相似代码检测中图分类号:文献标识码:A文章编号:1673-1131(2016)10-0117-020引言后缀树是一种数据结构,因在处理字符串匹配问题上速度快,也常被用于软件源代码的相似度检测上。
通常以词或字符为单位构造后缀树进行代码检测,空间开销大,同时增加字符串对比数量。
针对该问题,本文设计了一种基于后缀树的代码相似度检测方法,即应用Rabin 指纹算法以句子为单位生成的指纹序来构造后缀树,并结合RMQ (Range Minimum/Maximum Query )算法提取后缀树指纹公共子串长度,以此计算出代码的相似度。
与传统基于后缀树的方法相比,该方法以代码句子的指纹代替以代码词或字符去构造后缀树,大大缩小了后缀树的体积,并且避免了昂贵的字符串比较。
从而能提高整个检测过程的运行效率,降低内存占用。
1Rabin 指纹算法Rabin 指纹算法[1]是由美国哈佛大学教授迈克尔.拉宾(Michael Rabin )提出的一种非对称加密算法。
算法的实现思想是将明文文本转成由0、1组成的二进制串S ,由S 构造出的一个多项式A 与另一个不可约的k 度多项式P 进行取模运算,得到的结果即是S 的指纹。
Rabin 指纹算法属于线性时间计算过程,即生成指纹计算的时间复杂度为首先去除源代码的注释和空行;然后使用Eclipse 的JDT API 中Eclipse AST 的相关工具提取出代码类方法片段,并从命名代码中的变量名。
摘要近几年,互联网的普及给人们的生活带来了极大的便利,各类软件层出不穷,数量爆发式增长,随之也带来大量问题,如代码剽窃、恶意代码肆意等。
为解决这类问题,逆向工程成为一项必不可少的技术,通过识别逆向后的未知代码与已知代码的重复或相似片段,可以检测软件侵权、恶意代码变种等问题。
然而,由于各种混淆工具越来越成熟,即便逻辑相似的程序,经过工具混淆后,逆向出的反汇编代码不论在操作码还是程序结构上都差别甚大。
现有的二进制相似性检测技术,如判断控制流程图同构、最长公共子序列判断文本相似等,已不能抵抗混淆工具的攻击。
因此,研究一种抗混淆的二进制克隆检测方法成为软件版权保护领域的重要方向。
设计并实现了一个针对C语言的抗混淆二进制克隆检测系统。
首先,对混淆后的二进制进行逆向,将函数转换为能描述其功能特征和混淆特征的数字向量,包括控制流程图特征、描述流程图基本块的操作码特征和常量特征,即将控制流程图(Control Flow Graph)转换为属性特征控制流程图(Attribute Control Flow Graph)。
其次,使用XGBoost算法学习不同混淆策略的向量特征,并保存模型用于对未知混淆策略的向量分类检测。
随后,对于不同的混淆策略,系统对特征向量进行针对性的脱壳处理,并基于曼哈顿距离算法设计了更适合本系统的相似度计算方法,用于对脱壳后的特征向量克隆检测。
最后,针对系统的实际情况,对XGBoost模型参数进行了优化,提升了分类检测精度。
对抗混淆克隆检测,相比于传统代码克隆检测算法,以及近来流行的自然语言处理算法,系统在性能、准确率及可扩展性上都有较大的优势。
实验结果表明,数据集21249个函数,XGBoost模型学习时间约24s,平均检测速率41us/func;XGBoost算法分类检测精度达87.56%,优化后达88.80%;对指令替换、控制流平展和虚假控制流三种常见混淆方式,克隆检测准确率分别达99.50%、89.44%和77.16%。
克隆代码检测在代码搜索中的应用研究作者:黄丽韶来源:《无线互联科技》2017年第19期摘要:文章设计和开发的代码搜索引擎首先通过扩展Heritrix,构建本地代码库,利用ANTLR工具对本地代码库的Java源文件进行解析;其次,基于程序抽象语法树(AST)从方法级别和类级别检测克隆代码,对源代码中的方法(method)或者类(class)进行分类;再次,利用ASTParser对本地代码库扫描,抽取程序代码的语法信息,并利用Lucene对含有语法信息的文件建立索引和搜索模块。
实验比较结果表明,实现的代码搜索引擎可优化已有的代码搜索引擎的搜索结果,并且对于搜索时间没有显著的影响,从而可更有效地帮助程序员查找与复用已有代码。
关键词:Java源;代码搜索;ANTLR;克隆;AST立足于软件开发领域,开源软件变得愈发生命力顽强,这是因为伴随科技高速发展,程序开发人员开源的理念越发加强,促使开源网站如雨后春笋般层出不穷,高质量的开源项目数量不断增长,开源网站访问量激增,其中全球最大最著名的开源网站已经收录了448 706个开源项目,并被软件开发人员不断搜索、学习和完善[1]。
1 克隆代码检测在代码搜索中的设计与实现1.1 需求分析软件开发人员和编程爱好人员试图搜索高质量的示例代码来学习其中的算法,学习应用程序编程接口(Application Programming Interface,API)文档的使用,加快开发效率。
他们不仅想基于全文来搜索源代码,还想根据不同目的通过包名、类名、方法名等形式来搜索。
该系统要求为用户提供一个友好的搜索界面和多种搜索方式,比如按照文本来搜索,按照包名、类名、方法定义和方法调用搜索。
当用户以方法名或类名来搜索源代码时,搜索结果对克隆方法和克隆类分类显示,并根据用户搜寻目的给出最有代表性的摘要[2]。
1.2 系统设计本文的源代码搜索引擎系统设计,分为前端用户和后台维护两部分。
查询用户主要是选择查询方式和输入搜索关键字,后端用户获取数据、处理数据、维护系统,维护人员首先通过Heritrix获取源代码,然后对源代码库中的克隆代码进行检测和聚类,把克隆方法和克隆类聚成一类,再对源代码库中的源文件进行语法信息的提取和保存,最后对提取出来的语法信息建立索引和搜索模块,对搜索结果产生摘要和克隆代码分类显示。