CN116992440A - 代码匹配方法、装置、电子设备和存储介质 - Google Patents

代码匹配方法、装置、电子设备和存储介质 Download PDF

Info

Publication number
CN116992440A
CN116992440A CN202210405253.1A CN202210405253A CN116992440A CN 116992440 A CN116992440 A CN 116992440A CN 202210405253 A CN202210405253 A CN 202210405253A CN 116992440 A CN116992440 A CN 116992440A
Authority
CN
China
Prior art keywords
code
sample
pseudo
source
codes
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
CN202210405253.1A
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.)
Shenzhen Tencent Domain Computer Network Co Ltd
Original Assignee
Shenzhen Tencent Domain Computer Network Co Ltd
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 Shenzhen Tencent Domain Computer Network Co Ltd filed Critical Shenzhen Tencent Domain Computer Network Co Ltd
Priority to CN202210405253.1A priority Critical patent/CN116992440A/zh
Publication of CN116992440A publication Critical patent/CN116992440A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/563Static detection by source code analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请提供了一种代码匹配方法、装置、电子设备和存储介质,涉及人工智能技术领域,可以应用于云技术、人工智能、智慧交通、辅助驾驶等各种场景,方法包括获取待识别程序对应的待识别伪代码;基于待识别伪代码在源代码特征库中进行相似代码搜索,得到待识别伪代码对应的多条候选源代码;将多条候选源代码分别与待识别伪代码进行组合,得到多个代码对;对多个代码对进行分类识别处理,得到分类识别结果,分类识别结果表征多个代码对中的候选源代码与待识别伪代码间的同源概率;基于分类识别结果从多条候选源代码中确定出与待识别程序匹配的目标源代码。本申请能够有效提高代码匹配精度,降低系统部署难度。

Description

代码匹配方法、装置、电子设备和存储介质
技术领域
本申请涉及人工智能技术领域,尤其涉及一种代码匹配方法、装置、电子设备和存储介质。
背景技术
逆向分析是软件安全领域中的重要任务之一,在逆向分析过程中,需要对程序代码进行分析,如分析程序机器语言的具体含义,目前通常采用逆向分析工具将程序机器语言转换为伪代码,但伪代码缺少变量名等关键信息,可读性差,因此更希望直接得到程序机器语言对应的源代码,以获取详细的代码信息。
相关技术中通常提取二进制代码等机器语言和源代码中具有抗编译优化特性的代码特征串,如字符串、导出函数、字符串数组和全局常量数组等,然后基于代码特征串进行二进制代码和源代码间的匹配。然而,由于不同伪代码或源代码间广泛存在特征串复用,以及对作用一致的高度语义化建模采用不同编写方式等问题,代码特征串匹配方法的误匹配率高,准确性较差,无法满足逆向分析要求。因此,需提供一种改进的代码匹配方案,以提高匹配准确率和逆行分析结果的可靠性。
发明内容
本申请提供了一种代码匹配方法、装置、设备和存储介质,可以显著提高代码匹配的准确率和可靠性。
一方面,本申请提供了一种代码匹配方法,所述方法包括:
获取待识别程序对应的待识别伪代码;
基于所述待识别伪代码在源代码特征库中进行相似代码搜索,得到所述待识别伪代码对应的多条候选源代码;
将所述多条候选源代码分别与所述待识别伪代码进行组合,得到多个代码对;
对所述多个代码对进行分类识别处理,得到分类识别结果,所述分类识别结果表征所述多个代码对中的候选源代码与所述待识别伪代码间的同源概率;
基于所述分类识别结果从所述多条候选源代码中确定出与所述待识别程序匹配的目标源代码。
另一方面提供了一种代码匹配装置,所述装置包括:
伪代码获取模块:用于获取待识别程序对应的待识别伪代码;
相似代码搜索模块:用于基于所述待识别伪代码在源代码特征库中进行相似代码搜索,得到所述待识别伪代码对应的多条候选源代码;
代码组合模块:用于将所述多条候选源代码分别与所述待识别伪代码进行组合,得到多个代码对;
分类识别模块:用于对所述多个代码对进行分类识别处理,得到分类识别结果,所述分类识别结果表征所述多个代码对中的候选源代码与所述待识别伪代码间的同源概率;
源代码确定模块:用于基于所述分类识别结果从所述多条候选源代码中确定出与所述待识别程序匹配的目标源代码。
另一方面提供了一种计算机设备,所述设备包括处理器和存储器,所述存储器中存储有至少一条指令或至少一段程序,所述至少一条指令或所述至少一段程序由所述处理器加载并执行以实现如上述的代码匹配方法。
另一方面提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令或至少一段程序,所述至少一条指令或所述至少一段程序由处理器加载并执行以实现如上述的代码匹配方法。
另一方面提供了一种服务器,所述服务器包括处理器和存储器,所述存储器中存储有至少一条指令或至少一段程序,所述至少一条指令或所述至少一段程序由所述处理器加载并执行以实现如上述的代码匹配方法。
另一方面提供了一种终端,所述终端包括处理器和存储器,所述存储器中存储有至少一条指令或至少一段程序,所述至少一条指令或所述至少一段程序由所述处理器加载并执行以实现如上述的代码匹配方法。
另一方面提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令被处理器执行时实现如上述的代码匹配方法。
本申请提供的代码匹配方法、装置、设备、存储介质、服务器、终端、计算机程序和计算机程序产品,具有如下技术效果:
本申请的技术方案通过获取待识别程序对应的待识别伪代码;基于待识别伪代码在源代码特征库中进行相似代码搜索,得到伪代码特征对应的多条候选源代码;将多条候选源代码分别与待识别伪代码进行组合,得到多个代码对;对多个代码对进行分类识别处理,得到分类识别结果,分类识别结果表征多个代码对中的候选源代码与待识别伪代码间的同源概率;基于分类识别结果从多条候选源代码中确定出与待识别程序匹配的目标源代码。通过该技术方案,基于源代码特征和伪代码特征进行代码理解、匹配及分类识别,可以对整体代码进行宏观语义的相似性判断,不受代码文本语言、细节语法和复杂匹配规则的限制,能够实现伪代码和源代码间的跨语言文本精准匹配,并且,先基于代码特征进行候选源代码筛选,然后进行候选源代码与待识别伪代码间的分类识别,能够兼顾召回准确率和分类准确率的优化,显著提高代码匹配精度,降低系统部署难度。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案和优点,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它附图。
图1是本申请实施例提供的一种应用环境的示意图;
图2是本申请实施例提供的一种代码匹配方法的流程示意图;
图3是本申请实施例提供的另一种代码匹配方法的流程示意图;
图4是本申请实施例提供的另一种代码匹配方法的流程示意图;
图5是本申请实施例提供的另一种代码匹配方法的流程示意图;
图6是本申请实施例提供的另一种代码匹配方法的流程示意图;
图7是本申请实施例提供的另一种代码匹配方法的流程示意图;
图8是本申请实施例提供的另一种代码匹配方法的流程示意图;
图9是本申请实施例提供的一种代码精排模型的框架示意图;
图10是本申请实施例提供的另一种代码精排模型的框架示意图;
图11是本申请实施例提供的另一种代码匹配方法的流程原理图;
图12是本申请实施例提供一种代码匹配装置的框架示意图;
图13是本申请实施例提供的一种代码匹配方法的电子设备的硬件结构框图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或子模块的过程、方法、系统、产品或服务器不必限于清楚地列出的那些步骤或子模块,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或子模块。
对本申请实施例进行进一步详细说明之前,对本申请实施例中涉及的名词和术语进行说明,本申请实施例中涉及的名词和术语适用于如下的解释。
源代码:也称源程序,是指未编译的按照一定的程序设计语言规范书写的文本文件,指一系列人类可读的计算机语言指令。在现代程序语言中,源代码可以是以书籍或者磁带的形式出现,最常用的格式是文本文件,这种典型格式的目的是为了编译出计算机程序。计算机源代码的最终目的是将人类可读的文本翻译成为计算机可以执行的二进制指令,这种过程叫做编译,通过编译器完成。
IDA(Interactive Disassembler,交互式反汇编器):IDA反编译程序和调试器是一个交互式、可编程、可扩展的多处理器反编译程序,托管在Windows,Linux或Mac OS X上,可将二进制代码转化为伪代码。
机器语言:是机器能直接识别的程序语言或指令代码,无需经过翻译,每一操作码在计算机内部都有相应的电路来完成它,或指不经翻译即可为机器直接理解和接受的程序语言或指令代码。机器语言使用绝对地址和绝对操作码。不同的计算机都有各自的机器语言,即指令系统。从使用的角度看,机器语言是最低级的语言。
二进制代码:由两个基本字符0、1组成的代码。其中,码元:“一位”二进制代码。码字:N个码元可以组成的不同组合,任意一个组合称一个码字。
伪代码:又称为虚拟代码,是高层次描述算法的一种方法。它不是一种现实存在的编程语言,它可能综合使用多种编程语言的语法、保留字,甚至会用到自然语言。它以编程语言的书写形式指明算法的职能。
神经网络:神经网络是一个具有相连节点层的计算模型,其分层结构与大脑中的神经元网络结构相似。神经网络可通过数据进行学习,以训练其识别模式、对数据分类和预测未来事件。
Bert:Bidirectional Encoder Representations from Transformers,基于变换器的双向编码器表示技术,用于自然语言处理的预训练技术,可用于序列性输入的向量建模。。
TEXTCNN(Text Convolutional Neural Networks,文本卷积神经网络):结合卷积神经网络的一类序列性输入向量建模算法。
召回:从海量内容中查找相似的多个内容,结果内容的数目量级较大。
精排:对召回侧中找到的多个相似内容进行精细化排序,获得最为相近的内容。
人工智能(Artificial Intelligence,AI)是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。换句话说,人工智能是计算机科学的一个综合技术,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。人工智能也就是研究各种智能机器的设计原理与实现方法,使机器具有感知、推理与决策的功能。
人工智能技术是一门综合学科,涉及领域广泛,既有硬件层面的技术也有软件层面的技术。人工智能基础技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理技术、操作/交互系统、机电一体化等技术。人工智能软件技术主要包括计算机视觉技术、语音处理技术、自然语言处理技术以及机器学习/深度学习等几大方向。
计算机视觉技术(Computer Vision,CV)计算机视觉是一门研究如何使机器“看”的科学,更进一步的说,就是指用摄影机和电脑代替人眼对目标进行识别和测量等机器视觉,并进一步做图形处理,使电脑处理成为更适合人眼观察或传送给仪器检测的图像。作为一个科学学科,计算机视觉研究相关的理论和技术,试图建立能够从图像或者多维数据中获取信息的人工智能系统。计算机视觉技术通常包括图像处理、图像识别、图像语义理解、图像检索、OCR、视频处理、视频语义理解、视频内容/行为识别、三维物体重建、3D技术、虚拟现实、增强现实、同步定位与地图构建等技术,还包括常见的人脸识别、指纹识别等生物特征识别技术。
自然语言处理(Nature Language processing,NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,所以它与语言学的研究有着密切的联系。自然语言处理技术通常包括文本处理、语义理解、机器翻译、机器人问答、知识图谱等技术。
近年来,随着人工智能技术研究和进步,人工智能技术在多个领域得到广泛应用,本申请实施例提供的方案涉及人工智能的机器学习/深度学习和自然语言处理等技术,具体通过如下实施例进行说明。
请参阅图1,图1是本申请实施例提供的一种应用环境的示意图,如图1所示,该应用环境可以至少包括终端01和服务器02。在实际应用中,终端01和服务器02可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
本申请实施例中的服务器02可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器。
具体地,云技术(Cloud technology)是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。云技术能够应用于各种领域,如医疗云、云物联、云安全、云教育、云会议、人工智能云服务、云应用、云呼叫和云社交等,云技术基于云计算(cloud computing)商业模式应用,它将计算任务分布在大量计算机构成的资源池上,使各种应用系统能够根据需要获取计算力、存储空间和信息服务。提供资源的网络被称为“云”,“云”中的资源在使用者看来是可以无限扩展的,并且可以随时获取,按需使用,随时扩展,按使用付费。作为云计算的基础能力提供商,会建立云计算资源池(简称云平台,一般称为IaaS(Infrastructure as a Service,基础设施即服务))平台,在资源池中部署多种类型的虚拟资源,供外部客户选择使用。云计算资源池中主要包括:计算设备(为虚拟化机器,包含操作系统)、存储设备、网络设备。
按照逻辑功能划分,在IaaS层上可以部署PaaS(Platform as a Service,平台即服务)层,PaaS层之上再部署SaaS(Software as a Service,软件即服务)层,也可以直接将SaaS部署在IaaS上。PaaS为软件运行的平台,如数据库、web容器等。SaaS为各式各样的业务软件,如web门户网站、短信群发器等。一般来说,SaaS和PaaS相对于IaaS是上层。
具体地,上述涉及的服务器02可以包括实体设备,可以具体包括有网络通信子模块、处理器和存储器等等,也可以包括运行于实体设备中的软体,可以具体包括有应用程序等。
具体地,终端01可以包括智能手机、台式电脑、平板电脑、笔记本电脑、数字助理、增强现实(augmented reality,AR)/虚拟现实(virtual reality,VR)设备、智能语音交互设备、智能家电、智能可穿戴设备、车载终端设备等类型的实体设备,也可以包括运行于实体设备中的软体,例如应用程序等。
本申请实施例中,终端01可以用于向服务器02发送代码匹配指令和待识别程序,以使服务器02执行对应的代码匹配操作。服务器02可以用于提供代码匹配服务,以得到与待识别程序匹配的目标源代码。可以理解的,终端01也可以用于对待识别程序的机器语言文本进行反编译,得到待识别伪代码,以及将待识别伪代码发送至服务器02,以触发代码匹配服务。具体的,服务器02还可以用于提供第一预训练模型和第二预训练模型的模型训练服务,以得到代码召回模型和代码精排模型,以及还可以用于存储源代码特征库、样本代码集、召回训练样本集和精排训练样本集等。
此外,可以理解的是,图1所示的仅仅是一种代码匹配方法的应用环境,该应用环境可以包括更多或更少的节点,本申请在此不做限制。
本申请实施例涉及的应用环境,或应用环境中的终端01和服务器02等可以是由客户端、多个节点(接入网络中的任意形式的计算设备,如服务器、用户终端)通过网络通信的形式连接形成的分布式系统。分布式系统可以为区块链系统,该区块链系统可以提供上述的代码匹配服务和数据存储服务等。
以下基于上述应用环境介绍本申请的一种代码匹配方法,本申请实施例可应用于各种场景,包括但不限于云技术、人工智能、智慧交通、辅助驾驶等。请参考图2,图2是本申请实施例提供的一种代码匹配方法的流程示意图,本说明书提供了如实施例或流程图的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的系统或服务器产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。具体地,如图2所示,方法可以包括下述步骤S201-S209。
S201:获取待识别程序对应的待识别伪代码。
本申请实施例中,待识别伪代码可以为对待识别程序的机器语言文本进行反编译得到的。机器语言是机器能直接识别的程序语言或指令代码,如二进制代码等,对机器语言进行反编译可以得到相应的伪代码,如通过反编译工具IDA得到伪代码。具体的,待识别程序的机器语言文本可以是由整体的程序源文件编译得到的,也可以是对程序文件中的单个业务源文件进行编译得到的,还可以是对业务源文件中的功能代码段进行编译得到的。
S203:基于待识别伪代码在源代码特征库中进行相似代码搜索,得到待识别伪代码对应的多条候选源代码。
本申请实施例中,源代码特征库包括多个机器语言文本对应的源代码特征,源代码特征为对源代码进行特征提取得到的。具体的,可以基于源代码表征模型进行源代码的向量化表征,实现特征提取。具体的,可以通过代码召回模型对待识别伪代码进行特征提取,得到待识别代码特征,基于待识别代码特征对源代码特征库中的源代码特征进行相似代码召回,得到多条候选源代码特征,将候选源代码特征对应的源代码确定为候选源搜索,实现源代码召回。该源代码表征模型可以与代码召回模型相同,即基于相同的样本训练集和训练任务得到;或者二者不同,如模型架构相同,但基于不同的样本训练集和训练任务得到。
实际应用中,可以通过不止一种代码召回模型实现源代码的联合召回,相应的,请参考图3,S203可以包括下述步骤S2031-S2033。
S2031:基于至少一种代码召回模型分别对待识别伪代码进行特征提取,得到至少一种伪代码特征。
S2032:基于至少一种伪代码特征在源代码特征库中进行相似代码搜索,得到至少一种伪代码特征对应的初始源代码。
S2033:对至少一种伪代码特征对应的初始源代码进行去重处理,得到多条候选源代码。
具体实施例中,在联合召回的情况下,设置至少两种代码召回模型和至少两个源代码特征库,源代码特征库和代码召回模型一一对应设置。基于每一代码召回模型,对待识别伪代码进行特征提取,得到每一代码召回模型对应的伪代码特征;进而针对每一伪代码特征,在其对应的源代码特征库中进行相似代码搜索,并对不同代码召回模型在相应源代码特征库中召回的初始源代码进行去重,得到多条候选源代码。具体的,源代码特征库中的源代码特征是通过对应的代码召回模型对源代码进行特征提取得到的。
示例性的,通过第一代码召回模型对待识别伪代码进行特征提取,得到第一伪代码特征,在第一代码召回模型对应的源代码特征库中搜索与第一伪代码特征相似的源代码特征,得到满足第一相似条件的第一源代码特征,将第一源代码特征所属的源代码确定为第一初始源代码。通过第二代码召回模型对待识别伪代码进行特征提取,得到第二伪代码特征,在第二代码召回模型对应的源代码特征库中搜索与第二伪代码特征相似的源代码特征,得到满足第一相似条件的第二源代码特征,将第二源代码特征对应的源代码确定为第二初始源代码。对第一初始源代码和第二初始源代码进行去重,得到多条候选源代码。一些实施例中,第一代码召回模型可以基于BERT构建,第二代码召回模型可以基于TextCNN构建。
如此,通过设置多种代码召回模型和相适配的源代码特征库,将待识别伪代码映射至不同特征空间,以进行代码语义理解和提取,提高语义提取的全面性,并在不同特征空间的源代码库中进行联合召回,能够优化召回的覆盖率,弥补单一模型的召回率问题,避免源代码漏检,有利于代码精排模型的模型准确度和模型效果。
一些实施例中,S2032可以具体包括:对至少一种伪代码特征和源代码特征库中的源代码特征进行相似度处理,得到特征相似度结果;基于特征相似度结果从源代码特征库中筛选出初始源代码特征;将初始源代码特征对应的源代码作为初始源代码。
具体的,特征相似度结果包括源代码特征库中每一源代码特征与伪代码特征间的特征相似度。在联合召回的情况下,针对每一种伪代码特征,对相应源代码特征库中的每一源代码特征和该伪代码特征进行相似度计算,得到每一源代码特征与伪代码特征间的特征相似度。然后,基于该特征相似度对相应源代码特征库中的源代码特征进行排序,取特征相似度最高的第一预设数量个源代码特征作为初始源代码特征,第一预设数量可以例如为50个;或者,将特征相似度大于等于预设相似度的源代码特征作为初始源代码特征。相应的,上述满足第一相似条件可以具体为:源代码特征的特征相似度排序在预设排序前或者特征相似度大于等于预设相似度。
需要说明的是,针对不同的代码召回模型,可以设置相同的第一预设数量或预设相似度,也可以分别设置不同的第一预设数量或预设相似度。
S205:将多条候选源代码分别与待识别伪代码进行组合,得到多个代码对。
本申请实施例中,将每一候选源代码与待识别伪代码组成代码对,以作为后续分类识别处理的输入,进而识别每一代码对中的候选源代码和待识别伪代码是否同源。
S207:对多个代码对进行分类识别处理,得到分类识别结果。
本申请实施例中,分类识别结果表征多个代码对中的候选源代码与待识别伪代码间的同源概率,同源概率表征候选源代码与待识别伪代码属于同一机器语言文本的概率。具体的,分类识别结果包括多个代码对中的每一代码对的分类标签和预测的分类概率。其中,分类标签包括同源标签和非同源标签,表征候选源代码与待识别伪代码是否同源,同源标签的标识可以为1,非同源标签的标识可以为0,分类概率表征代码对的分类标签为同源标签的概率。具体的,可以基于代码精排模型对每一代码对进行分类识别处理,得到上述分类标签和同源概率,代码精排模型可以为基于正样本代码对、负样本代码对和对应的样本对标签,对第一预训练模型进行正负样本对识别的约束训练得到的。
一些实施例中,对每一代码对中的候选源代码和待识别伪代码进行拼接处理,得到目标拼接代码,以作为代码精排模型的输入。
S209:基于分类识别结果从多条候选源代码中确定出与待识别程序匹配的目标源代码。
具体的,目标源代码可以对应于待识别程序的整体程序源文件,或业务源文件,或业务源文件中的功能代码段。目标源代码可以用于代码反解析,在安防等场景辅助工程师实现风险控制。
综上,基于源代码特征和伪代码特征进行代码理解、匹配及分类识别,可以对整体代码进行宏观语义的相似性判断,不受代码文本语言、细节语法和复杂匹配规则的限制,能够实现伪代码和源代码间的跨语言文本精准匹配,并且,先基于代码特征进行候选源代码筛选,然后进行候选源代码与待识别伪代码间的分类识别,能够兼顾召回准确率和分类准确率的优化,显著提高代码匹配精度,降低系统部署难度。
本申请实施例中,目标源代码为与待识别代码同源且相似度满足第二相似条件的候选源代码,相应的,请参考图4,S209可以包括下述步骤S2091-S2093。
S2091:基于分类识别结果从多条候选源代码中筛选出满足预设分类条件的目标候选源代码。
S2092:基于分类识别结果对目标候选源代码进行排序,得到相似度排序结果。
S2093:根据相似度排序结果,从目标候选源代码中筛选出目标源代码。
如前述的,分类识别结果包括每一代码对的分类标签和分类概率,满足预设分类条件可以为分类标签为同源标签,即筛选出分类结果为与待识别伪代码同源的候选源代码,作为目标候选源代码。
进一步的,基于分类概率对筛选出的目标候选源代码进行排序,将分类概率最高的第二预设数量个目标候选源代码作为目标源代码,第二预设数量可以例如为10。一些实施例中,也可以将分类概率最高的预设比例的目标候选源代码作为目标源代码,预设比例可以例如为全部目标候选源代码中的前10%。另一些实施例中,也可以将分类概率高于预设概率的目标候选源代码作为目标源代码。相应的,第二相似条件可以为:目标候选源代码的分类概率排序在预设排序前或者分类概率大于等于预设概率。
如此,首选确定出同源标签的候选源代码,然后再基于分类概率筛选出目标源代码,避免误匹配到非同源标签的候选源代码,提高代码匹配的准确率。
基于上述部分或全部实施方式,一些实施例中,待识别程序的机器语言文本源于整体程序文件中的单个业务源文件或业务源文件中的功能代码段,相应的,在S201之前,方法还可以包括待识别程序的机器语言文本的获取步骤。一些情况下,该获取步骤具体包括:获取程序源文件对应的目标机器语言文本,基于程序文件的业务源文件信息对目标机器语言文本进行分割处理,得到每一业务源文件对应的待识别机器语言文本和文本位置信息,或者,基于程序源文件的业务源文件信息和功能模块信息对目标机器语言文本进行分割处理,得到每一功能模块对应的待识别机器语言文本和相应的文本位置信息。其中,业务源文件信息指示业务源文件与目标机器语言文本中文本块间的对应关系,功能模块信息指示单个业务源文件中功能模块与目标机器语言文本中文本块间的对应关系,文本位置信息表征待识别机器语言文本在目标机器语言文本中的位置,如文本块位序。
进一步地,在得到目标源代码后,基于上述文本位置信息对各个待识别机器语言文本的目标源代码进行拼接,以得到目标机器语言文本对应的源代码文本。
另一些情况下,该获取步骤具体包括:获取程序文件对应的目标机器语言文本,对目标机器语言文本进行反编译处理,得到目标伪代码文本;基于程序源文件的业务源文件信息对目标伪代码文本进行分割处理,得到每一业务源文件对应的待识别伪代码和相应的位置信息,或者基于程序源文件的业务源文件信息和功能模块信息对目标伪代码文本进行分割处理,得到每一功能模块对应的待识别伪代码和相应的位置信息。其中,位置信息表征待识别伪代码在目标伪代码文本中的位置。可以理解的,根据待识别伪代码的位置信息,以及目标伪代码文本与目标机器语言文本间的对应关系,可以确定待识别伪代码在目标机器语言文本中对应的文本块。
进一步地,在得到目标源代码后,基于上述待识别伪代码的位置信息对目标源代码进行拼接,以得到目标机器语言文本对应的源代码文本。
如此,基于业务源文件信息或功能模块信息对程序文件进行拆分,并分段识别和匹配,能够降低模型学习难度,提高模型匹配准确率和鲁棒性。
基于上述部分或全部实施方式,本申请实施例中,请参考图5,方法还可以包括下述代码召回模型的构建步骤S301-S303。
S301:获取召回训练样本集,召回训练样本集包括样本伪代码,以及样伪代码对应的正样本源代码和负样本源代码。
S303:以样本伪代码,以及样伪代码对应的正样本源代码和负样本源代码作为第一预训练模型的输入,基于自监督对比学习方法对第一预训练模型进行正负样本源代码分类的约束训练,得到代码召回模型。
实际应用中,正样本源代码与样本伪代码同源,负样本源代码与样本伪代码非同源,样本伪代码及其对应的正样本源代码和负样本源代码组成样本三元组,以作为第一预训练模型的输入,对第一预训练模型进行对比学习的迭代训练;训练过程中,第一预训练模型对样本伪代码、正样本源代码和负样本源代码进行特征提取和分类识别,得到样本伪代码和正样本源代码间的第一特征距离,以及样本伪代码和负样本源代码间的第二特征距离,模型损失优化的目标为拉近第一特征距离,拉远第二特征距离,至满足训练收敛条件,如迭代次数达到预设次数。一些实施例中,可以基于余弦相似度方法得到上述特征距离,第一预训练模型可以基于BERT或TextCNN构建,损失函数可以为三元损失函数(tripletloss)。
实际应用中,请参考图6,S301可以具体包括下述步骤S3011-S3013。
S3011:获取样本代码集,样本代码集包括样本源代码,以及与样本源代码匹配的至少一条样本伪代码。
具体实施例中,与样本源代码匹配的至少一条样本伪代码对应至少一种编译类型的机器语言文本。具体的,同一样本源代码对应的至少一条样本伪代码是对至少一种编译类型的机器语言文本进行反编译得到的,或者是基于至少一种反编译类型对同一机器语言文本进行反编译得到的。可以理解的,针对同一样本源代码,通过不同编译类型所得到的机器语言文本不同,进而对其反编译所得到的样本伪代码也不同,或者,同一机器语言文本通过不同反编译类型所得到的样本伪代码也不同。如在不同机器平台或不同机型上编译得到的机器语言文本的文本内容互不相同,在不同机器平台或不同机型上对同一机器语言文本进行反编译所得到的样本伪代码的文本内容互不相同。
S3012:以与至少一条样本伪代码匹配的样本源代码作为正样本源代码,以与至少一条样本伪代码不匹配的样本源代码作为负样本源代码,对样本代码集进行三元组采样,得到多个样本三元组。
S3013:基于多个样本三元组构建召回训练样本集。
具体实施例中,相匹配的样本源代码与样本伪代码为同源代码,样本代码集中每一样本源代码可以具有多个相匹配的样本伪代码。具体的,针对样本代码集中的每一样本伪代码,取其相匹配的样本源代码为正样本,再采样一条非匹配的样本源代码作为负样本,形成样本三元组,进而得到包括多个样本三元组的召回训练样本集。如此,基于不同编译类型或反编译类型进行伪代码扩展,提高不同类型伪代码文本的覆盖率,以优化召回模型和精排模型的语义理解全面性和模型效果。并且,以伪代码作为采样源,进行三元组匹配,能够提高三元组采样量,有利于训练数据增强和模型训练效果。
示例性的,选取业务使用的10000条源代码作为样本源代码,及其在10种机器平台上编译的二进制代码文本对应的伪代码作为样本伪代码,以构成样本代码集,样本伪代码数量为10*10000条。对该样本代码集中的每一样本伪代码进行三元组采样,同一源代码对应10*10000个样本三元组。
基于上述部分或全部实施方式,本申请实施例中,请参考图7,方法还可以包括下述代码精排模型的构建步骤S401-S403。
S401:获取精排训练样本集,精排训练样本集包括正样本代码对、负样本代码对和对应的样本对标签。
S403:以正样本代码对和负样本代码对作为第二预训练模型的输入,以样本对标签作为期望输出,对第二预训练模型进行正负样本对分类的约束训练,得到代码精排模型。
实际应用中,正样本代码对由样本伪代码和与其匹配的样本源代码构成,样本对标签为同源标签,标记为1,负样本对由样本伪代码和与其不匹配的样本源代码构成,样本对标签为非同源标签,标记为0。训练过程中,第二预训练模型对样本代码对中的样本伪代码和样本源代码进行特征提取和分类识别的迭代训练,损失函数可以为交叉熵损失(crossentropy loss)。具体的,第二预训练模型的输入可以为样本伪代码和样本源代码的拼接序列。一些实施例中,第二预训练模型可以基于BERT模型构建,则输入为“[CLS]样本源代码[SEP]样本为代码”,输出为样本对标签1或0。如此,基于代码召回模型进行相似代码的初步召回,并基于代码精排模型进行候选源代码的分类识别,对代码匹配过程进行分步拆分,单独进行代码召回模型和代码精排模型的训练优化,并行优化召回准确率和分类识别准确率,降低单步操作中对模型的性能要求和系统部署难度,提高系统鲁棒性。
实际应用中,请参考图8,S401可以具体包括下述步骤S4011-S4013。
S4011:基于代码召回模型和样本代码集中的每一样本源代码对样本代码集中的样本伪代码进行召回,得到每一样本源代码对应的参考伪代码集。
S4012:将每一样本源代码分别与参考伪代码集中的样本伪代码进行组合,得到正样本代码对和负样本代码对。
S4013:基于正样本代码对和负样本代码对构建精排训练样本集。
具体实施例中,基于前述训练得到的代码召回模型,以每一样本源代码为召回锚点,在样本代码集中进行样本伪代码召回,得到代码召回模型识别出的与该样本源代码相似的样本伪代码,得到参考伪代码集,该代码召回过程与前述步骤S203相类似。如此,以样本源代码作为召回锚点,能够召回多种编译类型的同源样本伪代码,提高正样本对比例,有利于扩展和均衡训练数据,增加精排训练样本集中的有效代码对数量,优化模型训练效果。
进一步地,将参考伪代码集中的每一样本伪代码与对应的样本源代码组合,形成样本代码对,在样本源代码与样本伪代码为同源代码的情况下,标记为正样本代码对,即同源标签,反之标记为负样本代码对,即非同源标签,进而得到精排训练样本集。
示例性的,样本代码集中包括10000条源代码,以及10*10000条属于不同机器平台的样本伪代码,通过10000条样本源代码进行相似代码召回,每条样本源代码召回50条样本伪代码构成的参考伪代码集,参考伪代码集包括与该样本源代码同源的分属于不同机器平台的正样本伪代码,以及非同源的负样本伪代码。样本源代码与正样本伪代码组合成正确匹配的正样本对代码对,样本对标签标记为1,样本源代码与负样本伪代码组合成代码召回模型难以区分的非匹配的负样本代码对,样本对标签标记为0,进而生成精排训练样本集,用于对第二预训练模型进行迭代训练,得到代码精排模型。
基于上述部分或全部实施方式,在一些实施例中,代码精排模型基于代码对的文本特征进行分类识别处理,请参考图9,包括分词处理模块、特征提取模块、分类识别模块和输出层。相应的,S207可以具体包括:对待识别伪代码和候选源代码进行组合后,对每一代码对进行拼接处理,得到目标拼接代码,以作为代码精排模型的输入;然后,基于分词处理模块对目标拼接代码进行分词处理,得到拼接分词序列,进而基于特征提取模块对拼接分词序列进行特征提取,得到拼接特征序列,该拼接特征序列包括待识别伪代码的伪代码分词特征序列和候选源代码的源代码分词特征序列;进一步地,基于分类识别模块对拼接特征序列进行分类识别处理,具体可以为对伪代码分词特征序列和源代码分词特征序列进行相似度处理,得到候选源代码和待识别伪代码间的特征距离,基于特征距离确定二者同源的分类概率,在分类概率高于预设概率的情况下,确定其分类标签为1,否者分类标签为0;进而通过输出层输出上述分类概率和分类标签。
在另一些实施例中,代码精排模型基于代码对的多模态特征进行分类识别处理,请参考图10,包括分词处理模块、特征提取模块、特征融合模块、分类识别模块和输出层,其中特征提取某块包括分词特征提取子模块和图像特征提取子模块。相应的,S207可以具体包括下述步骤S2071-S2075。
S2071:对多个代码对中的待识别伪代码和候选源代码进行文本特征提取,得到伪代码文本特征和源代码文本特征。
具体的,基于分词处理模块对每一代码对进行分词处理和位置提取处理,得到伪代码分词序列和源代码分词序列,以及伪代码分词的位置信息和源代码分词的位置信息;并基于分词特征提取子模块对伪代码分词序列和伪代码分词的位置信息,以及源代码分词序列和源代码分词的位置信息进行特征提取,得到伪代码文本特征和源代码文本特征。其中,伪代码分词的位置信息包括该伪代码分词在待识别伪代码中的伪代码分词位序,源代码分词的位置信息包括源代码分词在候选源代码中源代码分词位序。
S2072:对多个代码对中的待识别伪代码和候选源代码进行图像特征提取,得到伪代码图像特征和源代码图像特征。
一个实施例中,可以基于图像特征提取子模块分别对伪代码图像和源代码图像进行整体图像特征提取,以得到伪代码图像特征和源代码图像特征。
另一实施例中,伪代码图像特征为对待识别伪代码中伪代码分词的第一分词图像特征进行拼接得到的,源代码图像特征为对候选源代码中源代码分词的第二分词图像特征进行拼接得到的。
相应的,一些情况下,S2072可以具体包括:将伪代码分词序列中的每一伪代码分词转换为图像格式,得到伪代码分词图像,将源代码分词序列中的每一源代码分词转换为图像格式,得到源代码分词图像;基于图像特征提取子模块对伪代码分词图像进行特征提取,得到每一伪代码分词的第一分词图像特征,并对源代码分词图像进行特征提取,得到每一源代码分词的第二分词图像特征。
另一些情况下,S2072可以具体包括:获取待识别伪代码对应的伪代码图像和候选源代码对应的源代码图像,伪代码图像和源代码图像可以是待识别伪代码和候选源代码的图像化数据,可以通过扫描、拍摄或格式转换等方式获取。对伪代码图像和源代码图像进行字符识别和分词处理,得到伪代码分词和其在伪代码图像中的伪代码分词位置,得到源代码分词和其在源代码图像中的源代码分词位置,其中,字符识别可以采用OCR方法,分词处理可以由分词处理模块执行。上述的伪代码分词位置和源代码分词位置包括相应分词的顶点坐标,以及分词的宽和高。
进一步的,基于伪代码分词位置和源代码分词位置,从伪代码图像中分割出每一伪代码分词的第一区域图,从源代码图像中分割出每一源代码分词的第二区域图;对第一区域图进行特征提取,得到每一伪代码分词的第一分词图像特征,对第二区域图进行特征提取,得到每一源代码分词的第二图像特征。
进一步地,基于上述伪代码分词位序对各伪代码分词的第一分词图像特征进行拼接,得到伪代码图像特征;基于上述源代码分词位序对各源代码分词的第二分词图像特征进行拼接,得到源代码图像特征。
S2073:将伪代码文本特征和伪代码图像特征进行特征融合,得到伪代码融合特征。
S2074:将源代码文本特征和源代码图像特征进行特征融合,得到源代码融合特征。
具体的,基于特征融合模块将伪代码文本特征与伪代码图像特征进行融合,如相加处理,得到伪代码融合特征,并将源代码文本特征与伪代码图像特征进行融合,得到源代码融合特征。
S2075:对多个代码对对应的伪代码融合特征和源代码融合特征进行分类识别,得到分类识别结果。
具体的,可以将伪代码融合特征和源代码融合特征进行拼接,并输入分类识别模块,以得到分类识别结果,并通过输出层输出上述分类概率和分类标签。
如此,结合文本分词特征和图像特征进行分类识别,基于多模态的语义信息对伪代码和源代码进行语义理解,能够降低代码分词错误对模型效果和分类结果的影响,提高代码匹配的准确性。
在另一些实施例中,基于多模态特征进行分类识别的情况下,代码精排模型的特征提取模块还包括位置特征嵌入子模块。相应的,基于位置特征嵌入子模块对伪代码分词位序、伪代码分词位置、源代码分词位序和源代码分词位置进行特征嵌入处理,得到每一伪代码分词的第一分词位置特征和每一源代码分词的第二分词位置特征,进而基于伪代码分词位序对各第一分词位置特征进行拼接,得到待识别伪代码的第一位置特征,基于源代码分词位序对各第二分词位置特征进行拼接,得到候选源代码的第二位置特征。
进一步地,特征融合模块对伪代码文本特征、伪代码图像特征和第一位置特征进行特征融合,得到伪代码融合特征,以及对源代码文本特征、源代码图像特征和第二位置特征进行特征融合,得到源代码融合特征,以输入分类识别模块,得到分类识别结果。
如此,结合文本、图像和位置特征进行分类特征识别,进一步提高语义理解的准确性和全面性,进而提高模型效果和准确率。
基于上述部分或全部实施方式,一些实施例中,对源代码和伪代码进行分词处理过程中,构建私有化语料集和分词集,私有化语料集包括各类业务的源代码文本,以及不同编译类型或反编译类型对应的伪代码文本,分词集包括源代码和伪代码的常用分词,以上述语料集和分词集针对性训练分词处理模块,能够降低代码分词错误率,加速第二预训练模型的收敛速度,优化代码精排模型的模型效果。
具体的,分词处理模块可以基于字节对编码算法(Byte Pair Encoding,BPE)构建,文本特征提取子模块可以基于BERT模型构建,图像特征提取模块可以用于对图像进行卷积处理,得到图像特征,可以基于卷积神经网络(CNN)构建,如ResNet等。
以下结合图11介绍本申请的代码匹配流程,本实施例中第一代码召回模型为BERT召回模型,第二代码召回模型为TextCNN召回模型,代码精排模型为BERT精排模型,代码匹配流程包括下述步骤:
S1.获取待匹配的源代码。
S2.基于BERT召回模型对源代码进行特征提取,即对每一待匹配的源代码进行向量化表征,得到第一源代码特征,基于TextCNN召回模型对源代码进行特征提取,得到第二源代码特征,进而得到由第一伪代码特征构建的第一源代码特征库,和由第二伪代码特征构建的第二源代码特征库。
S3.获取待识别的二进制伪代码,该二进制伪代码是对待识别二进制文本进行反编译得到的。
S4.分别基于BERT召回模型和TextCNN召回模型对S3中的二进制伪代码进行特征提取,得到第一伪代码特征和第二伪代码特征。
其中,第一伪代码特征与第一源代码特征的特征空间相同,第二伪代码特征与第二源代码特征的特征空间相同。示例性的,第一伪代码特征和第一源代码特征的可以为768维的embedding序列,第二伪代码特征和第二源代码特征的可以为256维的embedding序列。
S5.基于第一伪代码特征在第一源代码特征库中进行相似代码召回,得到第一数量的第一候选特征,并将第一候选特征对应的源代码作为第一初始源代码。
S6.基于第二伪代码特征在第二源代码特征库中进行相似代码召回,得到第二数量的第二候选特征,并将第二候选特征对应的源代码作为第二初始源代码。
其中,可以通过比较特征向量间的空间距离衡量源代码特征与伪代码特征间的相似度,以实现相似代码召回,该过程可同前述步骤S203。示例性的,第一数量和第二数量可以均为50个。
S7.对第一初始源代码和第二初始源代码进行去重处理,得到多条候选源代码。
S8.将候选源代码与待识别伪代码组合,得到多个代码对。
例如,去重后得到70条候选源代码,相应得到70个代码对。
S9.将多个代码对输入BERT精排模型,以进行分类识别,实现精排序匹配,得到正确匹配的目标源代码。
示例性的,可以取分类概率top1的代码对,将其中的候选源代码作为目标源代码,或者可以取分类概率top10个代码对,进而得到10个目标源代码。其中,分类概率可以为代码对中待识别伪代码和候选源代码间的相似性分值,或者为该相似性分值的映射值。具体的,上述BERT模型可以设置12层编码器和12层解码器。
以下结合具体应用场景介绍本申请的代码匹配方法。
一个实施例中,待识别程序为目标游戏的待识别外挂程序,这里的外挂程序可以是指未经授权且需检测是否存在风险调用或风险程序修改的第三方外挂。具体的,获取待识别外挂程序的二进制代码文本,对二进制代码文本进行反编译处理,得到待识别伪代码。
一些情况下,分别基于BERT召回模型和TextCNN召回模型对待识别外挂程序的待识别伪代码进行特征提取,得到第一伪代码特征和第二伪代码特征;基于第一伪代码特征在BERT召回模型对应的第一源代码特征库中进行相似代码召回,得到第一数量的第一初始源代码;基于第二伪代码特征在TextCNN召回模型对应的第二源代码特征库中进行相似代码召回,得到第二数量的第二初始源代码;对第一数量的第一初始源代码和第二数量的第二初始源代码进行去重,得到多条候选源代码。进一步地,对多条候选源代码与待识别外挂程序的待识别伪代码进行代码对组合,得到多个代码对,以作为BERT精排模型的输入,进而得到分类识别结果,根据分类识别结果中的分类概率进行精排序,取topM个代码对中的源代码作为目标源代码。然后,基于预存风险识别信息对目标源代码进行遍历匹配,以进行风险定位,筛选出目标源代码中包括预存风险识别信息或与预存风险识别信息匹配的源代码段落,将筛选出的源代码段落确定为风险代码段落,进而用于针对性安全防御和外挂检测。其中,预存风险识别信息包括目标源关键词、目标源字符串和目标源代码段中的一种或几种,用于指示风险调用、风险命令或风险程序修改的关键信息。
另一些情况下,基于预存风险识别信息对待识别伪代码进行遍历匹配,以进行风险定位,筛选出待识别伪代码中包括预存风险识别信息或与预存风险识别信息匹配的伪代码段落;将筛选出的伪代码段落确定为风险伪代码段落,进而对风险伪代码段落执行上述特征提取、相似代码召回、代码对组合、分类识别和精排序的步骤,得到风险伪代码段落对应的目标源代码,以用于针对性安全防御和外挂检测。
在另一个实施例中,待识别程序为待识别游戏程序。具体的,获取待识别游戏程序的二进制代码文本,对二进制代码文本进行反编译处理,得到待识别伪代码。对待识别伪代码执行上述特征提取、相似代码召回、代码对组合、分类识别和精排序的步骤,得到与待识别程序匹配的目标源代码。基于非合规信息库对目标源代码进行合规检测,得到合规检测结果。其中,非合规信息库包括目标源关键词、目标源字符串和目标源代码段中的一种或几种,用于指示非合规指令或代码段的关键信息。合规检测包括基于非合规信息库对目标源代码进行遍历匹配,合规检测结果表征待识别游戏程序中是否存在非合规代码段落及非合规代码段落在目标源代码中的位置信息,如是否存在违规获取涉密信息、恐暴内容和违规调用等对应的代码指令等。
综上,本申请建立代码的召回和精排分步匹配,拆解匹配任务流程,先通过代码召回模型进行多路召回和结果合并,然后对召回的相似源代码进行精排排序,得到最相似的目标源代码,提高召回率和代码覆盖率,降低错漏正确源代码的几率,且能够分别进行代码召回模型和代码精排模型的训练,进而兼顾召回率和匹配准确度的分离并行优化,以分模块提升模型效果,降低单模块的特征提取要求、训练难度和系统部署难度。此外,上述方法有效建模了源代码和伪代码间的语义相似性,对于语义化的代码文本进行匹配和理解,不受细节语法相似性、文本严格一致和复杂匹配规则的限制,可以实现源代码和伪代码的跨语言文本匹配,在程序逆向阶段,可以有效检索到机器语言文本的代码区域及其源代码运行逻辑。
本申请实施例还提供了一种代码匹配装置600,如图12所示,图12示出了本申请实施例提供的一种代码匹配装置的结构示意图,装置可以包括下述模块。
伪代码获取模块10:用于获取待识别程序对应的待识别伪代码;
相似代码搜索模块20:用于基于待识别伪代码在源代码特征库中进行相似代码搜索,得到待识别伪代码对应的多条候选源代码;
代码组合模块30:用于将多条候选源代码分别与待识别伪代码进行组合,得到多个代码对;
分类识别模块40:用于对多个代码对进行分类识别处理,得到分类识别结果,分类识别结果表征多个代码对中的候选源代码与待识别伪代码间的同源概率;
源代码确定模块50:用于基于分类识别结果从多条候选源代码中确定出与待识别程序匹配的目标源代码。
一些实施例中,相似代码搜索模块20可以包括:
伪代码特征提取子模块:用于基于至少一种代码召回模型分别对待识别伪代码进行特征提取,得到至少一种伪代码特征;
相似代码搜索子模块:用于基于至少一种伪代码特征在源代码特征库中进行相似代码搜索,得到至少一种伪代码特征对应的初始源代码;
去重处理子模块:用于对至少一种伪代码特征对应的初始源代码进行去重处理,得到多条候选源代码。
一些实施例中,装置还可以包括:
第一样本集获取模块:用于获取召回训练样本集,召回训练样本集包括样本伪代码,以及样伪代码对应的正样本源代码和负样本源代码;
第一训练模块:用于以样本伪代码,以及样伪代码对应的正样本源代码和负样本源代码作为第一预训练模型的输入,基于自监督对比学习方法对第一预训练模型进行正负样本源代码分类的约束训练,得到代码召回模型。
一些实施例中,第一样本集获取模块可以包括:
样本代码集获取子模块:用于获取样本代码集,样本代码集包括样本源代码,以及与样本源代码匹配的至少一条样本伪代码,其中,与样本源代码匹配的至少一条样本伪代码对应至少一种编译类型的机器语言文本;
三元组采样子模块:用于以与至少一条样本伪代码匹配的样本源代码作为正样本源代码,以与至少一条样本伪代码不匹配的样本源代码作为负样本源代码,对样本代码集进行三元组采样,得到多个样本三元组;
第一样本集构建子模块:用于基于多个样本三元组构建召回训练样本集。
一些实施例中,装置还可以包括:
第二样本集获取模块:用于获取精排训练样本集,精排训练样本集包括正样本代码对、负样本代码对和对应的样本对标签;
第二训练模块:用于以正样本代码对和负样本代码对作为第二预训练模型的输入,以样本对标签作为期望输出,对第二预训练模型进行正负样本对分类的约束训练,得到代码精排模型;
相应的,分类识别模块40可以具体用于:基于代码精排模型对多个代码对进行分类识别处理,得到分类识别结果。
一些实施例中,第二样本集获取模块可以包括:
样本召回子模块:用于基于代码召回模型和样本代码集中的每一样本源代码对样本代码集中的样本伪代码进行召回,得到每一样本源代码对应的参考伪代码集;
样本代码组合子模块:用于将每一样本源代码分别与参考伪代码集中的样本伪代码进行组合,得到正样本代码对和负样本代码对;
第二样本集构建子模块:用于基于正样本代码对和负样本代码对构建精排训练样本集。
一些实施例中,相似代码搜索子模块可以包括:
相似度处理单元:用于对至少一种伪代码特征和源代码特征库中的源代码特征进行相似度处理,得到特征相似度结果;
初始源代码特征筛选单元:用于基于特征相似度结果从源代码特征库中筛选出初始源代码特征;
初始源代码确定单元:用于将初始源代码特征对应的源代码作为初始源代码。
一些实施例中,源代码确定模块50可以包括:
目标候选源代码筛选子模块:用于基于分类识别结果从多条候选源代码中筛选出满足预设分类条件的目标候选源代码;
候选源代码排序子模块:用于基于分类识别结果对目标候选源代码进行排序,得到相似度排序结果;
目标源代码筛选子模块:用于根据相似度排序结果,从目标候选源代码中筛选出第一预设数量的目标源代码。
一些实施例中,分类识别模块40可以包括:
文本特征提取子模块:用于对多个代码对中的待识别伪代码和候选源代码进行文本特征提取,得到伪代码文本特征和源代码文本特征;
图像特征提取子模块:用于对多个代码对中的待识别伪代码和候选源代码进行图像特征提取,得到伪代码图像特征和源代码图像特征;
第一融合子模块:用于将伪代码文本特征和伪代码图像特征进行特征融合,得到伪代码融合特征;
第二融合子模块:用于将源代码文本特征和源代码图像特征进行特征融合,得到源代码融合特征;
分类识别子模块:用于对多个代码对对应的伪代码融合特征和源代码融合特征进行分类识别,得到分类识别结果。
需要说明的是,上述装置实施例与方法实施例基于相同的实施方式。
本申请实施例提供了一种代码匹配设备,该调度设备可以为终端或服务器,包括处理器和存储器,该存储器中存储有至少一条指令或至少一段程序,该至少一条指令或该至少一段程序由该处理器加载并执行以实现如上述方法实施例所提供的代码匹配方法。
存储器可用于存储软件程序以及模块,处理器通过运行存储在存储器的软件程序以及模块,从而执行各种功能应用以及代码匹配。存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、功能所需的应用程序等;存储数据区可存储根据设备的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器还可以包括存储器控制器,以提供处理器对存储器的访问。
本申请实施例所提供的方法实施例可以在移动终端、计算机终端、服务器或者类似的运算装置等电子设备中执行。图13是本申请实施例提供的一种代码匹配方法的电子设备的硬件结构框图。如图13所示,该电子设备900可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(Central Processing Units,CPU)910(处理器910可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器930,一个或一个以上存储应用程序923或数据922的存储介质920(例如一个或一个以上海量存储设备)。其中,存储器930和存储介质920可以是短暂存储或持久存储。存储在存储介质920的程序可以包括一个或一个以上模块,每个模块可以包括对电子设备中的一系列指令操作。更进一步地,中央处理器910可以设置为与存储介质920通信,在电子设备900上执行存储介质920中的一系列指令操作。电子设备900还可以包括一个或一个以上电源960,一个或一个以上有线或无线网络接口950,一个或一个以上输入输出接口940,和/或,一个或一个以上操作系统921,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。
输入输出接口940可以用于经由一个网络接收或者发送数据。上述的网络具体实例可包括电子设备900的通信供应商提供的无线网络。在一个实例中,输入输出接口940包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,输入输出接口940可以为射频(RadioFrequency,RF)模块,其用于通过无线方式与互联网进行通讯。
本领域普通技术人员可以理解,图13所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,电子设备900还可包括比图13中所示更多或者更少的组件,或者具有与图13所示不同的配置。
本申请的实施例还提供了一种计算机可读存储介质,存储介质可设置于电子设备之中以保存用于实现方法实施例中一种代码匹配方法相关的至少一条指令或至少一段程序,该至少一条指令或该至少一段程序由该处理器加载并执行以实现上述方法实施例提供的代码匹配方法。
可选地,在本实施例中,上述存储介质可以位于计算机网络的多个网络服务器中的至少一个网络服务器。可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各种可选实现方式中提供的方法。
由上述本申请提供的代码匹配方法、装置、设备、服务器、终端、存储介质和程序产品的实施例可见,本申请的技术方案通过获取待识别程序对应的待识别伪代码;基于待识别伪代码在源代码特征库中进行相似代码搜索,得到伪代码特征对应的多条候选源代码;将多条候选源代码分别与待识别伪代码进行组合,得到多个代码对;对多个代码对进行分类识别处理,得到分类识别结果,分类识别结果表征多个代码对中的候选源代码与待识别伪代码间的同源概率;基于分类识别结果从多条候选源代码中确定出与待识别程序匹配的目标源代码。通过该技术方案,基于源代码特征和伪代码特征进行代码理解、匹配及分类识别,可以对整体代码进行宏观语义的相似性判断,不受代码文本语言、细节语法和复杂匹配规则的限制,能够实现伪代码和源代码间的跨语言文本精准匹配,并且,先基于代码特征进行候选源代码筛选,然后进行候选源代码与待识别伪代码间的分类识别,能够兼顾召回准确率和分类准确率的优化,显著提高代码匹配精度,降低系统部署难度。
需要说明的是:上述本申请实施例先后顺序仅仅为了描述,不代表实施例的优劣。且上述对本申请特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本申请中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、设备和存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指示相关的硬件完成,的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上仅为本申请的较佳实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (13)

1.一种代码匹配方法,其特征在于,所述方法包括:
获取待识别程序对应的待识别伪代码;
基于所述待识别伪代码在源代码特征库中进行相似代码搜索,得到所述待识别伪代码对应的多条候选源代码;
将所述多条候选源代码分别与所述待识别伪代码进行组合,得到多个代码对;
对所述多个代码对进行分类识别处理,得到分类识别结果,所述分类识别结果表征所述多个代码对中的候选源代码与所述待识别伪代码间的同源概率;
基于所述分类识别结果从所述多条候选源代码中确定出与所述待识别程序匹配的目标源代码。
2.根据权利要求1所述的方法,其特征在于,所述基于所述待识别伪代码在源代码特征库中进行相似代码搜索,得到所述待识别伪代码对应的多条候选源代码包括:
基于至少一种代码召回模型分别对所述待识别伪代码进行特征提取,得到至少一种伪代码特征;
基于所述至少一种伪代码特征在所述源代码特征库中进行相似代码搜索,得到所述至少一种伪代码特征对应的初始源代码;
对所述至少一种伪代码特征对应的初始源代码进行去重处理,得到所述多条候选源代码。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
获取召回训练样本集,所述召回训练样本集包括样本伪代码,以及所述样伪代码对应的正样本源代码和负样本源代码;
以所述样本伪代码,以及所述样伪代码对应的正样本源代码和负样本源代码作为第一预训练模型的输入,基于自监督对比学习方法对所述第一预训练模型进行正负样本源代码分类的约束训练,得到所述代码召回模型。
4.根据权利要求3所述的方法,其特征在于,所述获取召回训练样本集包括:
获取样本代码集,所述样本代码集包括样本源代码,以及与所述样本源代码匹配的至少一条样本伪代码,其中,与所述样本源代码匹配的至少一条样本伪代码对应至少一种编译类型的机器语言文本;
以与所述至少一条样本伪代码匹配的样本源代码作为所述正样本源代码,以与所述至少一条样本伪代码不匹配的样本源代码作为所述负样本源代码,对所述样本代码集进行三元组采样,得到多个样本三元组;
基于所述多个样本三元组构建所述召回训练样本集。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取精排训练样本集,所述精排训练样本集包括正样本代码对、负样本代码对和对应的样本对标签;
以所述正样本代码对和所述负样本代码对作为第二预训练模型的输入,以所述样本对标签作为期望输出,对所述第二预训练模型进行正负样本对分类的约束训练,得到代码精排模型;
所述对所述多个代码对进行分类识别处理,得到分类识别结果包括:
基于代码精排模型对所述多个代码对进行分类识别处理,得到所述分类识别结果。
6.根据权利要求5所述的方法,其特征在于,所述获取精排训练样本集包括:
基于代码召回模型和样本代码集中的每一样本源代码对所述样本代码集中的样本伪代码进行召回,得到所述每一样本源代码对应的参考伪代码集;
将所述每一样本源代码分别与所述参考伪代码集中的样本伪代码进行组合,得到正样本代码对和负样本代码对;
基于所述正样本代码对和所述负样本代码对构建所述精排训练样本集。
7.根据权利要求2-6中任一项所述的方法,其特征在于,所述基于所述至少一种伪代码特征在所述源代码特征库中进行相似代码搜索,得到所述至少一种伪代码特征对应的初始源代码包括:
对所述至少一种伪代码特征和所述源代码特征库中的源代码特征进行相似度处理,得到特征相似度结果;
基于所述特征相似度结果从所述源代码特征库中筛选出初始源代码特征;
将所述初始源代码特征对应的源代码作为所述初始源代码。
8.根据权利要求1-6中任一项所述的方法,其特征在于,所述基于所述分类识别结果从所述多条候选源代码中确定出与所述待识别程序匹配的目标源代码包括:
基于所述分类识别结果从所述多条候选源代码中筛选出满足预设分类条件的目标候选源代码;
基于所述分类识别结果对所述目标候选源代码进行排序,得到相似度排序结果;
根据所述相似度排序结果,从所述目标候选源代码中筛选出所述目标源代码。
9.根据权利要求1-6中任一项所述的方法,其特征在于,所述对所述多个代码对进行分类识别处理,得到分类识别结果包括:
对所述多个代码对中的待识别伪代码和候选源代码进行文本特征提取,得到伪代码文本特征和源代码文本特征;
对所述多个代码对中的待识别伪代码和所述候选源代码进行图像特征提取,得到伪代码图像特征和源代码图像特征;
将所述伪代码文本特征和所述伪代码图像特征进行特征融合,得到伪代码融合特征;
将所述源代码文本特征和所述源代码图像特征进行特征融合,得到源代码融合特征;
对所述多个代码对对应的伪代码融合特征和所述源代码融合特征进行分类识别,得到所述分类识别结果。
10.一种代码匹配装置,其特征在于,所述装置包括:
伪代码获取模块:用于获取待识别程序对应的待识别伪代码;
相似代码搜索模块:用于基于所述待识别伪代码在源代码特征库中进行相似代码搜索,得到所述待识别伪代码对应的多条候选源代码;
代码组合模块:用于将所述多条候选源代码分别与所述待识别伪代码进行组合,得到多个代码对;
分类识别模块:用于对所述多个代码对进行分类识别处理,得到分类识别结果,所述分类识别结果表征所述多个代码对中的候选源代码与所述待识别伪代码间的同源概率;
源代码确定模块:用于基于所述分类识别结果从所述多条候选源代码中确定出与所述待识别程序匹配的目标源代码。
11.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一条指令或至少一段程序,所述至少一条指令或所述至少一段程序由处理器加载并执行以实现如权利要求1-9中任一项所述的代码匹配方法。
12.一种计算机设备,其特征在于,所述设备包括处理器和存储器,所述存储器中存储有至少一条指令或至少一段程序,所述至少一条指令或所述至少一段程序由所述处理器加载并执行以实现如权利要求1-9中任一项所述的代码匹配方法。
13.一种计算机程序产品或计算机程序,其特征在于,所述计算机程序产品或计算机程序包括计算机指令,所述计算机指令被处理器执行时实现如权利要求1-9中任一项所述的代码匹配方法。
CN202210405253.1A 2022-04-18 2022-04-18 代码匹配方法、装置、电子设备和存储介质 Pending CN116992440A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210405253.1A CN116992440A (zh) 2022-04-18 2022-04-18 代码匹配方法、装置、电子设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210405253.1A CN116992440A (zh) 2022-04-18 2022-04-18 代码匹配方法、装置、电子设备和存储介质

Publications (1)

Publication Number Publication Date
CN116992440A true CN116992440A (zh) 2023-11-03

Family

ID=88528870

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210405253.1A Pending CN116992440A (zh) 2022-04-18 2022-04-18 代码匹配方法、装置、电子设备和存储介质

Country Status (1)

Country Link
CN (1) CN116992440A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117909978A (zh) * 2024-03-14 2024-04-19 福建银数信息技术有限公司 一种基于大数据安全的分析管理方法及系统

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117909978A (zh) * 2024-03-14 2024-04-19 福建银数信息技术有限公司 一种基于大数据安全的分析管理方法及系统

Similar Documents

Publication Publication Date Title
CN112131366B (zh) 训练文本分类模型及文本分类的方法、装置及存储介质
CN113298197B (zh) 数据聚类方法、装置、设备及可读存储介质
CN114330312B (zh) 标题文本处理方法、装置、存储介质和程序
CN107391549B (zh) 基于人工智能的新闻召回方法、装置、设备及存储介质
CN110472002B (zh) 一种文本相似度获取方法和装置
CN113919344A (zh) 文本处理方法和装置
CN116824278B (zh) 图像内容分析方法、装置、设备和介质
US20200349226A1 (en) Dictionary Expansion Using Neural Language Models
US11036996B2 (en) Method and apparatus for determining (raw) video materials for news
CN111274822A (zh) 语义匹配方法、装置、设备及存储介质
CN112749291A (zh) 一种图文匹配的方法和装置
CN115062134A (zh) 知识问答模型训练及知识问答方法、装置和计算机设备
CN115131801A (zh) 基于多模态的文档识别方法、装置、设备和存储介质
CN113919360A (zh) 语义理解方法、语音交互方法、装置、设备及存储介质
CN116992440A (zh) 代码匹配方法、装置、电子设备和存储介质
CN113779202B (zh) 命名实体识别方法、装置、计算机设备和存储介质
CN116991412A (zh) 代码处理方法、装置、电子设备及存储介质
CN115017356A (zh) 图像文本对的判断方法和装置
CN114490926A (zh) 一种相似问题的确定方法、装置、存储介质及终端
CN112417260B (zh) 本地化推荐方法、装置及存储介质
CN113761152A (zh) 一种问答模型的训练方法、装置、设备及存储介质
CN112364649A (zh) 命名实体的识别方法、装置、计算机设备及存储介质
CN114298121B (zh) 基于多模态的文本生成方法、模型训练方法和装置
CN113536789B (zh) 算法比赛关联性预测方法、装置、设备及介质
CN113515598B (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