CN111562920A - 小程序代码相似度确定方法、装置、服务器及存储介质 - Google Patents
小程序代码相似度确定方法、装置、服务器及存储介质 Download PDFInfo
- Publication number
- CN111562920A CN111562920A CN202010514111.XA CN202010514111A CN111562920A CN 111562920 A CN111562920 A CN 111562920A CN 202010514111 A CN202010514111 A CN 202010514111A CN 111562920 A CN111562920 A CN 111562920A
- Authority
- CN
- China
- Prior art keywords
- applet
- fingerprint
- code
- abstract syntax
- syntax tree
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种小程序代码相似度确定方法、装置、服务器及存储介质,涉及计算机领域。该方法包括:获取第一小程序对应小程序代码的抽象语法树;基于抽象语法树中节点之间的父子关系,对抽象语法树进行特征提取,得到第一小程序的代码特征;根据代码特征生成第一小程序的第一小程序指纹;根据第一小程序指纹与小程序指纹库中第二小程序的第二小程序指纹,确定第一小程序与所述第二小程序的代码相似度。采用本申请实施例提供的方法,预先基于抽象语法树为已有小程序生成小程序指纹,后续即可利用小程序指纹库中存储的小程序指纹进行相似度检测,而无需对两两小程序的源代码进行分析比较,提高小程序代码相似度的检测效率。
Description
技术领域
本申请涉及计算机领域,特别涉及一种小程序代码相似度确定方法、装置、服务器及存储介质。
背景技术
小程序是一种依赖于宿主程序运行的程序。用户只需要安装宿主程序,即可在宿主程序中随时添加和使用各种各样的小程序。
宿主程序的开发商提供开放平台,小程序开发者可以通过开放平台上传小程序,由宿主程序的开发商对小程序进行内容审核,并在通过审核后,进行小程序上线。此外,为了保证小程序同质化,在进行内容审核的同时,会对小程序代码进行相似度检测,从而发现小程序代码的抄袭行为。相关技术中,通常使用代码相似度检测工具进行代码相似度检测,其中,代码相似度检测工具包括斯坦福莫斯(Standford Moss)、戴克(DecKard)等等。
然而,相关技术中使用的代码相似度检测工具,仅能够通过比较两两代码确定程序之间的相似度,应用于小程序代码检测时,由于小程序数量庞大,导致小程序代码相似度检测的效率较低,进而影响小程序的上线速度。
发明内容
本申请实施例提供了一种小程序代码相似度确定方法、装置、服务器及存储介质,可以提高小程序代码相似度的检测效率。所述技术方案如下:
一方面,本申请实施例提供了一种小程序代码相似度确定方法,所述方法包括:
获取第一小程序对应小程序代码的抽象语法树,所述抽象语法树用于表征所述小程序代码的抽象语法结构;
基于所述抽象语法树中节点之间的父子关系,对所述抽象语法树进行特征提取,得到所述第一小程序的代码特征;
根据所述代码特征生成所述第一小程序的第一小程序指纹;
根据所述第一小程序指纹与小程序指纹库中第二小程序的第二小程序指纹,确定所述第一小程序与所述第二小程序的代码相似度。
另一方面,本申请实施例提供了一种小程序代码相似度确定装置,所述装置包括:
语法树获取模块,同于获取第一小程序对应小程序代码的抽象语法树,所述抽象语法树用于表征所述小程序代码的抽象语法结构;
特征提取模块,用于基于所述抽象语法树中节点之间的父子关系,对所述抽象语法树进行特征提取,得到所述第一小程序的代码特征;
指纹生成模块,用于根据所述代码特征生成所述第一小程序的第一小程序指纹;
相似度确定模块,用于根据所述第一小程序指纹与小程序指纹库中第二小程序的第二小程序指纹,确定所述第一小程序与所述第二小程序的代码相似度。
可选的,特征提取模块,包括:
子树选取单元,用于从所述抽象语法树中选取语法子树,所述语法子树为预设深度;
序列生成单元,用于按照节点遍历规则遍历所述语法子树中的节点,得到所述语法子树对应的特征序列,所述特征序列包含所述语法子树中各个节点的节点名称,所述节点遍历规则为深度遍历或广度遍历;
特征确定单元,用于将由所述特征序列构成的集合确定为所述代码特征。
可选的,指纹生成模块,包括:
第一指纹生成单元,用于根据所述代码特征生成所述第一小程序的第一原始指纹,所述第一原始指纹的特征值数量与所述特征序列的数量相同;
第二指纹生成单元,用于对所述第一原始指纹进行特征降维,得到所述第一小程序的第一索引指纹,所述第一索引指纹包含预设数量的特征维度;
指纹确定单元,用于将所述第一原始指纹和所述第一索引指纹确定为所述第一小程序指纹。
可选的,第一指纹生成单元,用于:
通过字典模型,对所述代码特征中的所述特征序列进行特征转换,得到所述特征序列对应的特征值,所述字典模型中包含所述特征序列与所述特征值之间的映射关系;
将由所述特征值构成的集合确定为所述第一原始指纹。
可选的,所述装置还包括:
模型更新模块,用于响应于所述字典模型不包含所述代码特征中所述特征序列对应的所述特征值,为所述代码特征中的所述特征序列分配目标特征值,所述目标特征值和所述字典模型中的所述特征值不同;
根据所述目标特征值和所述代码特征中的所述特征序列更新所述字典模型。
可选的,第二指纹生成单元,用于:
通过最小哈希算法,对所述第一原始指纹进行特征降维,得到所述第一索引指纹。
可选的,相似度确定模块,包括:
筛选单元,用于根据所述第一索引指纹,从所述小程序指纹库中筛选所述第二小程序,所述第二小程序的第二索引指纹与所述第一索引指纹的索引相似度大于阈值;
相似度确定单元,用于根据所述第一原始指纹,以及所述第二小程序的第二原始指纹,确定所述第一小程序与所述第二小程序的所述代码相似度。
可选的,筛选单元,用于:
根据所述第一索引指纹中的第n特征维度,从所述小程序指纹库对应的倒排索引中查找第n小程序列表,所述倒排索引中包括特征维度与小程序之间的对应关系,所述第n小程序列表中候选小程序对应的索引指纹包含所述第n特征维度,n为小于等于所述预设数量的正整数;
根据各个小程序列表中所述候选小程序的出现次数,确定各个候选小程序与所述第一小程序的所述索引相似度;
将所述索引相似度大于所述阈值的所述候选小程序确定为所述第二小程序。
可选的,所述装置还包括:
索引更新模块,用于根据所述第一索引指纹更新所述倒排索引,并将所述第一原始指纹与所述第一小程序关联存储。
可选的,相似度确定单元,用于:
将所述第一原始指纹中特征值与所述第二原始指纹中特征值的杰卡德相似度确定为所述代码相似度。
可选的,所述装置还包括:
简化模块,用于根据简化规则,对所述抽象语法树进行简化,得到简化后的所述抽象语法树,其中,简化后所述抽象语法树的广度小于简化前所述抽象语法树的广度,且简化后所述抽象语法树的深度小于简化前所述抽象语法树的深度。
所述简化规则包括如下至少一条:
将所述抽象语法树中的变量替换为所述变量对应的变量类型;和,
省略所述抽象语法树中的第一预设字段,所述第一预设字段属于第一字段列表;和,
根据第二字段列表简化所述抽象语法树中的第二预设字段,所述第二字段列表中包含所述第二预设字段与简化后字段之间的对应关系;和,
简化所述抽象语法树中多级调用字段;和,
去重所述抽象语法树中的重复子树;和,
根据所述抽象语法树中节点之间的父子关系进行递归简化。
另一方面,本申请实施例提供了一种服务器,所述服务器包括:处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如上述方面所述的小程序代码相似度确定方法。
另一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如上述方面所述的小程序代码相似度确定方法。
另一方面,提供了一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得计算机执行如上述方面所述的小程序代码相似度确定方法。
本申请实施例提供的技术方案带来的有益效果至少包括:
本申请实施例中,通过获取第一小程序对应小程序代码的抽象语法树,对抽象语法树进行特征提取,并根据提取到的代码特征生成第一小程序指纹,从而根据第一小程序代码以及小程序指纹库中第二小程序的第二小程序指纹,确定出第一小程序与第二小程序之间的代码相似度;采用本申请实施例提供的方法,预先基于抽象语法树为已有小程序生成小程序指纹,后续即可利用小程序指纹库中存储的小程序指纹进行相似度检测,而无需对两两小程序的源代码进行分析比较,从而提高了小程序代码相似度的检测效率,进而提高了小程序的上线速度。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了本申请一个示例性实施例提供的实施环境的示意图;
图2示出了本申请一个示例性实施例提供的小程序代码相似度确定方法的流程图;
图3是本申请一个示例性实施例示出的抽象语法树简化过程的实施示意图;
图4示出了本申请一个示例性实施例提供的小程序代码相似度确定方法的流程图;
图5是本申请一个示例性实施例示出的代码特征提取过程的实施示意图;
图6是本申请一个示例性实施例示出的代码相似度确定过程的实施示意图;
图7是本申请一个示例性实施例提供的小程序筛选过程的流程图;
图8是本申请一个示例性实施例提供的小程序代码相似度确定装置的结构框图;
图9示出了本申请一个示例性实施例提供的服务器的结构框图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
为了方便理解,下面对本申请实施例中涉及的名词进行介绍:
小程序:小程序是一种基于编程语言开发完成、依赖于宿主程序运行的应用程序,是一种介于传统网页与传统应用程序之间的应用形态,用户无需下载和安装小程序就可以在宿主程序中运行该小程序。
宿主程序:在计算机环境下,软件赖以生存的软件环境被称作是宿主环境,环境称作宿主。本申请实施例中的宿主程序即用于为小程序提供运行环境的应用程序。该宿主应用程序可以为安卓(Android)应用程序或者苹果操作系统(iPhone Operation System,iOS)。宿主程序可以是安装在个人设备中的即时通信应用程序、支付类应用程序、新闻阅读类应用程序或社交应用程序等等;也可以是安装在共享设备中的刷脸应用程序、签到应用程序等等。
小程序数据:指小程序在冷启动阶段所要加载的数据。可选的,该小程序数据包括小程序属性、APKG包和小程序数据库。其中,小程序属性用于描述小程序的相关属性,包括图标、版本信息、启动页面、是否分包等等;APKG包为小程序的代码包,包括小程序设置、用户界面(User Interface,UI)和小程序业务逻辑等等。
抽象语法树(Abstract Syntax Tree,AST):又被简称为语法树,是一种源代码语法结构的抽象表现。抽象语法树以树状形式表现编程语言的语法结构,树上每个节点均表示源代码中的一种结构。本申请实施例中的抽象语法树,即对小程序代码包中的源代码进行分析得到。
倒排索引(inverted index):又称为反向索引,是一种与正向索引相对的索引方式。以文档以及文档中包含的单词为例,在建立正向索引时,以文档标识为索引,以文档中包含的单词为记录,相应的,检索过程中即以文档标识为检索词进行检索,得到包含文档中包含的单词;在建立倒序索引时,则是以单词为索引,以文档标识(指示包含该单词的文档)为记录,相应的,检索过程中即以单词为检索词进行检索,得到包含该单词的所有文档。
为了提高小程序代码相似度检测的效率,本申请实施例提供了一种小程序代码相似度确定方法。在一种可能的实施方式中,对于已上线小程序,服务器首先根据已上线小程序对应的小程序代码生成抽象语法树,然后从抽象语法树中提取已上线小程序的代码特征,并基于代码特征生成已上线小程序对应的小程序指纹,从而根据各个小程序指纹构建小程序指纹库。
当存在小程序代码相似度检测需求时,服务器即对待检测小程序进行抽象语法树生成、代码特征提取以及小程序指纹生成等一系列操作,得到待检测小程序对应的小程序指纹,进而将该小程序指纹与小程序指纹库中已上线小程序的小程序指纹进行指纹相似度计算,确定待检测小程序与已上线小程序的代码相似度,最终根据代码相似度确定待检测小程序是否存在代码抄袭行为。
由于预先构建了小程序指纹库,且基于抽象语法树所表征的代码特征生成小程序指纹,因此在存在相似度检测需求时,可以通过指纹计算和指纹库匹配实现代码相似度的快速检测,无需对两两小程序的源代码进行比对(小程序指纹的数据量远小于源代码的数据量),从而提高了代码相似度检测的效率。
本申请实施例提供的小程序代码相似度确定方法,可以应用于如下场景:
1、小程序上线审核
应用于小程序上线审核场景时,该小程序代码相似度确定方法可以应用于小程序开放平台。开放平台预先基于已上线的小程序,构建小程序指纹库。当接收到小程序开发者上传的小程序时,开放平台即对该小程序的源代码进行处理,生成小程序对应的小程序指纹,并根据该小程序指纹进行指纹库匹配。若小程序指纹库中存在指纹相似度高于阈值的小程序指纹,开放平台即向小程序开发者反馈代码相似提示信息;若不存在指纹相似度高于阈值的小程序指纹,开放平台即进一步对小程序进行内容审核,并在小程序通过内容审核后,进行小程序上线。应用于上述场景后,开放平台能够实现代码相似度的快速检测,提高了小程序上线过程的审核效率,进而提高了小程序的上线速度。
2、小程序恶意代码片段检测
应用于小程序恶意代码片段检测场景时,该小程序代码相似度确定方法可以应用于小程序开放平台。开放平台预先基于小程序恶意代码片段,构建恶意代码指纹库。当接收到小程序开发者上传的小程序时,开放平台对小程序的源代码进行分片,得到若干代码分片,并进一步对各个代码分片进行处理,生成代码分片对应的代码分片指纹。通过与恶意代码指纹库进行匹配,开放平台能够发现小程序中的恶意代码,并进行恶意代码反馈和预警,避免上线包含恶意代码的小程序。
当然,上述两种应用场景仅为示例性说明,本申请实施例提供的方法还可以应用于其他设计代码相似度检测的场景(比如应用于代码查重系统、软件著作权系统等等),本实施例对具体应用场景并不构成限定。
请参考图1,其示出了本申请一个示例性实施例提供的实施环境的示意图。该实施环境中包括:终端110和服务器120。
终端110为具有小程序开发功能的电子设备,其可以是智能手机、平板电脑、个人计算机或个人工作站。小程序开发者可以在终端110中进行小程序开发,并在终端110中安装的宿主程序中运行开发的小程序。
在一些实施例中,当需要将小程序上线时,终端110对小程序数据进行打包,并将小程序数据包上传至小程序开放平台,由小程序开放平台对小程序进行审核。
终端110通过有线网络或无线网络与服务器120相连,并建立数据连接。
服务器120是用于进行审核的后台服务器,可以包括一台服务器、多台服务器、云计算平台和虚拟化中心中的至少一种。其中,服务器120可以实现小程序开放平台的小程序审核功能。
在一些实施例中,服务器120预先对已上线的各个小程序进行抽象语法树提取以及指纹生成,并基于各个小程序对应的小程序指纹构建小程序指纹库。在进行小程序审核时,服务器120即利用小程序指纹库对小程序的代码相似度进行检测。
在一种可能的应用场景下,如图1所示,开发者通过终端110向服务器120发送小程序审核请求,该小程序审核请求中包含待审核小程序的小程序(源)代码。服务器120接收到请求后,根据小程序代码121生成抽象语法树122,并从抽象语法树122中提取代码特征123,从而根据代码特征生成小程序指纹124。进一步的,服务器120对小程序指纹124与小程序指纹库125进行指纹匹配,根据指纹匹配结果确定待审核小程序与已上线小程序之间的代码相似度126,并根据代码相似度126生成相应的审核结果127。终端110接收到服务器120反馈的审核结果127后,即对审核结果127进行展示,并在未通过审核时,显示未通过审核的原因。
下述各个实施例以小程序代码相似度确定方法用于图1所示的服务器120为例进行说明。
请参考图2,其示出了本申请一个示例性实施例提供的小程序代码相似度确定方法的流程图。该方法包括如下步骤。
步骤201,获取第一小程序对应小程序代码的抽象语法树,抽象语法树用于表征小程序代码的抽象语法结构。
可选的,该第一小程序是由小程序开发者上传的待审核的小程序,该小程序代码包含在上传的小程序代码包中。
在一些实施例中,小程序的同质化以小程序首页渲染效果为准。若两个小程序的小程序首页的功能、页面设计以及代码的相似度过高,且两个小程序对应的服务领域相近,则确定两个小程序同质化(即小程序相似)。因此,在一种可能的实施方式中,服务器获取第一小程序中指定页面对应的小程序代码,进而获取该小程序代码的抽象语法树。其中,该指定页面可以包括小程序首页或小程序主功能页中的至少一种。
关于获取抽象语法树的方式,在一种可能的实施方式中,当小程序代码为编译后代码包中的前端脚本(用于控制前端交互逻辑)代码(比如JavaScript脚本)时,服务器通过脚本解析引擎(比如JavaScript脚本对应的NodeJS引擎)对前端脚本代码进行解析,得到抽象语法树。
步骤202,基于抽象语法树中节点之间的父子关系,对抽象语法树进行特征提取,得到第一小程序的代码特征。
由于抽象语法树呈树状结构,直接基于抽象语法树生成小程序指纹的难度较高,因此在生成小程序指纹前,首先需要对抽象语法树进行特征提取,得到第一小程序的代码特征。
在一些实施例中,经过特征提取后,抽象语法树的树状特征被转换为序列化的代码特征,即代码特征采用字符串序列表示。
在一种可能的实施方式中,由于抽象语法树的层级较多,因此为了能够体现出不同层级的特征,服务器根据抽象语法树中节点之间的父子关系,对抽象语法树进行子树划分,得到若干抽象语法子树,并对各抽象语法子树进行特征提取,得到各抽象语法子树对应的子树代码特征。相应的,最终得到的小程序的代码特征即由各个子树代码特征构成。
步骤203,根据代码特征生成第一小程序的第一小程序指纹。
在一种可能的实施方式中,第一小程序指纹采用k维度向量表示,即第一小程序指纹中包含k个特征值,不同特征值用于表征小程序代码在不同代码特征维度上的特征。并且,由于不同小程序对应源代码的代码量存在差异,因此不同小程序对应小程序指纹中包含的特征值的数量存在差异,即不同小程序指纹对应的向量维度不同。
可选的,为了便于后续进行指纹匹配,服务器根据代码特征生成统一向量维度的小程序指纹。
步骤204,根据第一小程序指纹与小程序指纹库中第二小程序的第二小程序指纹,确定第一小程序与第二小程序的代码相似度。
在一些实施例中,小程序指纹库中存储有各个已上线小程序对应的小程序指纹,其中,已上线小程序对应小程序指纹的生成方式可以参考上述步骤201至203。
不同于相关技术中,需要通过两两比较程序源代码来确定程序之间的代码相似度,本实施例中,服务器通过计算小程序指纹之间的相似度,确定小程序之间的代码相似度。
在一种可能的实施方式中,服务器逐一计算第一小程序指纹与小程序指纹库中第二小程序对应第二小程序指纹的指纹相似度,并将该指纹相似度确定为小程序之间的代码相似度。其中,代码相似度与指纹相似度呈正相关关系。
可选的,若第一小程序与第二小程序的代码相似度高于阈值,服务器确定第一小程序与第二小程序的代码雷同。比如,该阈值可以为75%。
在一些实施例中,服务器可以确定出代码相似度高于阈值至少一个第二小程序,并向小程序开发者反馈该第二小程序的小程序信息,以便小程序开发者对自身开发的小程序进行代码调整,以此降低自身开发的小程序与其他小程序的同质化程度。
综上所述,本申请实施例中,通过获取第一小程序对应小程序代码的抽象语法树,对抽象语法树进行特征提取,并根据提取到的代码特征生成第一小程序指纹,从而根据第一小程序代码以及小程序指纹库中第二小程序的第二小程序指纹,确定出第一小程序与第二小程序之间的代码相似度;采用本申请实施例提供的方法,预先基于抽象语法树为已有小程序生成小程序指纹,后续即可利用小程序指纹库中存储的小程序指纹进行相似度检测,而无需对两两小程序的源代码进行分析比较,从而提高了小程序代码相似度的检测效率,进而提高了小程序的上线速度。
通过上述步骤201得到的抽象语法树虽然是对源代码语法结构的抽象表示(源代码中结构以及内容细节得到保留,而其他细节则被省略),但是其中仍旧包含大量冗余信息,且层次结构较为复杂。在一个示意性的例子中,如图3所示,对源代码“var x=func(“hello world”);”进行解析,得到原始抽象语法树31,该原始抽象语法树31是由大量节点311构成的树状层次结构。若直接对抽象语法树进行特征提取,提取到的代码特征的数量过于庞大,不利于后续指纹生成以及指纹匹配。因此在一些实施例中,在进行代码特征提取前,服务器根据简化规则,对抽象语法树进行简化,得到简化后的抽象语法树,其中,简化后抽象语法树的广度小于简化前抽象语法树的广度,且简化后抽象语法树的深度小于简化前抽象语法树的深度。后续服务器即对简化后的抽象语法树进行特征提取。
在一种可能的实施方式中,简化规则包括如下至少一条:
1、将抽象语法树中的变量替换为变量对应的变量类型。
基于源代码生成的抽象语法树中,源代码中的变量会被保留。若仅对相同语法结构代码中的变量进行替换,即将替换变量后得到的代码视为非雷同代码显然不合理,因此在进行抽象语法树简化时,服务器将抽象语法树中的变量替换为对应的变量类型。
在一种可能的实施方式中,服务器基于变量与变量类型之间的对应关系,对变量进行替换。
示意性的,当变量为数值(比如整数、浮点数等等)时,服务器将变量替换为“NUM”;当变量为字符串时,服务器将变量替换为“STR”,本实施例对此不作限定。
如图3所示,原始抽象语法树31中的节点“hello world”是字符串类型的变量,因此服务器将该节点的节点名称替换为“STR”,表征该节点处的变量为字符串。
2、省略抽象语法树中的第一预设字段,第一预设字段属于第一字段列表。
抽象语法树虽然在一定程度上对源代码的语法结构进行了简化,但是仍旧包含一些冗余字段,对于这些冗余字段。由于这些冗余字段的缺失并不会对语法结构造成影响,因此在一种可能的实施方式中,服务器基于第一字段列表,对抽象语法树中的第一预设字段进行省略。其中,第一字段列表中包含支持省略的冗余字段,且该第一字段列表可以由开发人员预设设置。
示意性的,如图3所示,节点“CallExpression”对应的子节点“callee”和“arguement”属于第一字段列表,因此服务器将简化语法抽象树时将节点“callee”和“arguement”省略。
3、根据第二字段列表简化抽象语法树中的第二预设字段,第二字段列表中包含第二预设字段与简化后字段之间的对应关系。
对于抽象语法树中节点名称包含较多字符的节点,在不影响节点表意的前提下,可以对节点名称进行简化,以此降低简化后抽象语法树中各个节点对应节点名称所占的字段长度。
在一种可能的实施方式中,服务器中还存储有第二字段列表,属于该第二字段列表中包含简化前后字段之间的对应关系。在简化抽象语法树的过程中,服务器即检测节点的节点名称与第二字段列表中的第二预设字段(即第二字段列表中简化前的字段)是否匹配,若匹配,则进一步获取该第二预设字段对应的简化后字段,并利用简化后字段替换该节点名称。
示意性的,如图3所示,服务器根据第二原始抽象语法树31,将节点“VariableDeclaration”替换为“Var”,将节点“Identifier”替换为“ID”。
4、简化抽象语法树中多级调用字段。
由于抽象语法树中会保留多级调用这一类的复杂结构,因此在简化过程中,服务器还可以对多级调用字段进行简化。在一种可能的实施方式中,服务器存储有第三字段列表,该第三字段列表中更包含多级调用字段与简化后字段之间的对应关系。服务器即检测节点的节点名称与第三字段列表中的多级调用字段是否匹配,若匹配,则进一步获取多级调用字段对应的简化字段。
在一个示意性的例子中,服务器将抽象语法树中的多级调用Identifier.Identifier.Identifier简化为Identifier。
5、去重抽象语法树中的重复子树。
由于抽象语法树中,同一节点下可能包含语法结构相同的重复子树,因此在简化过程中,服务器可以对抽象语法树中的重复子树进行删除。
在一种可能的实施方式中,对于抽象语法树中的各个节点,服务器按照深度优先遍历的原则,对各儿子节点对应的子树进行序列化,并根据序列化后得到字符串序列进行子树去重。
6、根据抽象语法树中节点之间的父子关系进行递归简化。
在一种可能的实施方式中,服务器按照先子节点后父节点的顺序,对抽象语法树进行递归简化,即先对所有子树进行简化,然后在对子树对应的父节点进行简化。
在一个示意性的例子中,如图3所示,服务器基于上述简化规则,对原始抽象语法树31进行简化后,得到仅包含三层树状结构的目标抽象语法树32。
本实施例中,服务器获取到小程序代码的抽象语法树后,通过预设设置的简化规则对抽象语法树进行简化,从而简化抽象语法树的树状层次结构,进而降低后续进行代码特征提取的难度以及提取到的代码特征的数量。
在一种可能的实施方式中,服务器基于代码特征生成小程序指纹时,首先生成原始指纹,然后对原始指纹进行特征降维,得到索引指纹。后续进行代码相似度检测时,服务器首先基于索引指纹对小程序指纹库进行粗筛,筛选出索引指纹相似度较高的第二小程序,然后再基于原始指纹对粗筛得到的第二小程序进行细筛,最终筛选出代码相似度较高的第二小程序,以此提高代码相似度检测的效率,下面采用示例性的实施例进行说明。
请参考图4,其示出了本申请另一个示例性实施例提供的小程序代码相似度确定方法的流程图。该方法包括如下步骤。
步骤401,获取第一小程序对应小程序代码的抽象语法树,抽象语法树用于表征小程序代码的抽象语法结构。
本步骤的实施方式可以参考上述步骤201,本实施例在此不再赘述。
步骤402,从抽象语法树中选取语法子树,语法子树为预设深度。
可选的,该抽象语法树为经过简化后的抽象语法树。
在一种可能的实施方式中,服务器根据抽象语法树中各个节点所处的层级,将抽象语法树划分为若干语法子树,其中,每个语法子树为预设深度。比如,该预设深度可以为3、4或5。
在一些实施例中,服务器遍历抽象语法树中的各个节点,确定以该节点为父节点的子树的深度,若子树的深度达到预设深度,则以该节点为父节点,选取预设深度的子树作为语法子树。
示意性的,如图5所示,抽象语法树51为7层树状结构,服务器以预设深度为3,通过遍历抽象语法树中的各个节点,将抽象语法树51划分为5个语法子树52。其中,由于以C、D、G、H、I、K、L、M为父节点的子树的深度小于3,因此,服务器最终得到的5个语法子树52分别以A、B、E、F、J为父节点。
步骤403,按照节点遍历规则遍历语法子树中的节点,得到语法子树对应的特征序列,特征序列包含语法子树中各个节点的节点名称,节点遍历规则为深度遍历或广度遍历。
对于选取到的各个语法子树,服务器按照统一的节点遍历规则,遍历语法子树中各个节点,得到由各个节点的节点名称构成的特征序列。其中,该节点遍历规则可以为深度遍历或广度遍历中的任一种。
示意性的,如图5所示,服务器对各个语法子树52进行深度遍历,得到5个特征序列分别为:ABCE、BCDEF、EFGJ、FGHIJK、JKLM。
步骤404,将由特征序列构成的集合确定为代码特征。
进一步的,服务器根据各个语法子树对应的特征序列构建集合,并将构建得到的集合确认为代码特征。
示意性的,如图5所示,服务器根据各个特征序列构建得到代码特征53。
需要说明的是,在构建代码特征的过程中,服务器对相同特征序列进行去重,从而得到去重后的代码特征。
步骤405,根据代码特征生成第一小程序的第一原始指纹,第一原始指纹的特征值数量与特征序列的数量相同。
由于代码特征中的各个特征序列为不定长度的字符串,为了便于后续进行特征表达,在一种可能的实施方式中,服务器通过字典模型对代码特征中的各个特征序列进行转换,得到特征序列对应的特征值。其中,字典模型中包含特征序列与特征值之间的映射关系,且不同特征序列对应不同特征值,即特征值具有唯一性。进一步的,服务器将由特征值构成的集合确定为第一原始指纹。
在一些实施例中,该特征值可以为采用数值形式,即通过字典模型将字符串形式的特征序列转换为数值形式,相应的,经过字典模型转换后得到的第一原始指纹即为特征向量,且特征向量对应的特征值数量为特征序列的数量。本实施例并不对特征值以及原始指纹的表现形式进行限定。
针对字典模型的生成方式,在一种可能的实施方式中,该字典模型由服务器在基于已上线的小程序构建小程序指纹库的过程中构建。
由于特征序列的种类繁多,因此在一些实施例中,响应于字典模型不包含代码特征中特征序列对应的特征值,服务器为代码特征中的特征序列分配目标特征值,该目标特征值和字典模型中的特征值不同,并根据目标特征值和代码特征中的特征序列更新字典模型。
示意性的,如图6所示,服务器通过字典模型54对代码特征53进行转换,得到第一原始指纹55,其中,在生成第一原始指纹55的过程中,服务器对字典模型54进行模型更新。
步骤406,对第一原始指纹进行特征降维,得到第一小程序的第一索引指纹,第一索引指纹包含预设数量的特征维度。
由于第一原始指纹的特征值数量与特征序列的数量一致,即与语法子树的数量一致,因此当抽象语法树的层次结构较为复杂时,第一原始指纹的特征维度较高,且不同小程序对应的原始指纹的长度不同(因为特征序列数量不同,导致特征值数量不同)。
若直接使用原始指纹进行代码相似度检测,检测时的运算量较大,进而影响检测速度。为了提高检测速度,在一种可能的实施方式中,服务器对生成的第一原始指纹进行特征降维,得到具有预设数量特征维度的第一索引指纹。
在一些实施例中,为了使索引指纹之间的碰撞率(即相似度),与原始指纹之间的相似度呈正相关关系,服务器通过最小哈希(min hash)算法对第一原始特征指纹进行特征降维,得到第一索引指纹。其中,第一索引指纹为预设维度的向量。
其中,利用最小哈希算法进行特征降维时,服务器对原始指纹中的特征值进行重排,每次选取最小特征值作为当前特征维度的特征,最终产生固定维度且有序的索引指纹。
示意性的,如图6所示,服务器对第一原始指纹55进行最小哈希运算,得到256维的第一索引指纹56。
需要说明的是,除了采用最小哈希算法进行特征降维外,服务器还可以采用其他算法进行降维,只需要保证降维后索引指纹的碰撞率与原始指纹的相似度呈正相关关系即可,本实施例对具体特征降维算法并不进行限定。
步骤407,将第一原始指纹和第一索引指纹确定为第一小程序指纹。
进一步的,服务器将生成的第一原始指纹和第一索引指纹确定为第一小程序指纹。
步骤408,根据第一索引指纹,从小程序指纹库中筛选第二小程序,第二小程序的第二索引指纹与第一索引指纹的索引相似度大于阈值。
基于小程序指纹进行代码相似度检测时,为了提高检测效率,服务器首先根据第一索引指纹,从小程序指纹库中粗筛出索引相似度大于阈值的第二小程序。由于索引指纹之间的相似度与原始指纹之间的相似度呈正相关关系,因此,筛选出的第二小程序与第一小程序的原始指纹的相似度也较高,相应的,两者的代码相似度也较高。
在一种可能的实施方式中,如图7所示,基于索引指纹筛选小程序的过程可以包括如下步骤。
步骤408A,根据第一索引指纹中的第n特征维度,从小程序指纹库对应的倒排索引中查找第n小程序列表,倒排索引中包括特征维度与小程序之间的对应关系,第n小程序列表中候选小程序对应的索引指纹包含第n特征维度,n为小于等于预设数量的正整数。
在一些实施例中,服务器计算小程序库中各个小程序对应的索引指纹,并根据索引指纹中包含的各个特征维度,构建倒排索引,该倒排索引中包含特征维度以及包含该特征维度的小程序的小程序标识。
示意性的,如图6所示,倒排索引57中,包含10000个特征维度(F1至F10000),以及各个特征维度对应的小程序标识。其中,小程序U1、U2、U3对应的索引指纹中包含特征维度F1,小程序U2、U15、U67对应的索引指纹中包含特征维度F2。
在确定第一小程序与小程序库中候选小程序之间的索引指纹相似度时,服务器即根据第一索引指纹中的特征维度,查找各个特征维度对应的小程序列表。
示意性的,如图6所示,服务器根据第一索引指纹56中的特征维度F1,查找到小程序列表中包含小程序{U1,U2,U3,…},根据第一索引指纹56中的特征维度F2,查找到小程序列表中包含小程序{U2,U15,U67,…},根据第一索引指纹56中的特征维度F3,查找到小程序列表中包含小程序{U14,U84,U98,…}等等。
步骤408B,根据各个小程序列表中候选小程序的出现次数,确定各个候选小程序与第一小程序的索引相似度。
在一种可能的实施方式中,服务器对第一索引指纹中各个特征维度对应的小程序列表中,候选小程序的出现次数进行统计,并将候选小程序的出现总次数与特征维度总数的比值确定索引相似度。
示意性的,服务器计算得到的候选小程序与第一小程序之间的索引相似度如表一所示。
表一
小程序标识 | 出现总次数/特征维度总数 | 索引相似度 |
U1 | 200/256 | 0.78123 |
U2 | 45/256 | 0.1758 |
U3 | 109/256 | 0.4258 |
… | … | … |
步骤408C,将索引相似度大于阈值的候选小程序确定为第二小程序。
进一步的,服务器将索引相似度大于阈值的候选小程序确定为第二小程序,后续即对第二小程序进行代码相似度检测。比如,该阈值可以为0.8。
当然,服务器也可以根据索引相似度的降序,对候选小程序进行排序,并将前m%的候选小程序确定为第二小程序,本实施例对此不作限定。
示意性的,如图6所示,将小程序{U1,U5,U127,…,U981}确定为第二小程序。
步骤409,根据第一原始指纹,以及第二小程序的第二原始指纹,确定第一小程序与第二小程序的代码相似度。
对于筛选出的第二小程序,服务器进一步根据第一原始指纹与第二小程序的第二原始指纹,确定小程序之间的代码相似度。
由于第二小程序为小程序库中的一小部分小程序,因此相较于计算第一小程序与所有候选小程序的代码相似度,采用上述方式粗筛小程序能够降低基于原始指纹进行代码相似度计算时的计算量,从而有助于提高代码相似度的检测速度。
在一种可能的实施方式中,由于原始指纹是由多个特征值构成,因此服务器将将第一原始指纹中特征值与第二原始指纹中特征值的杰卡德(jaccard)相似度确定为代码相似度。其中,服务器确定第一原始指纹与第二原始指纹的特征值交集,以及第一原始指纹与第二原始指纹的特征值并集,从而将特征值交集与特征值并集的比值(特征值数量的比值)确定为jaccard相似度。
示意性的,如图6所示,服务器根据第一小程序对应的第一原始指纹55,计算与各个第二小程序对应第二原始指纹58的jaccard相似度,从而得到小程序代码之间的代码相似度。
在一些实施例中,若第一小程序与各个第二小程序的代码相似度均小于代码相似度阈值,服务器确定第一小程序通过相似度检测,进而根据第一索引指纹更新倒排索引,并将第一原始指纹与第一小程序关联存储,即将第一小程序的指纹添加至小程序指纹库中,用于后续小程序代码相似度检测。
本实施例中,服务器通过对原始指纹进行特征降维,得到索引指纹,并基于索引指纹构建倒排索引,使得进行代码相似度检测时,能够首先基于索引指纹筛选出部分索引相似度较高的小程序,进而基于原始指纹对筛选出的小程序进行代码相似度检测,避免对所有候选小程序均进行原始指纹相似度运算,在降低运算量的同时,提高了小程序代码相似度的检测效率。
图8是本申请一个示例性实施例提供的小程序代码相似度确定装置的结构框图,该装置包括:
语法树获取模块801,同于获取第一小程序对应小程序代码的抽象语法树,所述抽象语法树用于表征所述小程序代码的抽象语法结构;
特征提取模块802,用于基于所述抽象语法树中节点之间的父子关系,对所述抽象语法树进行特征提取,得到所述第一小程序的代码特征;
指纹生成模块803,用于根据所述代码特征生成所述第一小程序的第一小程序指纹;
相似度确定模块804,用于根据所述第一小程序指纹与小程序指纹库中第二小程序的第二小程序指纹,确定所述第一小程序与所述第二小程序的代码相似度。
可选的,特征提取模块802,包括:
子树选取单元,用于从所述抽象语法树中选取语法子树,所述语法子树为预设深度;
序列生成单元,用于按照节点遍历规则遍历所述语法子树中的节点,得到所述语法子树对应的特征序列,所述特征序列包含所述语法子树中各个节点的节点名称,所述节点遍历规则为深度遍历或广度遍历;
特征确定单元,用于将由所述特征序列构成的集合确定为所述代码特征。
可选的,指纹生成模块803,,包括:
第一指纹生成单元,用于根据所述代码特征生成所述第一小程序的第一原始指纹,所述第一原始指纹的特征值数量与所述特征序列的数量相同;
第二指纹生成单元,用于对所述第一原始指纹进行特征降维,得到所述第一小程序的第一索引指纹,所述第一索引指纹包含预设数量的特征维度;
指纹确定单元,用于将所述第一原始指纹和所述第一索引指纹确定为所述第一小程序指纹。
可选的,第一指纹生成单元,用于:
通过字典模型,对所述代码特征中的所述特征序列进行特征转换,得到所述特征序列对应的特征值,所述字典模型中包含所述特征序列与所述特征值之间的映射关系;
将由所述特征值构成的集合确定为所述第一原始指纹。
可选的,所述装置还包括:
模型更新模块,用于响应于所述字典模型不包含所述代码特征中所述特征序列对应的所述特征值,为所述代码特征中的所述特征序列分配目标特征值,所述目标特征值和所述字典模型中的所述特征值不同;
根据所述目标特征值和所述代码特征中的所述特征序列更新所述字典模型。
可选的,第二指纹生成单元,用于:
通过最小哈希算法,对所述第一原始指纹进行特征降维,得到所述第一索引指纹。
可选的,相似度确定模块804,包括:
筛选单元,用于根据所述第一索引指纹,从所述小程序指纹库中筛选所述第二小程序,所述第二小程序的第二索引指纹与所述第一索引指纹的索引相似度大于阈值;
相似度确定单元,用于根据所述第一原始指纹,以及所述第二小程序的第二原始指纹,确定所述第一小程序与所述第二小程序的所述代码相似度。
可选的,筛选单元,用于:
根据所述第一索引指纹中的第n特征维度,从所述小程序指纹库对应的倒排索引中查找第n小程序列表,所述倒排索引中包括特征维度与小程序之间的对应关系,所述第n小程序列表中候选小程序对应的索引指纹包含所述第n特征维度,n为小于等于所述预设数量的正整数;
根据各个小程序列表中所述候选小程序的出现次数,确定各个候选小程序与所述第一小程序的所述索引相似度;
将所述索引相似度大于所述阈值的所述候选小程序确定为所述第二小程序。
可选的,所述装置还包括:
索引更新模块,用于根据所述第一索引指纹更新所述倒排索引,并将所述第一原始指纹与所述第一小程序关联存储。
可选的,相似度确定单元,用于:
将所述第一原始指纹中特征值与所述第二原始指纹中特征值的杰卡德相似度确定为所述代码相似度。
可选的,所述装置还包括:
简化模块,用于根据简化规则,对所述抽象语法树进行简化,得到简化后的所述抽象语法树,其中,简化后所述抽象语法树的广度小于简化前所述抽象语法树的广度,且简化后所述抽象语法树的深度小于简化前所述抽象语法树的深度。
所述简化规则包括如下至少一条:
将所述抽象语法树中的变量替换为所述变量对应的变量类型;和,
省略所述抽象语法树中的第一预设字段,所述第一预设字段属于第一字段列表;和,
根据第二字段列表简化所述抽象语法树中的第二预设字段,所述第二字段列表中包含所述第二预设字段与简化后字段之间的对应关系;和,
简化所述抽象语法树中多级调用字段;和,
去重所述抽象语法树中的重复子树;和,
根据所述抽象语法树中节点之间的父子关系进行递归简化。
综上所述,本申请实施例中,通过获取第一小程序对应小程序代码的抽象语法树,对抽象语法树进行特征提取,并根据提取到的代码特征生成第一小程序指纹,从而根据第一小程序代码以及小程序指纹库中第二小程序的第二小程序指纹,确定出第一小程序与第二小程序之间的代码相似度;采用本申请实施例提供的方法,预先基于抽象语法树为已有小程序生成小程序指纹,后续即可利用小程序指纹库中存储的小程序指纹进行相似度检测,而无需对两两小程序的源代码进行分析比较,从而提高了小程序代码相似度的检测效率,进而提高了小程序的上线速度。
需要说明的是,上述小程序代码相似度确定装置中模块仅为示意性说明,其可以划分为更多功能模块,以实现上述各个实施例提供的小程序启动方法,本实施例对此不作限定。
请参考图9,其示出了本申请一个示例性实施例提供的服务器的结构示意图。具体来讲:所述服务器900包括中央处理单元(Central Processing Unit,CPU)901、包括随机存取存储器902和只读存储器903的系统存储器904,以及连接系统存储器904和中央处理单元901的系统总线905。所述服务器900还包括帮助计算机内的各个器件之间传输信息的基本输入/输出系统(Input/Output,I/O系统)906,和用于存储操作系统913、应用程序914和其他程序模块915的大容量存储设备907。
所述基本输入/输出系统906包括有用于显示信息的显示器908和用于用户输入信息的诸如鼠标、键盘之类的输入设备909。其中所述显示器908和输入设备909都通过连接到系统总线905的输入输出控制器910连接到中央处理单元901。所述基本输入/输出系统906还可以包括输入输出控制器910以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入输出控制器910还提供输出到显示屏、打印机或其他类型的输出设备。
所述大容量存储设备907通过连接到系统总线905的大容量存储控制器(未示出)连接到中央处理单元901。所述大容量存储设备907及其相关联的计算机可读介质为服务器900提供非易失性存储。也就是说,所述大容量存储设备907可以包括诸如硬盘或者驱动器之类的计算机可读介质(未示出)。
不失一般性,所述计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括随机存取记忆体(RAM,Random Access Memory)、只读存储器(ROM,Read Only Memory)、闪存或其他固态存储其技术,只读光盘(Compact Disc Read-Only Memory,CD-ROM)、数字通用光盘(Digital Versatile Disc,DVD)或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知所述计算机存储介质不局限于上述几种。上述的系统存储器904和大容量存储设备907可以统称为存储器。
存储器存储有一个或多个程序,一个或多个程序被配置成由一个或多个中央处理单元901执行,一个或多个程序包含用于实现上述方法的指令,中央处理单元901执行该一个或多个程序实现上述各个方法实施例提供的方法。
根据本申请的各种实施例,所述服务器900还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即服务器900可以通过连接在所述系统总线905上的网络接口单元911连接到网络912,或者说,也可以使用网络接口单元911来连接到其他类型的网络或远程计算机系统(未示出)。
所述存储器还包括一个或者一个以上的程序,所述一个或者一个以上程序存储于存储器中,所述一个或者一个以上程序包含用于进行本申请实施例提供的方法中由服务器所执行的步骤。
本领域技术人员可以理解,图9中示出的结构并不构成对服务器900的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
本申请实施例还提供一种计算机可读存储介质,该可读存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现上述任一实施例所述的小程序代码相似度确定方法。
本申请还提供了一种计算机程序产品,当计算机程序产品在服务器上运行时,使得服务器执行上述各个方法实施例提供的小程序代码相似度确定方法。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (15)
1.一种小程序代码相似度确定方法,其特征在于,所述方法包括:
获取第一小程序对应小程序代码的抽象语法树,所述抽象语法树用于表征所述小程序代码的抽象语法结构;
基于所述抽象语法树中节点之间的父子关系,对所述抽象语法树进行特征提取,得到所述第一小程序的代码特征;
根据所述代码特征生成所述第一小程序的第一小程序指纹;
根据所述第一小程序指纹与小程序指纹库中第二小程序的第二小程序指纹,确定所述第一小程序与所述第二小程序的代码相似度。
2.根据权利要求1所述的方法,其特征在于,所述基于所述抽象语法树中节点之间的父子关系,对所述抽象语法树进行特征提取,得到所述第一小程序的代码特征,包括:
从所述抽象语法树中选取语法子树,所述语法子树为预设深度;
按照节点遍历规则遍历所述语法子树中的节点,得到所述语法子树对应的特征序列,所述特征序列包含所述语法子树中各个节点的节点名称,所述节点遍历规则为深度遍历或广度遍历;
将由所述特征序列构成的集合确定为所述代码特征。
3.根据权利要求2所述的方法,其特征在于,所述根据所述代码特征生成所述第一小程序的第一小程序指纹,包括:
根据所述代码特征生成所述第一小程序的第一原始指纹,所述第一原始指纹的特征值数量与所述特征序列的数量相同;
对所述第一原始指纹进行特征降维,得到所述第一小程序的第一索引指纹,所述第一索引指纹包含预设数量的特征维度;
将所述第一原始指纹和所述第一索引指纹确定为所述第一小程序指纹。
4.根据权利要求3所述的方法,其特征在于,所述根据所述代码特征生成所述第一小程序的第一原始指纹,包括:
通过字典模型,对所述代码特征中的所述特征序列进行特征转换,得到所述特征序列对应的特征值,所述字典模型中包含所述特征序列与所述特征值之间的映射关系;
将由所述特征值构成的集合确定为所述第一原始指纹。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
响应于所述字典模型不包含所述代码特征中所述特征序列对应的所述特征值,为所述代码特征中的所述特征序列分配目标特征值,所述目标特征值和所述字典模型中的所述特征值不同;
根据所述目标特征值和所述代码特征中的所述特征序列更新所述字典模型。
6.根据权利要求3所述的方法,其特征在于,所述对所述第一原始指纹进行特征降维,得到所述第一小程序的第一索引指纹,所述第一索引指纹包含预设数量的特征维度,包括:
通过最小哈希算法,对所述第一原始指纹进行特征降维,得到所述第一索引指纹。
7.根据权利要求3至6任一所述的方法,其特征在于,所述根据所述第一小程序指纹与小程序指纹库中第二小程序的第二小程序指纹,确定所述第一小程序与所述第二小程序的代码相似度,包括:
根据所述第一索引指纹,从所述小程序指纹库中筛选所述第二小程序,所述第二小程序的第二索引指纹与所述第一索引指纹的索引相似度大于阈值;
根据所述第一原始指纹,以及所述第二小程序的第二原始指纹,确定所述第一小程序与所述第二小程序的所述代码相似度。
8.根据权利要求7所述的方法,其特征在于,所述根据所述第一索引指纹,从所述小程序指纹库中筛选所述第二小程序,包括:
根据所述第一索引指纹中的第n特征维度,从所述小程序指纹库对应的倒排索引中查找第n小程序列表,所述倒排索引中包括特征维度与小程序之间的对应关系,所述第n小程序列表中候选小程序对应的索引指纹包含所述第n特征维度,n为小于等于所述预设数量的正整数;
根据各个小程序列表中所述候选小程序的出现次数,确定各个候选小程序与所述第一小程序的所述索引相似度;
将所述索引相似度大于所述阈值的所述候选小程序确定为所述第二小程序。
9.根据权利要求8所述的方法,其特征在于,所述方法还包括:
根据所述第一索引指纹更新所述倒排索引,并将所述第一原始指纹与所述第一小程序关联存储。
10.根据权利要求7所述的方法,其特征在于,所述根据所述第一原始指纹,以及所述第二小程序的第二原始指纹,确定所述第一小程序与所述第二小程序的所述代码相似度,包括:
将所述第一原始指纹中特征值与所述第二原始指纹中特征值的杰卡德相似度确定为所述代码相似度。
11.根据权利要求1至6任一所述的方法,其特征在于,所述获取第一小程序对应小程序代码的抽象语法树之后,所述方法还包括:
根据简化规则,对所述抽象语法树进行简化,得到简化后的所述抽象语法树,其中,简化后所述抽象语法树的广度小于简化前所述抽象语法树的广度,且简化后所述抽象语法树的深度小于简化前所述抽象语法树的深度。
12.根据权利要求11所述的方法,其特征在于,所述简化规则包括如下至少一条:
将所述抽象语法树中的变量替换为所述变量对应的变量类型;和,
省略所述抽象语法树中的第一预设字段,所述第一预设字段属于第一字段列表;和,
根据第二字段列表简化所述抽象语法树中的第二预设字段,所述第二字段列表中包含所述第二预设字段与简化后字段之间的对应关系;和,
简化所述抽象语法树中多级调用字段;和,
去重所述抽象语法树中的重复子树;和,
根据所述抽象语法树中节点之间的父子关系进行递归简化。
13.一种小程序代码相似度确定装置,其特征在于,所述装置包括:
语法树获取模块,同于获取第一小程序对应小程序代码的抽象语法树,所述抽象语法树用于表征所述小程序代码的抽象语法结构;
特征提取模块,用于基于所述抽象语法树中节点之间的父子关系,对所述抽象语法树进行特征提取,得到所述第一小程序的代码特征;
指纹生成模块,用于根据所述代码特征生成所述第一小程序的第一小程序指纹;
相似度确定模块,用于根据所述第一小程序指纹与小程序指纹库中第二小程序的第二小程序指纹,确定所述第一小程序与所述第二小程序的代码相似度。
14.一种服务器,其特征在于,所述服务器包括:处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如权利要求1至12任一项所述的小程序代码相似度确定方法。
15.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如权利要求1至12任一项所述的小程序代码相似度确定方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010514111.XA CN111562920A (zh) | 2020-06-08 | 2020-06-08 | 小程序代码相似度确定方法、装置、服务器及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010514111.XA CN111562920A (zh) | 2020-06-08 | 2020-06-08 | 小程序代码相似度确定方法、装置、服务器及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111562920A true CN111562920A (zh) | 2020-08-21 |
Family
ID=72072524
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010514111.XA Pending CN111562920A (zh) | 2020-06-08 | 2020-06-08 | 小程序代码相似度确定方法、装置、服务器及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111562920A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112035099A (zh) * | 2020-09-01 | 2020-12-04 | 北京天融信网络安全技术有限公司 | 一种抽象语法树中节点的向量化表示方法及装置 |
CN112416431A (zh) * | 2020-11-23 | 2021-02-26 | 南京航空航天大学 | 一种基于编码序列表示的源代码片段成对比较方法 |
CN112579155A (zh) * | 2021-02-23 | 2021-03-30 | 北京北大软件工程股份有限公司 | 代码相似性检测方法、装置以及存储介质 |
WO2024017100A1 (zh) * | 2022-07-19 | 2024-01-25 | 华为云计算技术有限公司 | 获取代码片段的方法、装置及存储介质 |
-
2020
- 2020-06-08 CN CN202010514111.XA patent/CN111562920A/zh active Pending
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112035099A (zh) * | 2020-09-01 | 2020-12-04 | 北京天融信网络安全技术有限公司 | 一种抽象语法树中节点的向量化表示方法及装置 |
CN112035099B (zh) * | 2020-09-01 | 2024-03-15 | 北京天融信网络安全技术有限公司 | 一种抽象语法树中节点的向量化表示方法及装置 |
CN112416431A (zh) * | 2020-11-23 | 2021-02-26 | 南京航空航天大学 | 一种基于编码序列表示的源代码片段成对比较方法 |
CN112416431B (zh) * | 2020-11-23 | 2023-02-14 | 南京航空航天大学 | 一种基于编码序列表示的源代码片段成对比较方法 |
CN112579155A (zh) * | 2021-02-23 | 2021-03-30 | 北京北大软件工程股份有限公司 | 代码相似性检测方法、装置以及存储介质 |
WO2024017100A1 (zh) * | 2022-07-19 | 2024-01-25 | 华为云计算技术有限公司 | 获取代码片段的方法、装置及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111562920A (zh) | 小程序代码相似度确定方法、装置、服务器及存储介质 | |
US20210248323A1 (en) | Automated identification of concept labels for a set of documents | |
CN115061721A (zh) | 一种报表生成方法、装置、计算机设备及存储介质 | |
CN111708805A (zh) | 数据查询方法、装置、电子设备及存储介质 | |
CN112883030A (zh) | 数据收集方法、装置、计算机设备和存储介质 | |
RU2568276C2 (ru) | Способ извлечения полезного контента из установочных файлов мобильных приложений для дальнейшей машинной обработки данных, в частности поиска | |
CN113961768B (zh) | 敏感词检测方法、装置、计算机设备和存储介质 | |
CN110704472A (zh) | 数据查询统计方法及装置 | |
CN116483850A (zh) | 数据处理方法、装置、设备以及介质 | |
CN117940894A (zh) | 用于检测代码克隆的系统和方法 | |
CN113821657A (zh) | 基于人工智能的图像处理模型训练方法及图像处理方法 | |
JP2013029891A (ja) | 抽出プログラム、抽出方法及び抽出装置 | |
CN114676155A (zh) | 代码提示信息的确定方法、数据集的确定方法及电子设备 | |
CN115017161A (zh) | 一种结合虚拟dom更新树形数据结构方法、装置及应用 | |
US11074401B2 (en) | Merging delta object notation documents | |
CN114490673A (zh) | 数据信息处理方法、装置、电子设备及存储介质 | |
CN116822491A (zh) | 日志解析方法及装置、设备、存储介质 | |
US11023674B2 (en) | Generation and application of object notation deltas | |
CN109885953B (zh) | 一种模型构件的映射方法和装置 | |
CN113128213A (zh) | 日志模板提取方法及装置 | |
CN113138936B (zh) | 数据处理方法、装置、存储介质及处理器 | |
CN114969131B (zh) | 一种信息的查询方法、装置及设备 | |
CN115168399B (zh) | 基于图形化界面的数据处理方法、装置、设备及存储介质 | |
CN116483735B (zh) | 一种代码变更的影响分析方法、装置、存储介质及设备 | |
CN114003714B (zh) | 一种文档上下文感知的智能知识推送方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40029145 Country of ref document: HK |
|
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |