CN117033546A - 相似代码搜索方法及系统 - Google Patents

相似代码搜索方法及系统 Download PDF

Info

Publication number
CN117033546A
CN117033546A CN202310790290.3A CN202310790290A CN117033546A CN 117033546 A CN117033546 A CN 117033546A CN 202310790290 A CN202310790290 A CN 202310790290A CN 117033546 A CN117033546 A CN 117033546A
Authority
CN
China
Prior art keywords
function
search object
code
semantic embedding
similarity
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.)
Pending
Application number
CN202310790290.3A
Other languages
English (en)
Inventor
李红
王勇攀
刘明东
吕飞
孙利民
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Institute of Information Engineering of CAS
Original Assignee
Institute of Information Engineering of CAS
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Institute of Information Engineering of CAS filed Critical Institute of Information Engineering of CAS
Priority to CN202310790290.3A priority Critical patent/CN117033546A/zh
Publication of CN117033546A publication Critical patent/CN117033546A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/33Querying
    • G06F16/3331Query processing
    • G06F16/334Query execution
    • G06F16/3344Query execution using natural language analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • G06F16/90344Query processing by using string matching techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/22Matching criteria, e.g. proximity measures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/194Calculation of difference between files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/53Decompilation; Disassembly
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/0464Convolutional networks [CNN, ConvNet]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Databases & Information Systems (AREA)
  • Computational Linguistics (AREA)
  • Artificial Intelligence (AREA)
  • Health & Medical Sciences (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Evolutionary Biology (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供一种相似代码搜索方法及系统,方法包括:根据多个代码文件对应的函数集,获取目标代码文件中的目标函数和搜索对象中的各个函数之间的相似度,多个代码文件包括目标代码文件和搜索对象,搜索对象包括一个或多个代码文件,相似度是根据目标函数的第一语义嵌入和搜索对象中的各个函数的第二语义嵌入确定的,第一语义嵌入是根据目标函数的外部语义嵌入和内部语义嵌入确定的,第二语义嵌入是根据搜索对象中的各个函数的外部语义嵌入和内部语义嵌入确定的;根据相似度,从搜索对象中筛选出与目标代码文件相似的代码文件。所述系统执行所述方法。本发明能够从大规模代码文件中准确召回与目标代码文件最为相似的代码文件。

Description

相似代码搜索方法及系统
技术领域
本发明涉及计算机技术领域,尤其涉及一种相似代码搜索方法及系统。
背景技术
在代码(例如,二进制代码)相似性检测领域,人们提出了各种技术来解决识别二进制代码之间相似性的挑战。
先前的研究大都集中在分析二进制代码片段的内部语义信息以检测相似性。这些方法主要依赖于文本语义、控制流图或抽象语法树等技术。例如,可以基于文本语义的方法将编程语言视为文本,使用自然语言处理技术进行相似度计算,也可以利用控制流图从代码文件中提取结构特征并测量相似度。还可以使用抽象的语法树而不是控制流图进行函数匹配。虽然这些方法在某些情况下显示出有希望的结果,但它们往往不能捕捉到二进制代码的全部语义背景,限制了它们的有效性。
认识到基于内部语义信息的方法的局限性,最近的研究探讨了整合外部语义信息,特别是函数调用图,以提高二进制代码相似性检测的准确性。例如,将函数调用图上每个节点的进出程度作为一个二维向量来表示函数特征。或者利用函数调用关系来重新排列从二进制代码片段中提取的内部语义特征。通过考虑函数之间的调用关系,在识别相似的代码方面实现了更高的准确性。或者通过结合控制流图、数据流图和函数调用图,构建了代码的增强表示。通过捕捉代码的结构和行为两个方面,在识别不同的代码相似性方面表现出卓越的性能。
利用神经网络将代码文件的内部语义信息(例如汇编代码、控制流图等)转换成一个高维的嵌入向量,并被证明是非常有效的。然而,随着代码文件比较规模的增加,不能准确召回与目标代码文件最为相似的代码文件。
发明内容
本发明提供的相似代码搜索方法及系统,用于解决现有技术中存在的随着代码文件比较规模的增加,不能准确召回与目标代码文件最为相似的代码文件的问题。
本发明提供的一种相似代码搜索方法,包括:
根据多个代码文件对应的函数集,获取目标代码文件中的目标函数和搜索对象中的各个函数之间的相似度,所述多个代码文件包括目标代码文件和搜索对象,所述搜索对象包括一个或多个代码文件,所述相似度是根据所述目标函数的第一语义嵌入和所述搜索对象中的各个函数的第二语义嵌入确定的,所述第一语义嵌入是根据所述目标函数的外部语义嵌入和内部语义嵌入确定的,所述第二语义嵌入是根据所述搜索对象中的各个函数的外部语义嵌入和内部语义嵌入确定的;
根据所述相似度,从所述搜索对象中筛选出与所述目标代码文件相似的代码文件。
根据本发明提供的一种相似代码搜索方法,所述根据多个代码文件对应的函数集,获取目标代码文件中的目标函数和所述搜索对象中的各个函数之间的相似度,包括:
获取所述第一语义嵌入和所述第二语义嵌入之间的余弦相似度;
获取所述目标函数的鲁棒特征和所述搜索对象中的各个函数的鲁棒特征之间的杰卡德距离;
根据所述余弦相似度和所述杰卡德距离,确定所述相似度。
根据本发明提供的一种相似代码搜索方法,在所述获取所述第一语义嵌入和所述第二语义嵌入之间的余弦相似度之前,所述方法还包括:
根据提取到的所述目标函数的鲁棒特征、所述搜索对象中的各个函数的鲁棒特征和所述函数集,确定所述目标函数和所述搜索对象中的各个函数的外部语义图;
根据所述函数集、提取到的所述目标函数的鲁棒特征中的可读静态字符串和外部函数,以及所述搜索对象中的各个函数的鲁棒特征中的可读静态字符串和外部函数,确定所述外部语义图中的字符串节点和函数节点;
在所述外部语义图中的第一函数节点与目标函数节点之间构建一条边,所述第一函数节点为所述搜索对象中的各个函数中,与所述目标函数存在调用关系的函数对应的节点,所述目标函数节点为所述目标函数对应的节点;
在所述外部语义图中的第二函数节点与所述目标函数节点之间构建一条边,所述第二函数节点为所述搜索对象中的各个函数对应的外部函数中,与所述目标函数使用同一个全局数据的函数对应的节点,所述全局数据是根据所述提取到的所述目标函数和所述搜索对象中的各个函数的鲁棒特征确定的;
在所述外部语义图中的第三函数节点与所述目标函数节点之间构建一条边,所述第三函数节点为所述搜索对象中的各个函数对应的函数中,与所述目标函数之间存在地址依赖关系的函数对应的节点;
在所述外部语义图中的函数节点与目标字符串节点之间构建一条边,所述目标字符串节点为所述字符串节点对应的字符串中,与所述函数节点使用的字符串相同的字符串节点。
根据本发明提供的一种相似代码搜索方法,所述第一语义嵌入和所述第二语义嵌入的获取方式,包括:
根据所述外部语义图的向量表示,确定所述目标函数和所述搜索对象的各个函数的外部语义嵌入;
利用内部语义学习方法,确定所述目标函数和所述搜索对象的各个函数的内部语义嵌入;
根据所述目标函数的外部语义嵌入和所述目标函数的内部语义嵌入,确定所述第一语义嵌入;
根据所述搜索对象的各个函数的外部语义嵌入和和所述搜索对象的各个函数的内部语义嵌入,确定所述第二语义嵌入。
根据本发明提供的一种相似代码搜索方法,所述根据所述相似度,从所述搜索对象中筛选出与所述目标代码文件相似的代码文件,包括:
从所述搜索对象中的各个函数中筛选出与所述目标函数之间的相似度大于等于预设值的一个或多个相似函数;
从所述搜索对象中,确定所述一个或多个相似函数所在的代码文件;
根据所述一个或多个相似函数所在代码文件,确定与所述目标代码文件相似的代码文件。
根据本发明提供的一种相似代码搜索方法,在所述根据多个代码文件对应的函数集,获取目标代码文件中的目标函数和所述搜索对象中的各个函数之间的相似度之前,所述方法还包括:
将所述多个代码文件进行反汇编,获取所述多个代码文件对应的所述函数集。
本发明还提供一种相似代码搜索系统,包括:获取模块以及搜索模块;
所述获取模块,用于根据多个代码文件对应的函数集,获取目标代码文件中的目标函数和搜索对象中的各个函数之间的相似度,所述多个代码文件包括目标代码文件和搜索对象,所述搜索对象包括一个或多个代码文件,所述相似度是根据所述目标函数的第一语义嵌入和所述搜索对象中的各个函数的第二语义嵌入确定的,所述第一语义嵌入是根据所述目标函数的外部语义嵌入和内部语义嵌入确定的,所述第二语义嵌入是根据所述搜索对象中的各个函数的外部语义嵌入和内部语义嵌入确定的;
所述搜索模块,用于根据所述相似度,从所述搜索对象中筛选出与所述目标代码文件相似的代码文件。
本发明还提供一种电子设备,包括处理器和存储有计算机程序的存储器,所述处理器执行所述程序时实现如上述任一种所述相似代码搜索方法。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述相似代码搜索方法。
本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述相似代码搜索方法。
本发明提供的相似代码搜索方法及系统,在面对大规模代码文件比较时,充分利用目标代码文件与搜索对象中的代码文件的内部语义嵌入和外部语义嵌入,计算目标代码文件的目标函数与搜索对象中的代码文件的各个函数的相似度,并根据该相似度,准确召回大规模代码文件中与目标代码文件最为相似的代码文件(即同源代码)。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的相似代码搜索方法的流程示意图之一;
图2是本发明提供的相似代码搜索方法的流程示意图之二;
图3是本发明提供的相似代码搜索系统的结构示意图;
图4是本发明提供的电子设备的实体结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明提供的相似代码搜索方法,可以适用于大规模代码文件例如二进制代码文件,集中搜索与大规模二进制代码文件中的目标二进制代码文件最为相似的二进制代码文件,即同源代码,本发明提出了一种增强框架,它利用代码文件的外部语义信息来增强代码的内部语义嵌入表示。为了充分学习到代码的丰富的外部语义信息,设计了一个新颖的外部语义图,它通过调用依赖、数据依赖、地址依赖以及字符串依赖建模代码文件的外部语义信息。这些外部语义信息能够覆盖所有的代码文件,并且通过加入外部语义信息,弥补了仅用内部语义学习方法二进制代码特异性不高的问题,能够在大规模应用场景下更好的检测同源代码。最后,本发明还提出了一种相似度结合方法,它将二进制代码中一些稳健的特征相似度与语义嵌入相似度结合在一起得到代码文件之间最后的相似度,具体实现如下:
图1是本发明提供的相似代码搜索方法的流程示意图之一,如图1所示,方法包括:
步骤110,根据多个代码文件对应的函数集,获取目标代码文件中的目标函数和搜索对象中的各个函数之间的相似度,所述多个代码文件包括目标代码文件和搜索对象,所述搜索对象包括一个或多个代码文件,所述相似度是根据所述目标函数的第一语义嵌入和所述搜索对象中的各个函数的第二语义嵌入确定的,所述第一语义嵌入是根据所述目标函数的外部语义嵌入和内部语义嵌入确定的,所述第二语义嵌入是根据所述搜索对象中的各个函数的外部语义嵌入和内部语义嵌入确定的;
步骤120,根据所述相似度,从所述搜索对象中筛选出与所述目标代码文件相似的代码文件。
需要说明的是,上述方法的执行主体可以是计算机设备。
可选地,本发明针对内部语义学习模型无法很好的应对大规模代码文件中同源代码召回这一问题,设计了一种利用外部语义来增强内部语义嵌入表示的增强框架,利用增强后的语义嵌入,实现大规模代码集中同源代码的准确召回。该代码文件可以具体为二进制代码文件。
获取大规模代码文件中的多个代码文件对应的函数集,该函数集可以具体为代码文件中所调用的函数构成的集合。
可选地,该多个代码文件(假设N个代码文件)可以具体包括目标代码文件和搜索对象,该目标代码文件可以是N个代码文件中的任意一个或多个代码文件(例如M个,M<N),该搜索对象即为N个代码文件中除去目标代码文件之外的代码文件,其可以具体包括一个或多个代码文件(例如P个)。
可选地,根据获取到的N个代码文件对应的函数集,得到N个代码文件中的目标代码文件中的目标函数和搜索对象中的各个函数之间的相似度,该相似度可以作为目标代码文件与搜索对象中的各个代码文件之间的相似度。其中,该目标函数即为目标代码文件中调用的函数。
可选地,该相似度可以具体是根据目标函数的第一语义嵌入和搜索对象中的各个函数的第二语义嵌入确定的,该第一语义嵌入可以具体包括目标函数的外部语义嵌入及其内部语义嵌入,该第二语义嵌入可以具体包括搜索对象中的各个函数的外部语义嵌入及其内部语义嵌入。
根据计算得到的相似度,从搜索对象中包括的代码文件中找到与该目标代码文件最为相似的代码文件,例如可以将相似度排名靠前的预设数量个代码文件作为与该目标代码文件最为相似的代码文件,也可以是将相似度大于预设阈值的预设数量个代码文件作为与该目标代码文件最为相似的代码文件,该预设数量个可以具体设置为一个或者多个。
本发明提供的相似代码搜索方法,在面对大规模代码文件比较时,充分利用目标代码文件与搜索对象中的代码文件的内部语义嵌入和外部语义嵌入,计算目标代码文件的目标函数与搜索对象中的代码文件的各个函数的相似度,并根据该相似度,准确召回大规模代码文件中与目标代码文件最为相似的代码文件(即同源代码)。
进一步地,在一个实施例中,所述根据多个代码文件对应的函数集,获取目标代码文件中的目标函数和所述搜索对象中的各个函数之间的相似度,可以具体包括:
获取所述第一语义嵌入和所述第二语义嵌入之间的余弦相似度;
获取所述目标函数的鲁棒特征和所述搜索对象中的各个函数的鲁棒特征之间的杰卡德距离;
根据所述余弦相似度和所述杰卡德距离,确定所述相似度。
可选地,计算目标函数的第一语义嵌入和搜索对象中的各个函数的第二语义嵌入之间的余弦相似度。
提取目标函数和搜索对象中的各个函数的鲁棒特征,该鲁棒特征可以具体包括代码文件中的可读静态字符串、外部函数和全局数据(例如变量)。
计算目标函数的鲁棒特征和搜索对象中的各个函数的鲁棒特征之间的杰卡德Jaccard距离。
根据该余弦相似度和杰卡德距离,得到相似度。
进一步地,在一个实施例中,所述第一语义嵌入和所述第二语义嵌入的获取方式,可以具体包括:
根据所述外部语义图的向量表示,确定所述目标函数和所述搜索对象的各个函数的外部语义嵌入;
利用内部语义学习方法,确定所述目标函数和所述搜索对象的各个函数的内部语义嵌入;
根据所述目标函数的外部语义嵌入和所述目标函数的内部语义嵌入,确定所述第一语义嵌入;
根据所述搜索对象的各个函数的外部语义嵌入和和所述搜索对象的各个函数的内部语义嵌入,确定所述第二语义嵌入。
可选地,本发明所采用的相似代码搜索方法分为训练和预测两大步骤,训练过程利用相同源代码编译得到的代码文件进行模型训练,推测阶段则利用训练好的模型生成函数的语义嵌入,得到目标函数的同源函数,根据该同源函数所在搜索对象中的代码文件,确定与该目标代码文件最为相似的代码文件,图2是本发明提供的相似代码搜索方法的流程示意图之二,如图2所示,在训练过程,首先对输入的二进制文件进行反汇编得到二进制文件中的函数集,提取目标函数和搜索对象中的各个函数的鲁棒特征,鲁棒特征主要设计了三种,分别是:可读静态字符串、外部函数以及全局数据(例如变量等)。提取完鲁棒特征后,根据反汇编的得到的函数集以及提取的鲁棒特征构建外部语义图,使用外部语义图来建模函数的外部语义信息,在这里,每个函数的外部语义图中节点(包括函数节点和字符串节点)由文本信息代替,例如,函数节点由函数的描述信息代替,字符串节点由字符串的描述信息代替,外部语义图存在四种类型的边,分别是:控制依赖边、地址依赖边以及字符串依赖边。
为了将函数的外部语义图进行数字向量化,利用公开的BERT模型将函数的字符串进行编码给外部语义图中的每个字符串节点生成嵌入,利用已有的内部语义学习方法生成函数的内部语义嵌入给外部语义图中的函数对应的节点赋值。然后,利用训练好的关系图卷积神经网络RGCN模型得到外部语义图的向量表示,并根据该外部语义图的相邻表示生成目标函数的外部语义嵌入和搜索对象中的各个函数的外部语义嵌入。
经过语义学习模型结合函数的外部语义嵌入和内部语义嵌入生成函数的语义嵌入(包括目标函数的第一语义嵌入和搜索对象中的各个函数的第二嵌入),语义学习模型的语义嵌入更新公式如下:
Ed=RGCN(Fd)+rec_fc(Gemini(Fd));
其中,Fd代表函数集中的函数,Ed代表函数Fd的外部语义嵌入和内部语义嵌入之和,RGCN(Fd)代表函数Fd的外部语义嵌入,rec_fc(Gemini(Fd))代表函数Fd的内部语义嵌入,LeakyRelu为RGCN模型的激活函数,表示指向函数Fi的关系为r的邻居节点集合,r可以具体为控制依赖关系、数据依赖关系、地址依赖关系和字符串依赖关系中的任一,Ci,r则是一个正则化常量,其中Ci,r的取值为/> 线性转化函数,相同类型的边的邻居节点,使用同一个参数矩阵/>进行转化,/>的个数是外部语义图中边类型的个数,l表示RGCN模型的网络层数,/>代表外部语义图中的函数节点的初始内部语义嵌入,R代表关系集,其可以具体包括可以具体为控制依赖关系、数据依赖关系、地址依赖关系和字符串依赖关系。
经过语义嵌入生成后,使用余弦相似度计算函数的语义嵌入之间的相似性(即余弦相似度),与函数之间的鲁棒特征的杰卡德距离拼接成一个四维向量,输入前馈网络(进行语义学习模型训练直至其收敛),得到最终的相似度。
在预测过程,输入多个代码文件,构建每个函数的外部语义图,利用收敛后的语义学习模型得到目标函数的第一语义嵌入和搜索对象中的各个函数的第二语义嵌入,然后计算目标函数与搜索对象中的各个之间的余弦相似度,以及目标函数与搜索对象中的各个函数之间的杰卡德距离,根据该余弦相似度和杰卡德距离得到该相似度,并通过对该相似度大小进行排序,输出与目标函数的相似度TOP10的函数列表,将该函数列表所在的代码文件作为与目标代码文件相似的代码文件。
本发明提供的相似代码搜索方法,将目标代码文件与搜索对象中的一些稳健的特征(如鲁棒特征)之间的相似度(如杰卡德距离),与目标代码文件与搜索对象的语义嵌入的余弦相似度进行结合,作为两者最后的相似度,进一步提高了搜索到的与目标代码文件相似的同源代码的准确性。
进一步地,在一个实施例中,在所述获取所述第一语义嵌入和所述第二语义嵌入之间的余弦相似度之前,所述方法还可以具体包括:
根据提取到的所述目标函数的鲁棒特征、所述搜索对象中的各个函数的鲁棒特征和所述函数集,确定所述目标函数和所述搜索对象中的各个函数的外部语义图;
根据所述函数集、提取到的所述目标函数的鲁棒特征中的可读静态字符串和外部函数,以及所述搜索对象中的各个函数的鲁棒特征中的可读静态字符串和外部函数,确定所述外部语义图中的字符串节点和函数节点;
在所述外部语义图中的第一函数节点与目标函数节点之间构建一条边,所述第一函数节点为所述搜索对象中的各个函数中,与所述目标函数存在调用关系的函数对应的节点,所述目标函数节点为所述目标函数对应的节点;
在所述外部语义图中的第二函数节点与所述目标函数节点之间构建一条边,所述第二函数节点为所述搜索对象中的各个函数对应的外部函数中,与所述目标函数使用同一个全局数据的函数对应的节点,所述全局数据是根据所述提取到的所述目标函数和所述搜索对象中的各个函数的鲁棒特征确定的;
在所述外部语义图中的第三函数节点与所述目标函数节点之间构建一条边,所述第三函数节点为所述搜索对象中的各个函数对应的函数中,与所述目标函数之间存在地址依赖关系的函数对应的节点;
在所述外部语义图中的函数节点与目标字符串节点之间构建一条边,所述目标字符串节点为所述字符串节点对应的字符串中,与所述函数节点使用的字符串相同的字符串节点。
可选地,在计算第一语义嵌入和第二语义嵌入之间的余弦相似度之前,根据提取到的目标函数的鲁棒特征、搜索对象中的各个函数的鲁棒特征以及函数集,构建函数集中每个函数(包括目标函数和搜索对象中的各个函数)的外部语义图。
该外部语义图可以具体由节点和边组成,该节点可以具体包括函数节点和字符串节点,该函数节点可以具体包括目标函数对应的节点(即目标函数节点)、搜索对象中的各个函数以及目标函数的鲁棒特征中的外部函数对应的节点,该字符串节点可以具体为目标函数和搜索对象中的各个函数的鲁棒特征中的可读静态字符串对应的节点。
该外部语义图中的边可以具体包括四种类型,分别是:控制依赖边、数据依赖边、地址依赖边以及字符串依赖边。
其中,该控制依赖边可以具体为在外部语义图中的第一函数节点与目标函数节点之间构建的一条边,该第一函数节点可以具体为搜索对象中的各个函数中,与目标函数存在调用关系的函数对应的节点。
该数据依赖边可以具体为在外部语义图中的第二函数节点与目标函数节点之间构建的一条边,该第二函数节点可以具体为搜索对象中的各个函数中,与目标函数使用同一个全局数据的函数对应的节点,该全局数据是根据提取到的目标函数和搜索对象中的各个函数的鲁棒特征确定的。
该地址依赖边可以具体为在外部语义图中的第三函数节点与目标函数节点之间构建的一条边,该第三函数节点可以具体为搜索对象中的各个函数中,与目标函数之间存在地址依赖关系的函数对应的节点。
该字符串依赖边可以具体为在外部语义图中的函数节点与函数节点对应目标字符串节点之间构建的一条边,该目标字符串节点可以具体为外部语义图中的字符串节点对应的字符串中,与函数节点使用的字符串相同的字符串节点。
本发明提供的相似代码搜索方法,通过调用依赖、数据依赖、地址依赖以及字符串依赖建模代码文件的外部语义信息(如外部语义图)。这些外部语义信息能够覆盖所有的代码文件,并通过加入外部语义信息,弥补了仅用内部语义学习方法中存在的代码特异性不高的问题,能够在大规模代码文件比较的应用场景下更好的检测出同源代码。
进一步地,在一个实施例中,在所述根据多个代码文件对应的函数集,获取目标代码文件中的目标函数和所述搜索对象中的各个函数之间的相似度之前,所述方法还可以具体包括:
将所述多个代码文件进行反汇编,获取所述多个代码文件对应的所述函数集。
可选地,将多个代码文件(包括目标代码文件和搜索对象)进行反汇编,将得到的目标代码文件和搜索对象中的各代码文件中的函数组成的集合,作为最终得到的函数集。
进一步地,在一个实施例中,所述根据所述相似度,从所述搜索对象中筛选出与所述目标代码文件相似的代码文件,可以具体包括:
从所述搜索对象中的各个函数中筛选出与所述目标函数之间的相似度大于等于预设值的一个或多个相似函数;
从所述搜索对象中,确定所述一个或多个相似函数所在的代码文件;
根据所述一个或多个相似函数所在代码文件,确定与所述目标代码文件相似的代码文件。
可选地,从该搜索对象中的各个函数中筛选出与该目标代码文件中的目标函数之间的相似度大于等于预设值的一个或多个函数(即相似函数),并从该搜索对象中找到得到的一个或多个相似函数所在的代码文件,将其作为与目标代码文件相似的代码文件。
可以具体是通过对相似度大小进行降序排序后,将排列在第Top k的相似度作为该预设值,其中,k的值可以根据实际需要进行调整,例如,k取10。
本发明提供的相似代码搜索方法,在代码文件相似性搜索任务中大幅度的增强了现有的最先进的内部语义学习方法(Gemini、Asteria、TREX)的嵌入表示能力,使得对目标代码文件相似性搜索的准确度和召回率都提升到一定程度,达到了最优效果SOTA,并且适合于大规模、跨编译设置、不同函数大小等复杂情况的相似性搜索。
下面对本发明提供的相似代码搜索系统进行描述,下文描述的相似代码搜索系统与上文描述的相似代码搜索方法可相互对应参照。
图3是本发明提供的相似代码搜索系统的结构示意图,如图3所示,包括:
获取模块310以及搜索模块311;
所述获取模块310,用于根据多个代码文件对应的函数集,获取目标代码文件中的目标函数和搜索对象中的各个函数之间的相似度,所述多个代码文件包括目标代码文件和搜索对象,所述搜索对象包括一个或多个代码文件,所述相似度是根据所述目标函数的第一语义嵌入和所述搜索对象中的各个函数的第二语义嵌入确定的,所述第一语义嵌入是根据所述目标函数的外部语义嵌入和内部语义嵌入确定的,所述第二语义嵌入是根据所述搜索对象中的各个函数的外部语义嵌入和内部语义嵌入确定的;
所述搜索模块311,用于根据所述相似度,从所述搜索对象中筛选出与所述目标代码文件相似的代码文件。
本发明提供的相似代码搜索系统,在面对大规模代码文件比较时,充分利用目标代码文件与搜索对象中的代码文件的内部语义嵌入和外部语义嵌入,计算目标代码文件的目标函数与搜索对象中的代码文件的各个函数的相似度,并根据该相似度,准确召回大规模代码文件中与目标代码文件最为相似的代码文件(即同源代码)。
图4是本发明提供的一种电子设备的实体结构示意图,如图4所示,该电子设备可以包括:处理器(processor)410、通信接口(communication interface)411、存储器(memory)412和总线(bus)413,其中,处理器410,通信接口411,存储器412通过总线413完成相互间的通信。处理器410可以调用存储器412中的逻辑指令,以执行如下方法:
根据多个代码文件对应的函数集,获取目标代码文件中的目标函数和搜索对象中的各个函数之间的相似度,所述多个代码文件包括目标代码文件和搜索对象,所述搜索对象包括一个或多个代码文件,所述相似度是根据所述目标函数的第一语义嵌入和所述搜索对象中的各个函数的第二语义嵌入确定的,所述第一语义嵌入是根据所述目标函数的外部语义嵌入和内部语义嵌入确定的,所述第二语义嵌入是根据所述搜索对象中的各个函数的外部语义嵌入和内部语义嵌入确定的;
根据所述相似度,从所述搜索对象中筛选出与所述目标代码文件相似的代码文件。
此外,上述的存储器中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机电源屏(可以是个人计算机,服务器,或者网络电源屏等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
进一步地,本发明公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的相似代码搜索方法,例如包括:
根据多个代码文件对应的函数集,获取目标代码文件中的目标函数和搜索对象中的各个函数之间的相似度,所述多个代码文件包括目标代码文件和搜索对象,所述搜索对象包括一个或多个代码文件,所述相似度是根据所述目标函数的第一语义嵌入和所述搜索对象中的各个函数的第二语义嵌入确定的,所述第一语义嵌入是根据所述目标函数的外部语义嵌入和内部语义嵌入确定的,所述第二语义嵌入是根据所述搜索对象中的各个函数的外部语义嵌入和内部语义嵌入确定的;
根据所述相似度,从所述搜索对象中筛选出与所述目标代码文件相似的代码文件。
另一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的相似代码搜索方法,例如包括:
根据多个代码文件对应的函数集,获取目标代码文件中的目标函数和搜索对象中的各个函数之间的相似度,所述多个代码文件包括目标代码文件和搜索对象,所述搜索对象包括一个或多个代码文件,所述相似度是根据所述目标函数的第一语义嵌入和所述搜索对象中的各个函数的第二语义嵌入确定的,所述第一语义嵌入是根据所述目标函数的外部语义嵌入和内部语义嵌入确定的,所述第二语义嵌入是根据所述搜索对象中的各个函数的外部语义嵌入和内部语义嵌入确定的;
根据所述相似度,从所述搜索对象中筛选出与所述目标代码文件相似的代码文件。
以上所描述的系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机电源屏(可以是个人计算机,服务器,或者网络电源屏等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (10)

1.一种相似代码搜索方法,其特征在于,包括:
根据多个代码文件对应的函数集,获取目标代码文件中的目标函数和搜索对象中的各个函数之间的相似度,所述多个代码文件包括目标代码文件和搜索对象,所述搜索对象包括一个或多个代码文件,所述相似度是根据所述目标函数的第一语义嵌入和所述搜索对象中的各个函数的第二语义嵌入确定的,所述第一语义嵌入是根据所述目标函数的外部语义嵌入和内部语义嵌入确定的,所述第二语义嵌入是根据所述搜索对象中的各个函数的外部语义嵌入和内部语义嵌入确定的;
根据所述相似度,从所述搜索对象中筛选出与所述目标代码文件相似的代码文件。
2.根据权利要求1所述的相似代码搜索方法,其特征在于,所述根据多个代码文件对应的函数集,获取目标代码文件中的目标函数和所述搜索对象中的各个函数之间的相似度,包括:
获取所述第一语义嵌入和所述第二语义嵌入之间的余弦相似度;
获取所述目标函数的鲁棒特征和所述搜索对象中的各个函数的鲁棒特征之间的杰卡德距离;
根据所述余弦相似度和所述杰卡德距离,确定所述相似度。
3.根据权利要求2所述的相似代码搜索方法,其特征在于,在所述获取所述第一语义嵌入和所述第二语义嵌入之间的余弦相似度之前,所述方法还包括:
根据提取到的所述目标函数的鲁棒特征、所述搜索对象中的各个函数的鲁棒特征和所述函数集,确定所述目标函数和所述搜索对象中的各个函数的外部语义图;
根据所述函数集、提取到的所述目标函数的鲁棒特征中的可读静态字符串和外部函数,以及所述搜索对象中的各个函数的鲁棒特征中的可读静态字符串和外部函数,确定所述外部语义图中的字符串节点和函数节点;
在所述外部语义图中的第一函数节点与目标函数节点之间构建一条边,所述第一函数节点为所述搜索对象中的各个函数中,与所述目标函数存在调用关系的函数对应的节点,所述目标函数节点为所述目标函数对应的节点;
在所述外部语义图中的第二函数节点与所述目标函数节点之间构建一条边,所述第二函数节点为所述搜索对象中的各个函数对应的外部函数中,与所述目标函数使用同一个全局数据的函数对应的节点,所述全局数据是根据所述提取到的所述目标函数和所述搜索对象中的各个函数的鲁棒特征确定的;
在所述外部语义图中的第三函数节点与所述目标函数节点之间构建一条边,所述第三函数节点为所述搜索对象中的各个函数对应的函数中,与所述目标函数之间存在地址依赖关系的函数对应的节点;
在所述外部语义图中的函数节点与目标字符串节点之间构建一条边,所述目标字符串节点为所述字符串节点对应的字符串中,与所述函数节点使用的字符串相同的字符串节点。
4.根据权利要求2所述的相似代码搜索方法,其特征在于,所述第一语义嵌入和所述第二语义嵌入的获取方式,包括:
根据所述外部语义图的向量表示,确定所述目标函数和所述搜索对象的各个函数的外部语义嵌入;
利用内部语义学习方法,确定所述目标函数和所述搜索对象的各个函数的内部语义嵌入;
根据所述目标函数的外部语义嵌入和所述目标函数的内部语义嵌入,确定所述第一语义嵌入;
根据所述搜索对象的各个函数的外部语义嵌入和和所述搜索对象的各个函数的内部语义嵌入,确定所述第二语义嵌入。
5.根据权利要求1所述的相似代码搜索方法,其特征在于,所述根据所述相似度,从所述搜索对象中筛选出与所述目标代码文件相似的代码文件,包括:
从所述搜索对象中的各个函数中筛选出与所述目标函数之间的相似度大于等于预设值的一个或多个相似函数;
从所述搜索对象中,确定所述一个或多个相似函数所在的代码文件;
根据所述一个或多个相似函数所在代码文件,确定与所述目标代码文件相似的代码文件。
6.根据权利要求1-5任一项所述的相似代码搜索方法,其特征在于,在所述根据多个代码文件对应的函数集,获取目标代码文件中的目标函数和所述搜索对象中的各个函数之间的相似度之前,所述方法还包括:
将所述多个代码文件进行反汇编,获取所述多个代码文件对应的所述函数集。
7.一种相似代码搜索系统,其特征在于,包括:获取模块以及搜索模块;
所述获取模块,用于根据多个代码文件对应的函数集,获取目标代码文件中的目标函数和搜索对象中的各个函数之间的相似度,所述多个代码文件包括目标代码文件和搜索对象,所述搜索对象包括一个或多个代码文件,所述相似度是根据所述目标函数的第一语义嵌入和所述搜索对象中的各个函数的第二语义嵌入确定的,所述第一语义嵌入是根据所述目标函数的外部语义嵌入和内部语义嵌入确定的,所述第二语义嵌入是根据所述搜索对象中的各个函数的外部语义嵌入和内部语义嵌入确定的;
所述搜索模块,用于根据所述相似度,从所述搜索对象中筛选出与所述目标代码文件相似的代码文件。
8.一种电子设备,包括处理器和存储有计算机程序的存储器,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6任一项所述相似代码搜索方法。
9.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至6任一项所述相似代码搜索方法。
10.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述相似代码搜索方法。
CN202310790290.3A 2023-06-29 2023-06-29 相似代码搜索方法及系统 Pending CN117033546A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310790290.3A CN117033546A (zh) 2023-06-29 2023-06-29 相似代码搜索方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310790290.3A CN117033546A (zh) 2023-06-29 2023-06-29 相似代码搜索方法及系统

Publications (1)

Publication Number Publication Date
CN117033546A true CN117033546A (zh) 2023-11-10

Family

ID=88641874

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310790290.3A Pending CN117033546A (zh) 2023-06-29 2023-06-29 相似代码搜索方法及系统

Country Status (1)

Country Link
CN (1) CN117033546A (zh)

Similar Documents

Publication Publication Date Title
Wu et al. Visual transformers: Token-based image representation and processing for computer vision
CN111639344B (zh) 一种基于神经网络的漏洞检测方法及装置
US10380236B1 (en) Machine learning system for annotating unstructured text
Volpi et al. Continual adaptation of visual representations via domain randomization and meta-learning
CN111382868B (zh) 神经网络结构搜索方法和神经网络结构搜索装置
CN112132179A (zh) 基于少量标注样本的增量学习方法及系统
Lee et al. Multimodal prompting with missing modalities for visual recognition
JP2018533153A (ja) 機械学習に基づくネットワークモデル構築方法及び装置
JP2015095212A (ja) 識別器、識別プログラム、及び識別方法
US11803971B2 (en) Generating improved panoptic segmented digital images based on panoptic segmentation neural networks that utilize exemplar unknown object classes
CN110555305A (zh) 基于深度学习的恶意应用溯源方法及相关装置
CN113128622B (zh) 基于语义-标签多粒度注意力的多标签分类方法及系统
Yang et al. Deep attention-guided hashing
Chu et al. Visualization feature and CNN based homology classification of malicious code
CN115471771A (zh) 一种基于语义级时序关联建模的视频时序动作定位方法
Manna et al. Bird image classification using convolutional neural network transfer learning architectures
CN113254649B (zh) 敏感内容识别模型的训练方法、文本识别方法及相关装置
CN114416159A (zh) 基于信息增强调用序列的api推荐方法及装置
CN113821657A (zh) 基于人工智能的图像处理模型训练方法及图像处理方法
CN116070786B (zh) 基于事件演化图的多标记事件预测方法、装置和介质
Wang et al. Meta reasoning over knowledge graphs
Wang et al. An automated hybrid approach for generating requirements trace links
Sharif et al. Function identification in android binaries with deep learning
CN116306672A (zh) 一种数据处理方法及其装置
CN117033546A (zh) 相似代码搜索方法及系统

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