CN109445834A - 基于抽象语法树的程序代码相似性快速比较方法 - Google Patents
基于抽象语法树的程序代码相似性快速比较方法 Download PDFInfo
- Publication number
- CN109445834A CN109445834A CN201811273830.6A CN201811273830A CN109445834A CN 109445834 A CN109445834 A CN 109445834A CN 201811273830 A CN201811273830 A CN 201811273830A CN 109445834 A CN109445834 A CN 109445834A
- Authority
- CN
- China
- Prior art keywords
- syntax tree
- code
- abstract syntax
- program code
- node
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及一种基于抽象语法树的程序代码相似性快速比较方法,涉及代码复用技术领域。本发明的基于抽象语法树的程序代码相似性快速比较方法,该方法通过构造程序抽象语法树,然后基于抽象语法树提取程序代码特征,并将代码特征哈希化,最后通过计算代码特征哈希值的汉明距离进行代码相似性的判定。该方法以程序代码抽象语法树为比较对象,同时结合Simhash与倒排索引技术,将程序代码的相似性比较转化成代码特征哈希值的比较。在保证高准确率和召回率的前提下,这种方法不仅能够实现程序代码的快速相似性比较,而且还能够满足针对海量代码进行快速相似性比较的需要。该方法具有较好的时间和空间复杂度,能够适应针对海量代码的相似性比较应用场景,从而为软件代码复用及溯源提供支持手段。
Description
技术领域
本发明涉及代码复用技术领域,具体涉及一种基于抽象语法树的程序代码相似性快速比较方法。
背景技术
代码复用就是将已有的软件代码成分用于构造新的软件系统。被复用的软件代码成分一般称作可复用构件,无论对可复用代码原封不动地使用还是做适当的修改后再使用,只要是用来构造新软件,则都可称作复用。
作为提高软件开发效率和质量的重要手段,基于代码复用的开发模式已经成为软件开发的主流,这也造成最终开发出来的软件构成复杂、来源广泛,从而为软件安全性和知识产权自主性带来巨大挑战。软件中可能同时包含多种类型或多种来源的构件或代码,如包含组织内部开发的构件代码、软件外包开发的代码、从多个开源社区复用的构件代码或者代码片段、购买的第三方商业构件代码等。
为了提高软件的可控性,以降低软件安全性和知识产权风险,必须进行软件组成及溯源分析,而软件组成及溯源分析的核心则是程序代码相似性比较。目前,针对程序代码相似性比较的方法和技术有很多,而且某些方法针对某些具体场景也具有很高的准确率和召回率,但是这些方法的效率都较低,而且都难以满足针对海量代码进行相似性比较的需要。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是:如何设计一种程序代码相似性快速比较方法,实现程序代码复用的快速溯源分析,从而为软件安全性和知识产权自主性提供技术支撑。
(二)技术方案
为了解决上述技术问题,本发明提供了一种基于抽象语法树的程序代码相似性快速比较方法,包括以下步骤:
第一步、构建抽象语法树
先对程序代码进行词法分析,然后结合程序语法,进行语法分析,并构造程序抽象语法树;
第二步提取程序代码特征
针对程序代码的特征提取基于抽象语法树中的函数节点进行,通过遍历抽象语法树,过滤编译信息节点和冗余节点,以函数为单位解析函数内有用节点,形成特征标记串集合,将特征标记串转化成局部敏感哈希值,进而通过比较哈希值的距离,判定程序代码的相似程度;
第三步程序代码相似性比较
首先,对程序特征哈希值进行分块处理,分别创建索引表;然后,基于哈希值分块索引表,分别进行程序特征哈希值的分块检索;最后,基于哈希值检索的结果再进行特征哈希值距离计算,如果哈希距离小于预设阀值,则认为特征哈希值代表的程序代码相似,否则认为不相似。
优选地,第一步具体为:源代码首先经由词法分析器进行处理,词法分析器逐行地对源代码进行扫描,将程序代码分解成编程语言中一个个字符串形式的基本单词符号,与此同时,词法分析器将这些分解出来的基本元素Token化,标记它们所在的行,从而便于利用词法分析器对Token的访问与查找;
语法分析这一过程中,利用前面词法分析获得的Token串,同时根据源程序语言规范,生成与这些Token串相对应的语法分析树;
然后在语法分析树的基础上建立抽象语法树,过程是依据自定义的抽象语法树的文法,解析分析语法树中的字符串并提取Token信息,同时根据各级不同的节点,分别调用各自对应的方法,创建节点对象,继而生成程序抽象语法树。
优选地,第二步具体为:
分词:针对抽象语法树中的函数节点,对其子节点按照节点类型进行分词,同时根据每种节点类型出现的频率,赋予权值;
哈希:针对每种类型的节点,按照生成的标记串进行哈希计算,采用MD5或SHA1散列算法;
加权合并:对分词散列的每一位,如果该位为1,则向量相应位的值加上该分词的权值,否则减去该分词的权值;
降维:对向量的每一位,若该位大于0,则设为1,否则设为0,最终形成函数节点64位simhash值,该simhash值就是函数节点的最终特征,基于该simhash值进行函数相似性比较。
优选地,第二步中提取程序代码特征之前,还对抽象语法树进行过滤和优化,过滤掉抽象语法树中有关代码编译的信息,同时消除语法树中的冗余节点,接下来,按照抽象语法树中的节点类型,对节点进行解析,生成特征标记串,从而将程序代码转换成一个特征标记串集合,最后,再针对得到的特征标记串集合,进行哈希化处理,从而将特征标记串集合转换成特征哈希值集合。
优选地,所述预设阀值设定为3。
优选地,第三步基于抽屉原理实现。
优选地,第三步中,若2个simhash值的汉明距离在3以内,则它们切分成的k块中,必有k-3块相等,k≤64,设k=8,将每个simhash值均分为8块,为所有的simhash值创建8个表,不同的表存储不同位置的块,第一个表存储0到15位,第二个表存储15到31位,第三个表存储32到47位,表中同样使用倒排索引,由8位比特串索引simhash值,当依据一simhash检索汉明距离在3以内的其他simhash值时,将该simhash平分为8块,每块在相应的表寻找相似块,取相似块对应的simhash集合,筛选出至少在5个块对应的集合中出现的simhash值,然后逐一计算汉明距离,如果最终计算出的汉明距离都小于3,则说明simhash对应的程序代码相似。
(三)有益效果
本发明的基于抽象语法树的程序代码相似性快速比较方法,该方法通过构造程序抽象语法树,然后基于抽象语法树提取程序代码特征,并将代码特征哈希化,最后通过计算代码特征哈希值的汉明距离进行代码相似性的判定。该方法以程序代码抽象语法树为比较对象,同时结合Simhash与倒排索引技术,将程序代码的相似性比较转化成代码特征哈希值的比较。在保证高准确率和召回率的前提下,这种方法不仅能够实现程序代码的快速相似性比较,而且还能够满足针对海量代码进行快速相似性比较的需要。该方法具有较好的时间和空间复杂度,能够适应针对海量代码的相似性比较应用场景,从而为软件代码复用及溯源提供支持手段。
附图说明
图1为本发明中通信数据协议元素设计方法示意图;
图2为本发明中通信数据协议描述示意图;
图3为本发明中基于通信协议的数据编码过程流程图。
具体实施方式
为使本发明的目的、内容、和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
本发明提供的一种基于抽象语法树的程序代码相似性快速比较方法,如图1所示,包括以下步骤:
第一步构建抽象语法树
程序代码相似性比较是对程序源代码进行分析的过程,由于源代码本质上也属于文本文件,直接对其进行分析,所得到的信息有限,计算量过大,而且准确性也不高。所以,在进行程序代码相似性比较之前,需要将源程序转换为一种中间表示形式,以利于进一步处理。
抽象语法树是源程序处理过程中广泛使用的一种中间形式,能够直观地表示源程序的语法结构,不仅包含源程序结构展示所需的全部静态信息,而且具有较高的存储效率。构造程序抽象语法树的过程主要是先对程序代码进行词法分析,然后结合程序语法,进行语法分析,并构造程序抽象语法树。
程序抽象语法树的构建过程如图2所示。源代码首先经由词法分析器进行处理,词法分析器将逐行地对源代码进行扫描,将程序代码分解成编程语言中一个个字符串形式的基本单词符号如运算符、关键字等。与此同时,词法分析器将这些分解出来的基本元素Token化,标记它们所在的行,从而便于利用词法分析器对Token的访问与查找。
语法分析是源程序解析环节中的关键一步,在这一过程中,它利用前面词法分析获得的Token串,同时结合源程序语言规范,生成与这些Token串相对应的语法分析树。由于语法分析树和具体的编程语言的语法联系太过紧密,包含了原编程语言中太多的细节,导致树中存在大量多余的没有参考价值的节点,因此语法分析树并不能直接用来进行相似性比较。
抽象语法树构造器则是在语法分析树的基础上建立抽象语法树的关键。其工作过程是依据自定义的抽象语法树的文法,解析分析语法树中的字符串并提取Token信息,同时根据各级不同的节点,如根节点、类节点类、方法节点类,分别调用各自对应的方法,创建节点对象,继而生成程序抽象语法树。
第二步提取程序代码特征
程序抽象语法树不仅包含程序代码的语法结构信息,而且还包含有助于编译的细节信息。程序代码特征提取只关注程序代码的语法结构信息,而不需要有关程序编译的信息,因此,首先必须对抽象语法树进行过滤和优化,过滤掉抽象语法树中有关代码编译的信息,同时消除语法树中的冗余节点。接下来,按照抽象语法树中的节点类型,对节点进行解析,生成特征标记串,从而将程序代码转换成一个特征标记串集合。最后,针对得到的特征标记串集合,进行哈希化处理,从而将特征标记串集合转换成特征哈希值集合。
由于代码复用通常都是以函数为基本复用单位,因此针对程序代码的特征提取相应地基于抽象语法树中的函数节点进行。通过遍历抽象语法树,过滤编译信息节点和冗余节点,以函数为单位解析函数内有用节点,形成特征标记串集合。由于直接进行特征标记串的比较,效率非常低下,而且难以满足海量代码相似性比较场景,故将特征标记串转化成局部敏感哈希值,进而通过比较哈希值的距离,判定程序代码的相似程度。
基于抽象语法树进行程序代码特征的提取过程如图3所示,具体过程描述如下:
分词:针对抽象语法树中的函数节点,对其子节点按照节点类型进行分词,同时根据每种节点类型出现的频率,赋予权值;
哈希:针对每种类型的节点,按照生成的标记串进行哈希计算,可采用MD5或SHA1散列算法;
加权合并:对分词散列的每一位,如果该位为1,则向量相应位的值加上该分词的权值,否则减去该分词的权值;
降维:对向量的每一位,若该位大于0,则设为1,否则设为0,最终形成函数节点64位simhash值,该simhash值就是函数节点的最终特征,可以基于该simhash值进行函数相似性比较。
第三步程序代码相似性比较
经过第二步的处理,完成了程序代码特征到哈希特征的转换,从而将程序代码的相似性比较转化为特征值汉明距离的计算。通过计算两个simhash值间汉明距离,就可以判定两个simhash是否相似,进而判定两个函数代码是否相似。所谓汉明距离,是指两个二进制数(即01串)对应位取不同值的个数。当前,实践已经验证对于8KB以内的文档,64位的simhash值且最大汉明距离不大于3时,两者具有很高的相似度,且simhash算法的结果是可靠的。
然而,在海量的simhash值列表中搜索汉明距离为3以内的simhash值,复杂度非常高,效率太低,而且也不适合海量应用场景,为了提高程序代码相似性比较的效率,首先,对程序特征哈希值进行分块处理,分别创建索引表;然后,基于哈希值分块索引表,分别进行程序特征哈希值的分块检索,通过将直接的哈希计算转换成哈希值检索,可以大大提高哈希值距离计算的效率;最后,基于哈希值检索的结果再进行特征哈希值距离计算,如果哈希距离小于某个阀值(通常设定为3),则特征哈希值代表的程序代码相似。
上述方法中采用多表索引方法。该方法基于抽屉原理,若2个simhash值的汉明距离在3以内,则它们切分成的k(k≤64)块中,必有k-3块相等。
不妨设k=8,将每个simhash值均分为8块,为所有的simhash值创建8个表,不同的表存储不同位置的块,如第一个表存储0到15位,第二个表存储15到31位,第三个表存储32到47位等,表中同样使用倒排索引,由8位比特串索引simhash值。当依据某simhash检索汉明距离在3以内的其他simhash值时,将该simhash平分为8块,每块在相应的表寻找相似块,取相似块对应的simhash集合,筛选出至少在5个块对应的集合中出现的simhash值,然后逐一计算汉明距离。如果最终计算出的汉明距离都小于3,则说明simhash对应的程序代码相似。
本发明的一种基于抽象语法树的程序代码相似性快速比较方法具有如下特点:
本方法具有较高的准确率和召回率;
本方法具有较低的时间和空间复杂度;
本方法可以满足海量代码相似性比较应用场景。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
Claims (7)
1.一种基于抽象语法树的程序代码相似性快速比较方法,其特征在于,包括以下步骤:
第一步、构建抽象语法树
先对程序代码进行词法分析,然后结合程序语法,进行语法分析,并构造程序抽象语法树;
第二步提取程序代码特征
针对程序代码的特征提取基于抽象语法树中的函数节点进行,通过遍历抽象语法树,过滤编译信息节点和冗余节点,以函数为单位解析函数内有用节点,形成特征标记串集合,将特征标记串转化成局部敏感哈希值,进而通过比较哈希值的距离,判定程序代码的相似程度;
第三步程序代码相似性比较
首先,对程序特征哈希值进行分块处理,分别创建索引表;然后,基于哈希值分块索引表,分别进行程序特征哈希值的分块检索;最后,基于哈希值检索的结果再进行特征哈希值距离计算,如果哈希距离小于预设阀值,则认为特征哈希值代表的程序代码相似,否则认为不相似。
2.如权利要求1所述的方法,其特征在于,第一步具体为:源代码首先经由词法分析器进行处理,词法分析器逐行地对源代码进行扫描,将程序代码分解成编程语言中一个个字符串形式的基本单词符号,与此同时,词法分析器将这些分解出来的基本元素Token化,标记它们所在的行,从而便于利用词法分析器对Token的访问与查找;
语法分析这一过程中,利用前面词法分析获得的Token串,同时根据源程序语言规范,生成与这些Token串相对应的语法分析树;
然后在语法分析树的基础上建立抽象语法树,过程是依据自定义的抽象语法树的文法,解析分析语法树中的字符串并提取Token信息,同时根据各级不同的节点,分别调用各自对应的方法,创建节点对象,继而生成程序抽象语法树。
3.如权利要求2所述的方法,其特征在于,第二步具体为:
分词:针对抽象语法树中的函数节点,对其子节点按照节点类型进行分词,同时根据每种节点类型出现的频率,赋予权值;
哈希:针对每种类型的节点,按照生成的标记串进行哈希计算,采用MD5或SHA1散列算法;
加权合并:对分词散列的每一位,如果该位为1,则向量相应位的值加上该分词的权值,否则减去该分词的权值;
降维:对向量的每一位,若该位大于0,则设为1,否则设为0,最终形成函数节点64位simhash值,该simhash值就是函数节点的最终特征,基于该simhash值进行函数相似性比较。
4.如权利要求3所述的方法,其特征在于,第二步中提取程序代码特征之前,还对抽象语法树进行过滤和优化,过滤掉抽象语法树中有关代码编译的信息,同时消除语法树中的冗余节点,接下来,按照抽象语法树中的节点类型,对节点进行解析,生成特征标记串,从而将程序代码转换成一个特征标记串集合,最后,再针对得到的特征标记串集合,进行哈希化处理,从而将特征标记串集合转换成特征哈希值集合。
5.如权利要求4所述的方法,其特征在于,所述预设阀值设定为3。
6.如权利要求5所述的方法,其特征在于,第三步基于抽屉原理实现。
7.如权利要求6所述的方法,其特征在于,第三步中,若2个simhash值的汉明距离在3以内,则它们切分成的k块中,必有k-3块相等,k≤64,设k=8,将每个simhash值均分为8块,为所有的simhash值创建8个表,不同的表存储不同位置的块,第一个表存储0到15位,第二个表存储15到31位,第三个表存储32到47位,表中同样使用倒排索引,由8位比特串索引simhash值,当依据一simhash检索汉明距离在3以内的其他simhash值时,将该simhash平分为8块,每块在相应的表寻找相似块,取相似块对应的simhash集合,筛选出至少在5个块对应的集合中出现的simhash值,然后逐一计算汉明距离,如果最终计算出的汉明距离都小于3,则说明simhash对应的程序代码相似,否则认为不相似。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811273830.6A CN109445834B (zh) | 2018-10-30 | 2018-10-30 | 基于抽象语法树的程序代码相似性快速比较方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811273830.6A CN109445834B (zh) | 2018-10-30 | 2018-10-30 | 基于抽象语法树的程序代码相似性快速比较方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109445834A true CN109445834A (zh) | 2019-03-08 |
CN109445834B CN109445834B (zh) | 2021-04-30 |
Family
ID=65548875
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811273830.6A Active CN109445834B (zh) | 2018-10-30 | 2018-10-30 | 基于抽象语法树的程序代码相似性快速比较方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109445834B (zh) |
Cited By (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110188104A (zh) * | 2019-05-30 | 2019-08-30 | 中森云链(成都)科技有限责任公司 | 一种面向K12编程的Python程序代码快速搜索方法 |
CN110221933A (zh) * | 2019-05-05 | 2019-09-10 | 北京百度网讯科技有限公司 | 代码缺陷辅助修复方法及系统 |
CN110471667A (zh) * | 2019-07-25 | 2019-11-19 | 北京字节跳动网络技术有限公司 | 一种审核源程序的方法、装置、介质和电子设备 |
CN110989991A (zh) * | 2019-10-25 | 2020-04-10 | 深圳开源互联网安全技术有限公司 | 检测应用程序中源代码克隆开源软件的方法及系统 |
CN111143403A (zh) * | 2019-12-10 | 2020-05-12 | 跬云(上海)信息科技有限公司 | Sql转换方法及装置、存储介质 |
CN111290784A (zh) * | 2020-01-21 | 2020-06-16 | 北京航空航天大学 | 适用于大规模样本的程序源代码相似度检测方法 |
CN111507260A (zh) * | 2020-04-17 | 2020-08-07 | 重庆邮电大学 | 一种视频相似度快速检测方法及检测装置 |
CN111562944A (zh) * | 2020-05-11 | 2020-08-21 | 南京域智智能科技有限公司 | 程序代码的比对方法、比对装置 |
CN112035165A (zh) * | 2020-08-26 | 2020-12-04 | 山谷网安科技股份有限公司 | 基于同构网络的代码克隆检测方法及系统 |
CN112257068A (zh) * | 2020-11-17 | 2021-01-22 | 南方电网科学研究院有限责任公司 | 一种程序相似性检测方法、装置、电子设备和存储介质 |
CN112579155A (zh) * | 2021-02-23 | 2021-03-30 | 北京北大软件工程股份有限公司 | 代码相似性检测方法、装置以及存储介质 |
CN112905186A (zh) * | 2021-02-07 | 2021-06-04 | 中国科学院软件研究所 | 适用于开源软件供应链的高信噪比代码分类方法及装置 |
CN112925874A (zh) * | 2021-02-25 | 2021-06-08 | 中国科学技术大学 | 基于案例标记的相似代码搜索方法及系统 |
CN112949778A (zh) * | 2021-04-17 | 2021-06-11 | 深圳前海移联科技有限公司 | 基于局部敏感哈希的智能合约分类方法、系统及电子设备 |
CN112989731A (zh) * | 2021-03-22 | 2021-06-18 | 湖南大学 | 一种基于抽象语法树的集成电路建模获取方法及系统 |
CN113031931A (zh) * | 2021-03-04 | 2021-06-25 | 嘉兴丰鸟科技有限公司 | 一种基于脚本交叉编译的Python安全扩展方法 |
CN113255263A (zh) * | 2021-06-07 | 2021-08-13 | 上海国微思尔芯技术股份有限公司 | 颗粒带分割方法、装置、计算机设备和存储介质 |
CN113609246A (zh) * | 2021-08-04 | 2021-11-05 | 上海犇众信息技术有限公司 | 一种网页相似性检测方法及系统 |
CN113703773A (zh) * | 2021-08-26 | 2021-11-26 | 北京计算机技术及应用研究所 | 一种基于nlp的二进制代码相似性比对方法 |
CN113722215A (zh) * | 2021-08-18 | 2021-11-30 | 深圳开源互联网安全技术有限公司 | 检测软件代码风险的方法、系统、设备及存储介质 |
CN115129364A (zh) * | 2022-07-05 | 2022-09-30 | 四川大学 | 基于抽象语法树和图神经网络的指纹身份识别方法和系统 |
EP4080392A1 (en) * | 2021-04-20 | 2022-10-26 | Cylance Inc. | Clustering software codes in scalable manner |
CN115858002A (zh) * | 2023-02-06 | 2023-03-28 | 湖南大学 | 基于图对比学习的二进制代码相似性检测方法及系统与存储介质 |
CN115905871A (zh) * | 2022-12-12 | 2023-04-04 | 之江实验室 | 一种基于矩阵相似性的网络传输文件信息快速判定方法和系统 |
WO2024017100A1 (zh) * | 2022-07-19 | 2024-01-25 | 华为云计算技术有限公司 | 获取代码片段的方法、装置及存储介质 |
CN117591119A (zh) * | 2023-11-01 | 2024-02-23 | 国家计算机网络与信息安全管理中心 | 一种海量apk源码特征提取及相似分析方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101894236A (zh) * | 2010-07-28 | 2010-11-24 | 北京华夏信安科技有限公司 | 基于摘要语法树和语义匹配的软件同源性检测方法及装置 |
US20130151519A1 (en) * | 2011-12-07 | 2013-06-13 | Microsoft Corporation | Ranking Programs in a Marketplace System |
CN103729580A (zh) * | 2014-01-27 | 2014-04-16 | 国家电网公司 | 一种检测软件抄袭的方法和装置 |
US9110769B2 (en) * | 2010-04-01 | 2015-08-18 | Microsoft Technology Licensing, Llc | Code-clone detection and analysis |
CN106873964A (zh) * | 2016-12-23 | 2017-06-20 | 浙江工业大学 | 一种改进的SimHash代码相似度检测方法 |
-
2018
- 2018-10-30 CN CN201811273830.6A patent/CN109445834B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9110769B2 (en) * | 2010-04-01 | 2015-08-18 | Microsoft Technology Licensing, Llc | Code-clone detection and analysis |
CN101894236A (zh) * | 2010-07-28 | 2010-11-24 | 北京华夏信安科技有限公司 | 基于摘要语法树和语义匹配的软件同源性检测方法及装置 |
US20130151519A1 (en) * | 2011-12-07 | 2013-06-13 | Microsoft Corporation | Ranking Programs in a Marketplace System |
CN103729580A (zh) * | 2014-01-27 | 2014-04-16 | 国家电网公司 | 一种检测软件抄袭的方法和装置 |
CN106873964A (zh) * | 2016-12-23 | 2017-06-20 | 浙江工业大学 | 一种改进的SimHash代码相似度检测方法 |
Non-Patent Citations (2)
Title |
---|
LINGXIAO JIANG ET CL: ""DECKARD: Scalable and Accurate Tree-based Detection of Code Clones"", 《29TH INTERNATIONAL CONFERENCE ON SOFTWARE ENGINEERING (ICSE"07)》 * |
朱 波等: ""基于 AST 的程序代码相似性度量研究"", 《吉 林 大 学 学 报 ( 信 息 科 学 版)》 * |
Cited By (38)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110221933A (zh) * | 2019-05-05 | 2019-09-10 | 北京百度网讯科技有限公司 | 代码缺陷辅助修复方法及系统 |
CN110188104A (zh) * | 2019-05-30 | 2019-08-30 | 中森云链(成都)科技有限责任公司 | 一种面向K12编程的Python程序代码快速搜索方法 |
CN110471667A (zh) * | 2019-07-25 | 2019-11-19 | 北京字节跳动网络技术有限公司 | 一种审核源程序的方法、装置、介质和电子设备 |
CN110989991A (zh) * | 2019-10-25 | 2020-04-10 | 深圳开源互联网安全技术有限公司 | 检测应用程序中源代码克隆开源软件的方法及系统 |
CN110989991B (zh) * | 2019-10-25 | 2023-12-01 | 深圳开源互联网安全技术有限公司 | 检测应用程序中源代码克隆开源软件的方法及系统 |
CN111143403A (zh) * | 2019-12-10 | 2020-05-12 | 跬云(上海)信息科技有限公司 | Sql转换方法及装置、存储介质 |
CN111290784B (zh) * | 2020-01-21 | 2021-08-24 | 北京航空航天大学 | 适用于大规模样本的程序源代码相似度检测方法 |
CN111290784A (zh) * | 2020-01-21 | 2020-06-16 | 北京航空航天大学 | 适用于大规模样本的程序源代码相似度检测方法 |
CN111507260A (zh) * | 2020-04-17 | 2020-08-07 | 重庆邮电大学 | 一种视频相似度快速检测方法及检测装置 |
CN111507260B (zh) * | 2020-04-17 | 2022-08-05 | 重庆邮电大学 | 一种视频相似度快速检测方法及检测装置 |
CN111562944B (zh) * | 2020-05-11 | 2023-08-29 | 南京域智智能科技有限公司 | 程序代码的比对方法、比对装置 |
CN111562944A (zh) * | 2020-05-11 | 2020-08-21 | 南京域智智能科技有限公司 | 程序代码的比对方法、比对装置 |
CN112035165A (zh) * | 2020-08-26 | 2020-12-04 | 山谷网安科技股份有限公司 | 基于同构网络的代码克隆检测方法及系统 |
CN112257068A (zh) * | 2020-11-17 | 2021-01-22 | 南方电网科学研究院有限责任公司 | 一种程序相似性检测方法、装置、电子设备和存储介质 |
CN112905186A (zh) * | 2021-02-07 | 2021-06-04 | 中国科学院软件研究所 | 适用于开源软件供应链的高信噪比代码分类方法及装置 |
CN112579155A (zh) * | 2021-02-23 | 2021-03-30 | 北京北大软件工程股份有限公司 | 代码相似性检测方法、装置以及存储介质 |
CN112925874A (zh) * | 2021-02-25 | 2021-06-08 | 中国科学技术大学 | 基于案例标记的相似代码搜索方法及系统 |
CN112925874B (zh) * | 2021-02-25 | 2022-09-06 | 中国科学技术大学 | 基于案例标记的相似代码搜索方法及系统 |
CN113031931A (zh) * | 2021-03-04 | 2021-06-25 | 嘉兴丰鸟科技有限公司 | 一种基于脚本交叉编译的Python安全扩展方法 |
CN112989731B (zh) * | 2021-03-22 | 2023-10-13 | 湖南大学 | 一种基于抽象语法树的集成电路建模获取方法及系统 |
CN112989731A (zh) * | 2021-03-22 | 2021-06-18 | 湖南大学 | 一种基于抽象语法树的集成电路建模获取方法及系统 |
CN112949778A (zh) * | 2021-04-17 | 2021-06-11 | 深圳前海移联科技有限公司 | 基于局部敏感哈希的智能合约分类方法、系统及电子设备 |
US11880391B2 (en) | 2021-04-20 | 2024-01-23 | Cylance, Inc. | Clustering software codes in scalable manner |
EP4080392A1 (en) * | 2021-04-20 | 2022-10-26 | Cylance Inc. | Clustering software codes in scalable manner |
CN113255263B (zh) * | 2021-06-07 | 2021-10-01 | 上海国微思尔芯技术股份有限公司 | 颗粒带分割方法、装置、计算机设备和存储介质 |
CN113255263A (zh) * | 2021-06-07 | 2021-08-13 | 上海国微思尔芯技术股份有限公司 | 颗粒带分割方法、装置、计算机设备和存储介质 |
CN113609246B (zh) * | 2021-08-04 | 2024-04-12 | 奇安盘古(上海)信息技术有限公司 | 一种网页相似性检测方法及系统 |
CN113609246A (zh) * | 2021-08-04 | 2021-11-05 | 上海犇众信息技术有限公司 | 一种网页相似性检测方法及系统 |
CN113722215A (zh) * | 2021-08-18 | 2021-11-30 | 深圳开源互联网安全技术有限公司 | 检测软件代码风险的方法、系统、设备及存储介质 |
CN113703773A (zh) * | 2021-08-26 | 2021-11-26 | 北京计算机技术及应用研究所 | 一种基于nlp的二进制代码相似性比对方法 |
CN115129364A (zh) * | 2022-07-05 | 2022-09-30 | 四川大学 | 基于抽象语法树和图神经网络的指纹身份识别方法和系统 |
WO2024017100A1 (zh) * | 2022-07-19 | 2024-01-25 | 华为云计算技术有限公司 | 获取代码片段的方法、装置及存储介质 |
CN115905871B (zh) * | 2022-12-12 | 2023-08-22 | 之江实验室 | 一种基于矩阵相似性的网络传输文件信息快速判定方法和系统 |
CN115905871A (zh) * | 2022-12-12 | 2023-04-04 | 之江实验室 | 一种基于矩阵相似性的网络传输文件信息快速判定方法和系统 |
CN115858002B (zh) * | 2023-02-06 | 2023-04-25 | 湖南大学 | 基于图对比学习的二进制代码相似性检测方法及系统与存储介质 |
CN115858002A (zh) * | 2023-02-06 | 2023-03-28 | 湖南大学 | 基于图对比学习的二进制代码相似性检测方法及系统与存储介质 |
CN117591119A (zh) * | 2023-11-01 | 2024-02-23 | 国家计算机网络与信息安全管理中心 | 一种海量apk源码特征提取及相似分析方法 |
CN117591119B (zh) * | 2023-11-01 | 2024-05-31 | 国家计算机网络与信息安全管理中心 | 一种海量apk源码特征提取及相似分析方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109445834B (zh) | 2021-04-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109445834A (zh) | 基于抽象语法树的程序代码相似性快速比较方法 | |
CN111428044B (zh) | 多模态获取监管识别结果的方法、装置、设备及存储介质 | |
CN107885999B (zh) | 一种基于深度学习的漏洞检测方法及系统 | |
CN108446540B (zh) | 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统 | |
CN105868204B (zh) | 一种转换Oracle脚本语言SQL的方法及装置 | |
Brody et al. | A structural model for contextual code changes | |
CN105389195B (zh) | 一种基于代码替换和正则表达式的静态分析工具改进方法 | |
KR20220028038A (ko) | 자연어 이해 프레임워크에서 발화에 대한 복수의 의미 표현들의 도출 | |
US20200057810A1 (en) | Information object extraction using combination of classifiers | |
CN110852095B (zh) | 语句热点提取方法及系统 | |
CN106843840A (zh) | 一种基于相似度分析的源代码版本演化注释复用方法 | |
CN103049458A (zh) | 一种修正用户词库的方法和系统 | |
CN111026815B (zh) | 基于用户辅助修正下的实体对特定关系抽取方法 | |
US20230418578A1 (en) | Systems and methods for detection of code clones | |
CN108241658A (zh) | 一种日志模式发现方法及系统 | |
CN112395425A (zh) | 一种数据处理方法、装置、计算机设备以及可读存储介质 | |
CN112528663A (zh) | 一种电网领域调度场景下的文本纠错方法及系统 | |
CN111831624A (zh) | 数据表创建方法、装置、计算机设备及存储介质 | |
CN115630368A (zh) | 基于自然语言处理与深度森林的Java漏洞分类方法 | |
CN111475196A (zh) | 编译告警溯源方法、装置、电子设备及计算机可读介质 | |
JP2016164707A (ja) | 自動翻訳装置及び翻訳用モデル学習装置 | |
CN113032371A (zh) | 数据库语法分析方法、装置和计算机设备 | |
van Hal et al. | Generating commit messages from git diffs | |
CN115292448A (zh) | 语言转义方法、装置、设备及存储介质 | |
Kulick et al. | Parsing Early Modern English for Linguistic Search |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |