CN112148305A - 一种应用检测方法、装置、计算机设备和可读存储介质 - Google Patents
一种应用检测方法、装置、计算机设备和可读存储介质 Download PDFInfo
- Publication number
- CN112148305A CN112148305A CN202011171532.3A CN202011171532A CN112148305A CN 112148305 A CN112148305 A CN 112148305A CN 202011171532 A CN202011171532 A CN 202011171532A CN 112148305 A CN112148305 A CN 112148305A
- Authority
- CN
- China
- Prior art keywords
- code block
- target
- code
- hash value
- application
- 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
- 238000001514 detection method Methods 0.000 title claims abstract description 107
- 238000000034 method Methods 0.000 claims abstract description 32
- 230000004044 response Effects 0.000 claims abstract description 18
- 239000012634 fragment Substances 0.000 claims description 39
- 238000004364 calculation method Methods 0.000 claims description 27
- 238000004422 calculation algorithm Methods 0.000 claims description 21
- 238000012545 processing Methods 0.000 claims description 18
- 238000004458 analytical method Methods 0.000 claims description 16
- 238000007621 cluster analysis Methods 0.000 claims description 7
- 238000000605 extraction Methods 0.000 claims description 4
- 238000004590 computer program Methods 0.000 description 8
- 238000010586 diagram Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 8
- 230000008569 process Effects 0.000 description 6
- 239000003550 marker Substances 0.000 description 5
- 230000009467 reduction Effects 0.000 description 4
- 238000002372 labelling Methods 0.000 description 3
- 239000013598 vector Substances 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 230000006835 compression Effects 0.000 description 2
- 238000007906 compression Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000003062 neural network model Methods 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
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/53—Decompilation; Disassembly
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- 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)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例提供了一种应用检测方法、装置、计算机设备和可读存储介质,其中方法包括:响应于针对目标应用的代码检测操作,从目标应用的程序代码中分割成出目标代码块;计算所述目标代码块与至少一个参考代码块之间的代码相似度,一个参考代码块对应一个软件开发工具包;根据所述目标代码块和各参考代码块之间的代码相似度,从所述至少一个参考代码块中确定与所述目标代码块相匹配的匹配代码块;根据所述匹配代码块为所述目标代码块添加目标标记信息,所述目标标记信息用于指示所述目标代码块属于所述匹配代码块对应的软件开发工具包,可以快速检测出应用中包括的SDK,提高应用检测的效率。
Description
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种应用检测方法、装置、计算机设备和可读存储介质。
背景技术
目前,应用程序开发者为了提高开发效率,降低成本,普遍使用第三方的软件开发工具包(Software Development Kit,SDK)。一般来说,一个正式上架的应用程序(Application,APP)都会集成20个左右甚至更多的第三方SDK。第三方SDK在被广泛使用的同时,其相关的安全问题也日益频发,如SDK自身的安全漏洞,私自收集用户隐私数据,以及部分恶意SDK利用APP执行恶意操作等,并且不同类型SDK会存在不同的安全隐患,因此,需要检测APP中集成了哪些类型的第三方SDK。目前,在第三方SDK检测上,主要是基于特征匹配,提取SDK代码包中的某些特征来标识某个SDK,然后在APP检测中,如果发现该特征就标识APP中集成了此SDK,该方式主要依赖SDK代码包,检测效率低。
发明内容
本发明实施例提供了一种应用检测方法、装置、计算机设备和可读存储介质,可以快速检测出应用中包括的SDK,提高应用检测的效率。
一方面,本发明实施例提供了一种应用检测方法,所述方法包括:
响应于针对目标应用的代码检测操作,从目标应用的程序代码中分割出目标代码块;
计算所述目标代码块与至少一个参考代码块之间的代码相似度,一个参考代码块对应一个软件开发工具包;
根据所述目标代码块和各参考代码块之间的代码相似度,从所述至少一个参考代码块中确定与所述目标代码块相匹配的匹配代码块;
根据所述匹配代码块为所述目标代码块添加目标标记信息,所述目标标记信息用于指示所述目标代码块属于所述匹配代码块对应的软件开发工具包。
另一方面,本申请实施例提供了一种应用检测装置,所述装置包括:
分割单元,用于响应于针对目标应用的代码检测操作,从目标应用的程序代码中分割出目标代码块;
计算单元,用于计算所述目标代码块与至少一个参考代码块之间的代码相似度,一个参考代码块对应一个软件开发工具包;
确定单元,用于根据所述目标代码块和各参考代码块之间的代码相似度,从所述至少一个参考代码块中确定与所述目标代码块相匹配的匹配代码块;
添加单元,用于根据所述匹配代码块为所述目标代码块添加目标标记信息,所述目标标记信息用于指示所述目标代码块属于所述匹配代码块对应的软件开发工具包。
再一方面,本申请实施例提供了一种计算机设备,所述计算机设备包括输入设备、输出设备,所述计算机设备还包括:
处理器,适于实现一条或多条指令;以及,
计算机存储介质,所述计算机存储介质存储有一条或多条指令,所述一条或多条指令适于由所述处理器加载并执行如下步骤:
响应于针对目标应用的代码检测操作,从目标应用的程序代码中分割出目标代码块;
计算所述目标代码块与至少一个参考代码块之间的代码相似度,一个参考代码块对应一个软件开发工具包;
根据所述目标代码块和各参考代码块之间的代码相似度,从所述至少一个参考代码块中确定与所述目标代码块相匹配的匹配代码块;
根据所述匹配代码块为所述目标代码块添加目标标记信息,所述目标标记信息用于指示所述目标代码块属于所述匹配代码块对应的软件开发工具包。
再一方面,本申请实施例提供了一种计算机存储介质,所述计算机存储介质存储有一条或多条指令,所述一条或多条指令适于由所述处理器加载并执行如下步骤:
响应于针对目标应用的代码检测操作,从目标应用的程序代码中分割出目标代码块;
计算所述目标代码块与至少一个参考代码块之间的代码相似度,一个参考代码块对应一个软件开发工具包;
根据所述目标代码块和各参考代码块之间的代码相似度,从所述至少一个参考代码块中确定与所述目标代码块相匹配的匹配代码块;
根据所述匹配代码块为所述目标代码块添加目标标记信息,所述目标标记信息用于指示所述目标代码块属于所述匹配代码块对应的软件开发工具包。
在本发明实施例中,计算机设备响应于针对目标应用的代码检测操作,从目标应用的程序代码中分割出目标代码块,并计算目标代码块与至少一个参考代码块之间的代码相似度,然后根据目标代码块和各参考代码块之间的代码相似度,从至少一个参考代码块中确定与目标代码块相匹配的匹配代码块;根据所述匹配代码块为目标代码块添加目标标记信息。计算机设备无需通过获取SDK的源包(源代码包的简称)或jar包(一种Java压缩代码包的简称)以提取SDK本身的特征,只需要通过对目标应用的程序代码进行切割,并通过将切割得到的代码块和参考代码块进行相似度分析,便可快速检测出目标应用中所集成的SDK,可有效提高应用检测的效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种应用检测***的结构示意图;
图2a是本发明实施例提供的一种应用检测方案的流程示意图;
图2b是本发明实施例提供的一种计算机设备的结构示意图;
图3是本发明实施例提供的一种应用检测方法的流程示意图;
图4a是本发明实施例提供的一种程序代码的层级结构样式的示意图;
图4b是本发明实施例提供的一种代码的示意图;
图5是本发明实施例提供的另一种应用检测方法的流程示意图;
图6a是本发明实施例提供的一种计算操作指令的哈希值的示意图;
图6b是本发明实施例提供的一种计算目标哈希值与参考哈希值的示意图;
图7是本发明实施例提供的一种具体应用检测方法的流程示意图;
图8是本发明实施例提供的一种应用检测装置的结构示意图;
图9是本发明实施例提供的一种计算机设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了能够更好地检测应用中集成了哪些软件开发工具包,此处所提及的软件开发工具包可以是:第三方登录分享类的SDK、支付类的SDK、推送类的SDK、广告类的SDK和数据统计类的SDK等等。本申请实施例提出了一种应用检测方案;该应用检测方案的执行主体可以为计算机设备,此处所提及的计算机设备可以是终端设备(后续简称终端)或者服务器。当计算机设备为服务器时,本申请实施例还提出了一种图1所示的应用检测***;该应用检测***可至少包括至少一个终端101和服务器(即计算机设备)102。在该应用检测***中,终端101以及服务器102可以通过有线或无线通信方式进行直接或间接地连接,本申请实施例在此不做限制。需要说明的是,上述所提及的终端可以是智能手机、平板电脑、笔记本电脑、台式电脑等等;服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式***,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content Delivery Network,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器,等等。
在实际应用中,当开发人员或者其他用户欲对目标应用进行应用检测时,开发人员或者其他用户可以通过应用检测界面向计算机设备发送一个针对目标应用的代码检测操作。在一种实施方式中,该应用检测界面内可包括应用标识输入框;在此实施方式下,代码检测操作可以是在该应用检测框中输入目标应用的应用标识的操作。再一种实施方式中,应用检测界面中可至少包括目标应用的应用图标;在此实施方式下,代码检测操作可以是针对目标应用的应用图标的触发操作,如点击操作、按压操作等等。相应的,计算机设备可以响应针对目标应用的代码检测操作,采用本申请实施例所提出的应用检测方案检测目标应用中集成了哪些软件工具包。参见图2a所示,该应用检测方案的大致原理如下:计算机设备可先对目标应用的程序代码进行代码块切割,得到至少一个代码块。针对切割得到的任一代码块,可将该任一代码块和至少一个参考代码块进行相似度分析;然后,可根据分析结果以及各个参考代码块所对应的SDK,对该任一代码块进行SDK代码块标记,以标记出任一代码块所属的SDK。基于此标记原理,可实现对切割得到的各个代码块进行SDK代码块标记。由于各个代码块均是从目标应用的程序代码中切割出的,即各个目标代码块为目标应用的程序代码的一部分;因此通过对各个代码块进行SDK代码块标记,便可输出目标应用的SDK检测结果,该SDK检测结果用于指示目标应用中集成了哪些SDK。
在一种可行的实施例中,为了可以更好地实现上述的应用检测方案的相关步骤,本申请实施例可在计算机设备部署如下模块:检测控制模块、代码块切割模块、代码块标记模块,如图2b所示。在具体实现中,检测控制模块主要用于:调用代码块切割模块和代码块标记模块对目标应用中集成SDK的情况进行检测,并输出用于指示该目标应用集成了哪些SDK的SDK检测结果。具体的,检测控制模块可先调用代码块切割模块对目标应用的程序代码进行代码块切割以及获取切割得到的各个代码块的特征参数。针对切割得到的任一代码块,检测控制模块可调用代码块标记模块对该任一代码块的特征参数与至少一个参考代码块的特征参数进行相似度计算,并根据相似度计算结果以及各个参考代码块所对应的SDK对该任一代码块进行代码块标记。可选的,在对目标应用进行检测前,检测控制模块还可调用代码块标记模块对至少一个参考代码块进行聚类分析,并采用标记策略根据聚类分析结果对各个参考代码块进行SDK代码块标记,以确定各个参考代码块所对应的SDK。
由此可见,本申请实施例所提出的应用检测方案可具有如下有益效果:通过上述应用检测的实现流程,计算机设备无需通过获取SDK的源包(源代码包的简称)或jar包(一种Java压缩代码包的简称)以提取SDK本身的特征,只需要通过对目标应用的程序代码进行切割,并通过将切割得到的代码块和参考代码块进行相似度分析,便可快速检测出目标应用中所集成的SDK,可有效提高应用检测的效率。
请参阅图3,图3为本发明实施例提供的一种应用检测方法的流程示意图。该应用检测方法可由上述计算机设备执行,其可包括以下步骤S301-S304:
S301,响应于针对目标应用的代码检测操作,从目标应用的程序代码中分割出目标代码块。
其中,目标应用可以是社交应用、多媒体播放应用、浏览器应用等等。在具体实现中,当用户想要检测目标应用中集成了哪些软件开发工具包SDK时,可以输入针对目标应用的代码检测操作。相应的,计算机设备响应于针对目标应用的代码检测操作,可从目标应用的程序代码中分割成出目标代码块。
具体的,计算机设备先获取目标应用的代码文件,并对该代码文件进行反编译,得到程序代码的层级结构;其中,代码文件可以包括但不限于:安卓应用程序包(Androidapplication package,APK)、IOS应用程序包、WP应用程序包、Windows应用程序包,等等;为便于阐述,后续均以代码文件为APK为例进行说明。层级结构可包括至少一个层级,每个层级中可包括至少一个代码包标识;并且,针对除顶层以外的任一层层级中的每个代码包标识,均可在位于该任一层层级的上一层层级中找到对应的父代码包标识。该层级结构的结构样式可以是树型结构样式或者图4a所示的结构样式。在得到层级结构后,可根据层级结构对目标应用的程序代码进行代码切割,得到至少一个代码块;然后,可从至少一个代码块中获取目标代码块。
其中,在根据层级结构对目标应用的程序代码进行代码切割,得到至少一个代码块的过程中,为了尽量使同一个SDK的代码被切割到同一个代码块,计算机设备可采用根据实践结果所提出的切割策略,对目标应用的程序代码进行代码切割。其中,切割策略用于指示按照从下往上的顺序在层级结构中查找满足切割名单的代码包标识,并基于查找到的代码包标识往下切割一层的方式进行代码切割。相应的,根据层级结构对目标应用的程序代码进行代码切割,得到至少一个代码块的具体实施方式可以是:
获取预设的切割名单,该切割名单中包括需要切割的代码包标识。在得到程序代码的层级结构后,可以从层级结构中确定待遍历的起始层级,并遍历起始层级中的各个代码包标识;若当前遍历的目标代码包标识在预先设置的切割名单中,则将位于该起始层级的下一层的层级中的各个代码包标识所对应的代码切割至不同的代码块中。若当前遍历的目标代码包标识不在切割名单中,则判断目标代码包标识在第一层级中所对应的第一父代码包标识是否位于切割名单中,第一层级是指位于起始层级的上一层的层级。若第一父代码包标识位于切割名单中,则将目标代码包标识所对应的代码切割至一个代码块中;若第一父代码包标识不位于切割名单中,则判断第一父代码包标识在第二层级中所对应的第二父代码包标识是否位于切割名单中,第二层级是指位于第一层级的上一层的层级。若第二父代码包标识位于切割名单中,则分别将第一层级中的各个代码包标识所对应的代码切割至不同的代码块中;若第二父代码包标识不位于切割名单中,则判断第二父代码包标识在第三层级中所对应的第三父代码包标识是否位于切割名单中,第三层级是指位于第二层级的上一层的层级,以此类推。
在具体实现中,图4a实例性地给出对目标应用的代码文件经过反编译后得到的一个包含3个层级的层级结构,并且每个层级中包括至少一个代码包标识,各代码包标识可参见图4a中所示的英文标识。在根据层级结构对目标应用的程序代码进行代码切割时,计算机设备可以从3层层级结构中确定待遍历的起始层级为第3层级,并遍历第3层级中各代码包标识;若当前遍历的目标代码包标识为soloade且目标代码包标识soloade不在切割名单中,则判断目标代码包标识soloader在第2层级(即位于起始层级的上一层的第一层级)中所对应的第一父代码包标识faebook是否位于切割名单中,若第一父代码包标识faebook位于切割名单中,则将目标代码包标识soloader所对应的代码切割至一个代码块中;若第一父代码包标识faebook不位于切割名单中,则判断第一父代码包标识faebook在第1层级(即位于第一层级的上一层的第二层级)中所对应的第二父代码包标识com是否位于切割名单中;若第二父代码包标识com位于切割名单中,则分别将第二层级中的各个代码包标识所对应的代码切割至不同的代码块中,即将代码包标识faebook所对应的代码切割至一个代码块,将代码包标识donking所对应的代码切割至一个代码块,将代码包标识aplipay所对应的代码切割至一个代码块,等等。
S302,计算目标代码块与至少一个参考代码块之间的代码相似度。
在具体实现中,计算机设备可以先获取至少一个参考代码块,一个参考代码块对应一个软件开发工具包;具体的,计算机设备可以从计算机设备的本地存储空间中或者软件开发工具包特征库中,获取至少一个参考代码块。然后,计算目标代码块与至少一个参考代码块之间的代码相似度。在一种实施方式中,计算机设备可以将目标代码块的程序代码和各参考代码块进行比对,确定出目标代码块和各参考代码块的重复情况,根据该重复情况计算目标代码块与至少一个参考代码块之间的代码相似度。
再一种实施方式中,由于在目前开发生态中,出于对代码保护的考虑,第三方软件开发工具包提供商通常会要求应用开发者在集成SDK的时候,对SDK的代码进行混淆,导致同一SDK在不同APP中的代码内容存在不同。其中,代码混淆可以用于程序源代码,也可以用于程序编译而成的中间代码;其是指将程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。那么为了克服代码混淆对代码块相似度计算的影响,计算机设备在计算目标代码块与至少一个参考代码块之间的代码相似度的时候,可以获取目标代码块的特征参数和各参考代码块的特征参数来进行相似度计算,得到目标代码块与至少一个参考代码块之间的代码相似度。
其中,特征参数是指不会因为代码混淆而产生变化的参数。经研究表明,在代码混淆技术中,为了降低程序代码的可读性,会将程序代码中的有意义的类名、函数名和变量名等参数替换成难以阅读和无意义的名称,但是为了保证代码功能的一致性,代码混淆一般不会处理程序代码中操作码或者操作指令的部分。如图4b所示的代码,该代码中包括v3、v6等变量名;代码混淆时通常会将这些变量名替换成其他名称。因此,计算机设备可提取目标代码块中的操作指令作为目标代码块的特征参数,以有效对坑大多数的代码混淆方案。并且,由于代码混淆通常不会影响代码块的层级结构,因此计算机设备还可获取目标代码块的层级结构作为目标代码块的特征参数。
S303,根据目标代码块和各参考代码块之间的代码相似度,从至少一个参考代码块中确定与目标代码块相匹配的匹配代码块。
在一种具体实现中,计算机设备根据目标代码块和各参考代码块之间的代码相似度,从至少一个参考代码块中选取与目标代码块的代码相似度最大的参考代码块作为与目标代码块相匹配的匹配代码块。即在此具体实现中,匹配代码块是指与目标代码块之间的代码相似度最大的参考代码块。
再一种具体实现中,计算机设备可以判断目标代码块和各参考代码块之间的代码相似度是否大于阈值;其中,该阈值可以根据经验和需求设置。若存在大于阈值的代码相似度,则认为存在的代码相似度对应的目标代码块和参考代码块相似,那么便可将大于阈值的代码相似度对应的参考代码块确定为与目标代码块相匹配的匹配代码块。即在此具体实现中,匹配代码块是指与目标代码块之间的代码相似度大于阈值的参考代码块。
再一种具体实现中,计算机设备可以判断目标代码块和各参考代码块之间的代码相似度是否大于阈值;若存在大于阈值的代码相似度,则从存在的代码相似度中确定最大代码相似度,并将最大代码相似度对应的参考代码块确定为与目标代码块相匹配的匹配代码块。即在此具体实现中,匹配代码块是指与目标代码块之间的代码相似度大于阈值,且代码相似度最大的参考代码块。
S304,根据匹配代码块为目标代码块添加目标标记信息。
经研究表明,相似的两个代码块所对应的软件开发工具包通常是相同的;因此在确定出与目标代码块相匹配的匹配代码块(即与目标代码块相似的代码块)后,可直接将匹配代码块所对应的软件开发工具包确定为目标代码块所属的软件开发工具包,从而为目标代码块添加目标标记信息,该目标标记信息用于指示目标代码块属于匹配代码块对应的软件开发工具包。其中,目标标记信息可以包括匹配代码块对应的软件开发工具包的类型标识;通过为目标代码块添加目标标记信息,可以便于后续在对目标应用进行安全性检测时,能够直接根据目标标记信息确定目标应用中集成了匹配代码块对应的软件开发工具包,并采用该软件开发工具包所对应的安全检测策略针对性地对目标应用进行检测,从而提升检测效率和准确性。
在本发明实施例中,计算机设备可以响应于针对目标应用的代码检测操作,从目标应用的程序代码中分割出目标代码块,并计算目标代码块与至少一个参考代码块之间的代码相似度,进一步,根据目标代码块和各参考代码块之间的代码相似度,从至少一个参考代码块中确定与目标代码块相匹配的匹配代码块,并根据匹配代码块为目标代码块添加目标标记信息,由于该目标代码块是在应用的程序代码中切割出来,因此,通过确定目标代码块属于的SDK,则可以识别出应用集成了SDK,无需提取SDK本身的特征,从而快速检测出应用中包括的SDK类型,有效提高应用检测的效率。
请参阅图5,图5为本发明实施例提供的另一种应用检测方法的流程示意图,该应用检测方法可由上述计算机设备执行。在本发明实施例中,主要以从软件开发工具包特征库中获取参考代码块为例进行说明;那么在执行本发明实施例所提出的应用检测方法之前,计算机设备可预先构建软件开发工具包特征库。具体的构建过程如下:
可先获取至少两个参考应用的程序代码,并将至少两个参考应用的程序代码分割成多个参考代码块。其次,计算机设备可将多个参考代码块进行聚类分析,并根据分析结果对多个参考代码块进行分组处理;一个组别中的参考代码块属于同一个软件开发工具包。具体的,计算机设备可计算任意两个参考代码块之间的相似度,并将相似度大于阈值的任意两个参考代码块确定属于同一类,从而将这两个参考代码块进行聚类。或者,计算机设备也可调用聚类模型对多个参考代码块进行聚类处理,以对多个参考代码块进行分组处理;其中,聚类模型是预先采用大量的样本数据对神经网络模型进行模型训练得到的。在分组处理之后,计算机设备可根据每个参考代码块的组别信息,获取每个参考代码块的标记信息,任一参考代码块的标记信息是在对任一参考代码块所属组别中的各个参考代码块进行特征联合分析,以确定出任一参考代码块所属的软件开发工具包后生成的。然后,可将每个参考代码块和对应的标记信息添加至软件开发工具包特征库。
其中,根据每个参考代码块的组别信息,获取每个参考代码块的标记信息的一种具体实施方式可以是:可将每个参考代码块的组别信息推送给管理人员,使得管理人员根据组别信息对任一参考代码块所属组别中的各个参考代码块进行特征联合分析,以确定出任一参考代码块所属的软件开发工具包;然后在计算机设备中输入每个组别中的各参考代码块添加的相应的标记信息。相应的,计算机设备可获取管理人员输入的各个参考代码块的标记信息。即在此实施方式下,是由管理人员人为地进行特征联合分析,从而确定出参考代码块的标记信息的。或者,根据每个参考代码块的组别信息,获取每个参考代码块的标记信息的另一种具体实施方式可以是:直接对任一参考代码块所属组别中的各个参考代码块进行特征联合分析,确定出任一参考代码块所属的软件开发工具包,然后根据每个参考代码块的组别信息,获取每个参考代码块的标记信息。即在此实施方式下,是由计算机设备自动化地进行特征联合分析,从而确定出参考代码块的标记信息的。
在基于上述步骤构建得到软件开发工具包特征库后,计算机设备在检测到针对目标应用的代码检测操作后,便可通过图5所示的应用检测方法进行检测处理,具体可参见下述步骤S501-S507的相关描述:
S501,响应于针对目标应用的代码检测操作,获取目标应用的代码文件,代码文件包括目标应用的程序代码。
S502,对代码文件进行反编译,得到程序代码的层级结构。
S503,根据层级结构对目标应用的程序代码进行代码切割,得到至少一个代码块。
S504,从至少一个代码块中选取目标代码块。
其中,步骤S501-S504的实现方式可参见实施例图3中步骤S301中的具体实现方式,在此不再赘述。
S505,计算目标代码块与至少一个参考代码块之间的代码相似度,一个参考代码块对应一个软件开发工具包。
在具体实现中,由于目标代码块与各参考代码块之间的代码相似度计算一样。因此,接下来本申请实施例以如何计算目标代码块与任一参考代码块之间的代码相似度为例进行说明。具体的,步骤S505可包括以下步骤s11-s12:
s11,获取目标代码块的特征参数和任一参考代码块的特征参数。
由前述可知,该特征参数可以是操作指令或者层级结构。其中,当特征参数为操作指令,该操作指令包括多个目标指令片段时,计算机设备获取目标代码块的特征参数的具体实施方式可以是:可以从目标代码块中获取至少一个类,每个类包括至少一个方法和至少一个变量,并对每个类中的每个方法进行指令提取处理,得到多个候选指令片段,从多个候选指令片段中选取多个目标指令片段。
具体的,计算机设备可将多个候选指令片段中每个候选指令片段直接作为目标指令片段,从而得到多个目标指令片段。或者,计算机设备可先确定各候选指令片段的指令长度,并判断各候选指令片段的指令长度是否大于长度阈值,并从多个候选指令片段中选取指令长度大于长度阈值的候选指令片段作为目标指令片段。通过此方式,可有效过滤掉指令长度较短的候选指令片段,以提升后续的相似度计算效率。
需要说明的是,获取任一参考代码块的操作指令的实现方式可参见获取目标代码块的操作指令的实现方式,在此不再赘述。
s12,对目标代码块的特征参数和任一参考代码块的特征参数进行特征相似度计算,得到目标代码块与任一个参考代码块之间的代码相似度。随着特征参数的不同,步骤s12可具有不同的实施方式,具体参见下述描述:
(一)特征参数为操作指令,步骤s12的具体实施方式如下:
首先,可采用目标哈希算法对目标代码块的操作指令进行哈希运算,得到目标哈希值。其中,该目标哈希算法可以是用于大规模的文本相似度计算的局部敏感哈希算法;该局部敏感哈希算法可以将高维的特征向量映射成低维的特征向量,使得通过两个向量之间的距离来确定代码块是否高度相似。目标代码块的操作指令包括多个目标指令片段,具体可参见图6a所示:计算机设备可以先分别对多个目标指令片段中的各个目标指令片段进行哈希运算,得到哈希值集合,该哈希值集合中包括各个指令片段的哈希值。其次,可根据各个哈希值在哈希值集合中出现的次数,确定各个哈希值的权重值。然后,可采用各个哈希值的权重值对各个哈希值进行加权求和,得到目标哈希值。
其中,根据各个哈希值在哈希值集合中出现的次数,确定各个哈希值的权重值的一种实现方式是:将各个哈希值在哈希值集合中出现的次数,直接作为各个哈希值的权重值。例如,在一个哈希值集合中,哈希值“100101”在哈希值集合中出现2次,则该哈希值“100101”的权重值为2;哈希值“101011”在哈希值集合中出现3次,则该哈希值“101011”的权重值为3。或者,根据各个哈希值在哈希值集合中出现的次数,确定各个哈希值的权重值的另一种实现方式是:计算机设备可根据各个哈希值在哈希值集合中出现的次数,确定各个哈希值在哈希值集合中的重复度,并将各个哈希值对应的重复度所对应的权重值,作为各个哈希值的权重值。在具体实现中,预先设置各哈希值对应的重复度与权重值的关系。设重复度为0,对应的权重值为1,重复度为20%对应的权重值为2,等等。若哈希值集合中有5个哈希值,哈希值“100101”在哈希值集合中出现1次,可以确定哈希值“100101”的重复度为20%,则可以根据重复度20%确定该重复度对应的权重值为2。
其中,每个哈希值包括以下至少一项:至少一个第一数值(例如数值“0”)和至少一个第二数值(例如数值“1”);相应的,采用各个哈希值的权重值对各个哈希值进行加权求和,得到目标哈希值的具体实施方式可以是:针对任一哈希值,按照预设乘法原则采用任一哈希值的权重值分别与任一哈希值的每一位进行乘法加权,得到任一哈希值的加权结果。其中,预设乘法原则用于指示:若任一哈希值的当前位为第一数值,则采用权重值对该当前位进行正相乘;若任一哈希值的当前位为第二数值,则采用权重值对该当前位进行负相乘。例如,任一哈希值为“100101”,且该任一哈希值的权重值为2;该哈希值的第一位的数值为1,对应上述第二数值,计算机设备将权重值2与数值1进行正相乘,得到数值2;该哈希值的第二位的数值为0,对应上述第一数值,计算机设备将权重值2与数值0进行负相乘,得到数值-2,以此类推,对任一哈希值“100101”的每一位都进行加权,可以得到最终的加权结果,其加权结果为“2-2-2 2-2 2”。
基于此加权原理,可得到每个哈希值的加权结果。对所有哈希值的加权结果进行求和,得到候选哈希值;并根据候选哈希值确定目标哈希值。在一种实施方式中,可直接将候选哈希值作为目标哈希值;再一种实施方式中,为便于后续计算,还可对候选哈希值进行降维处理,得到目标哈希值。所谓的降维处理是指:针对候选哈希值中的任一位,若任一位大于零,则将任一位更新为第二数值,若任一位小于或等于0,则将任一位更新为第一数值。
例如,设有两个哈希值,哈希值A为“100101”,哈希值B为“101011”;哈希值A的权重值为2,哈希值B的权重值为3,根据上述加权原理可以得到哈希值A的加权的结果为“2-2-22-2 2”,哈希值B的加权结果为“3-3 3-3 3 3”。并将两个哈希值的加权结果进行求和,即两个哈希值的加权结果中的对应位进行相加,“(2+3)((-2)+(-3))((-2)+3)(2+(-3))((-2)+3)(2+3)”,得到候选哈希值为“5-5 1-1 1 5”。然后,对候选哈希值“5-5 1-1 1 5”进行降维处理;由于候选哈希值的第一位的数值为5,该第一位的数值大于0,那么可将第一位的数值更新为1。由于候选哈希值的第二位的数值为-5,该第二位的数值小于0,那么可将第二位的数值更新为0,以此类推,可以得到目标哈希值为“1 0 1 0 1 1”。
其次,采用目标哈希算法对任一参考代码块的操作指令进行哈希运算,得到参考哈希值。需要说明的是,计算机设备采用目标哈希算法对任一参考代码块的操作指令进行哈希运算,得到参考哈希值的实现方式可参见采用目标哈希算法对目标代码块的操作指令进行哈希运算,得到目标哈希值的实现方式,在此不再赘述。
然后,可对目标哈希值与参考哈希值进行距离运算,得到目标代码块与任一个参考代码块之间的代码相似度。其中,对目标哈希值与参考哈希值进行距离运算时可以是利用海明距离公式、汉明距离公式、欧式距离公式等距离计算公式对目标哈希值与参考哈希值进行距离运算。以采用海明距离公式为例,参见图6b所示,对目标哈希值与参考哈希值进行距离运算,得到目标代码块与任一个参考代码块之间的代码相似度的具体实施方式可以是:利用海明距离公式对目标哈希值与参考哈希值进行距离运算,得到目标代码块和任一参考代码块之间的海明距离,通过得到的海明距离可以确定目标代码块与任一个参考代码块之间的代码相似度,以使得后续根据相似度判断目标代码块和任一参考代码块是否相似。在具体实现中,计算机设备可将目标哈希值和参考哈希值进行异或计算,在异或计算时,只有在两个比较的位不同时结果为1,相同时结果为0,目标哈希值与参考哈希值异或计算得到1的个数即为海明距离,海明距离即为目标代码块与任一个参考代码块之间的代码相似度。例如,目标哈希值“101001”,参考哈希值“110101”,则利用海明距离算法对目标哈希值“101001”和参考哈希值“110101”进行异或计算,可以得到“1”的数量为3,则得到目标代码块与任一个参考代码块之间的代码相似度为3。
(二)特征参数为层级结构,步骤s12的具体实施方式如下:
计算机设备可从多个维度对目标代码块的层级结构和任一参考代码块的层级结构进行对比,根据对比结果确定目标代码块和任一参考代码块之间的代码相似度,这样可以确保后续根据代码相似度可以从至少一个参考代码块中确定出与目标代码块最为匹配的参考代码块。其中,多个维度可以是层级结构对应的层级数量、层级结构中包括的代码包标识等维度。
S506,根据目标代码块和各参考代码块之间的代码相似度,从至少一个参考代码块中确定与目标代码块相匹配的匹配代码块。
S507,根据匹配代码块为目标代码块添加目标标记信息,目标标记信息用于指示目标代码块属于匹配代码块对应的软件开发工具包。
其中,步骤S506-S507的具体实现方式可参见上述步骤S302-S303,在此不再赘述。进一步地,由于匹配代码块是从软件开发工具包特征库中获取的,而该匹配代码块又是从某个参考应用对应的程序代码中切割出来的,且该目标代码块是从目标应用的程序代码中切割出来的,且目标代码块和参考代码块相似,因此通过本申请实施例还可以确定出不同应用程序使用了相同的代码块。
在本发明实施例中,计算机设备可以响应于针对目标应用的代码检测操作,从目标应用的程序代码中分割出目标代码块,并针对任一参考代码块,获取目标代码块的特征参数和任一参考代码块的特征参数,进一步地对目标代码块的特征参数和任一参考代码块的特征参数进行相似度计算,得到目标代码块与任一个参考代码块之间的代码相似度,并根据目标代码块和各参考代码块之间的代码相似度,从至少一个参考代码块中确定与目标代码块相匹配的匹配代码块,并根据匹配代码块为目标代码块添加目标标记信息。通过确定目标代码块属于的SDK,则可以识别出应用集成了SDK,无需提取SDK本身的特征,从而快速检测出应用中包括的SDK类型,有效提高应用检测的效率。
基于上述提供的应用检测方法,本申请实施例还提供一种如图7所示的更为具体的应用检测方法。在本发明实施例中,主要以目标应用的代码文件为APK为例进行说明。具体流程如下:
可先获取目标应用的APK(即安卓应用程序包);并对该APK进行dex反编译后,得到目标应用的程序代码的层级结构,并根据该程序代码的层级结构对程序代码进行代码切割,从而得到图7中的n个代码块(即代码块1、代码块2……代码块n)。进一步地,计算机设备对这n个代码块中每个代码块的操作指令进行哈希计算,在对每个代码块的操作指令进行哈希计算时,需要经过以下4个步骤:(1)提取代码块中的多个指令片段;(2)对多个指令片段中的每个指令片段进行哈希计算;(3)在对每个指令片段进行哈希计算之后,将多个指令片段的哈希值进行加权合并,(4)将多个指令片段的哈希值进行加权合并后,将合并后的结果进行降维操作,从而得到代码块的操作指令的哈希值。
按照上述方式可以得到N个代码块对应的哈希值。在得到N个代码块的哈希值后,计算机设备可以将每个代码块的哈希值可以与软件开发工具包特征库中的至少一个参考代码块的哈希值进行相似度计算,并根据相似度计算的结果,输出对代码块的识别结果。通过计算代码块的操作指令的哈希值和参考代码块的操作指令的哈希值的方式来比较代码块的相似性,从而可以比较精确地识别应用中集成的SDK。其中,计算机设备可以将每个代码块的哈希值可以与软件开发工具包特征库中的至少一个参考代码块的哈希值进行相似度计算之前,可以通过聚类分析生成该软件开发工具包特征库。
在本发明实施例中,计算机设备可以响应于针对目标应用的代码检测操作,从目标应用的程序代码中分割出目标代码块,并针对任一参考代码块,获取目标代码块的特征参数和任一参考代码块的特征参数,进一步地对目标代码块的特征参数和任一参考代码块的特征参数进行相似度计算,得到目标代码块与任一个参考代码块之间的代码相似度,并根据目标代码块和各参考代码块之间的代码相似度,从至少一个参考代码块中确定与目标代码块相匹配的匹配代码块,并根据匹配代码块为目标代码块添加目标标记信息。通过确定目标代码块属于的SDK,则可以识别出应用集成了SDK,无需提取SDK本身的特征,从而快速检测出应用中包括的SDK类型,有效提高应用检测的效率。
基于上述应用检测方法实施例的描述,本申请实施例还公开了一种应用检测装置,该应用检测装置可以是运行于上述所提及的计算机设备中的一个计算机程序(包括程序代码)。该应用检测装置可以执行图3或图5所示的方法。请参见图8,所述应用检测装置可以运行如下单元:
分割单元801,用于响应于针对目标应用的代码检测操作,从目标应用的程序代码中分割出目标代码块;
计算单元802,用于计算所述目标代码块与至少一个参考代码块之间的代码相似度,一个参考代码块对应一个软件开发工具包;
确定单元803,用于根据所述目标代码块和各参考代码块之间的代码相似度,从所述至少一个参考代码块中确定与所述目标代码块相匹配的匹配代码块;
添加单元804,用于根据所述匹配代码块为所述目标代码块添加目标标记信息,所述目标标记信息用于指示所述目标代码块属于所述匹配代码块对应的软件开发工具包。
再一种实现方式中,所述装置还包括:获取单元805,其中:
所述获取单元805,用于针对任一参考代码块,获取所述目标代码块的特征参数和所述任一参考代码块的特征参数;
所述计算单元802,用于对所述目标代码块的特征参数和所述任一参考代码块的特征参数进行相似度计算,得到所述目标代码块与所述任一个参考代码块之间的代码相似度。
再一种实现方式中,所述特征参数为操作指令,所述操作指令包括多个目标指令片段;所述获取单元805,具体用于:
从所述目标代码块中获取至少一个类,每个类包括至少一个方法和至少一个变量;
对所述每个类中的每个方法进行指令提取处理,得到多个候选指令片段;
从所述多个候选指令片段中选取多个目标指令片段。
再一种实现方式中,所述确定单元803,用于:确定各候选指令片段的指令长度;
所述获取单元,用于从所述多个候选指令片段中选取指令长度大于长度阈值的候选指令片段作为目标指令片段。
再一种实现方式中,所述特征参数为操作指令,所述计算单元802,具体用于:
采用目标哈希算法对所述目标代码块的操作指令进行哈希运算,得到目标哈希值;以及采用所述目标哈希算法对所述任一参考代码块的操作指令进行哈希运算,得到参考哈希值;
对所述目标哈希值与所述参考哈希值进行距离运算,得到所述目标代码块与所述任一个参考代码块之间的代码相似度。
再一种实现方式中,所述目标代码块的操作指令包括多个目标指令片段,所述目标哈希算法为局部敏感哈希算法;所述计算单元802,具体用于:
分别对所述多个目标指令片段中的各个目标指令片段进行哈希运算,得到哈希值集合,所述哈希值集合中包括所述各个目标指令片段的哈希值;
根据各个哈希值在所述哈希值集合中出现的次数,确定所述各个哈希值的权重值;
采用所述各个哈希值的权重值对所述各个哈希值进行加权求和,得到目标哈希值。
再一种实现方式中,所述确定单元803,具体用于:
将各个哈希值在所述哈希值集合中出现的次数,作为所述各个哈希值的权重值;或者,
根据各个哈希值在所述哈希值集合中出现的次数,确定所述各个哈希值在所述哈希值集合中的重复度;并将所述各个哈希值对应的重复度所对应的权重值,作为所述各个哈希值的权重值。
再一种实现方式中,所述分割单元801,具体用于:
响应于针对目标应用的代码检测操作,获取所述目标应用的代码文件,所述代码文件包括所述目标应用的程序代码;
所述对所述代码文件进行反编译,得到所述程序代码的层级结构;
根据所述层级结构对所述目标应用的程序代码进行代码切割,得到至少一个代码块;
从所述至少一个代码块中选取目标代码块。
再一种实现方式中,所述至少一个参考代码块是存储在软件开发工具包特征库中的;所述装置还包括分析单元806,其中:
所述获取单元805,还用于:获取至少两个参考应用的程序代码,并将所述至少两个参考应用的程序代码分割成多个参考代码块;
所述分析单元806,用于将所述多个参考代码块进行聚类分析,并根据分析结果对所述多个参考代码块进行分组处理;一个组别中的参考代码块属于同一个软件开发工具包;
所述获取单元805,还用于根据每个参考代码块的组别信息,获取所述每个参考代码块的标记信息;任一参考代码块的标记信息是在对所述任一参考代码块所属组别中的各个参考代码块进行特征联合分析,以确定出所述任一参考代码块所属的软件开发工具包后生成的;
所述添加单元804,还用于将所述每个参考代码块和对应的标记信息添加至软件开发工具包特征库。
根据本申请的一个实施例,图3或图5所示的方法所涉及的各个步骤均可以是由图8所示的应用检测装置中的各个单元执行的。例如,图3所示的步骤S301由图8中所示的分割单元801来执行,步骤S302由图8中所示的计算单元802来执行,步骤S303由图8中所示的确定单元803来执行,步骤S304由图8中所示的添加单元804来执行。又如,图5所示的步骤501至步骤S504由图8中所示的分割单元801来执行,步骤S505由图8中所示的计算单元802来执行,步骤S506由图8中所示的确定单元803来执行,步骤S507由图8中所示的添加单元804来执行。
根据本申请的另一个实施例,图8所示的应用检测装置中的各个单元可以分别或者全部合并为一个或若干个另外的单元来构成,或者其中的某个(些)单元还可以再拆分为功能上更小的多个单元来构成,这可以实现同样的操作,而不影响本申请实施例的技术效果的实现。上述单元是基于逻辑功能划分的,在实际应用中,一个单元的功能也可以是由多个单元来实现,或者多个单元的功能由一个单元实现。在本申请的其他实施例中,基于应用检测装置也可以包括其他单元,在实际应用中,这些功能也可以由其他单元协助实现,并且可以由多个单元协作实现。
根据本申请的另一个实施例,可以通过包括中央处理单元(Central ProcessingUnit,CPU),随机存取存储介质(RAM)、只读存储介质(ROM)等处理元件和存储元件。例如计算机的通用计算设备上运行能够执行如图3或图5中所示的相应方法所涉及的各步骤的计算机程序(包括程序代码),来构造如图8所示的应用检测装置,以及来实现本申请实施例的应用检测方法。所述的计算机程序可以记载于例如计算机可读记录介质上,并通过计算机可读记录介质装载于上述计算机设备中,并在其中运行。
在本发明实施例中,计算机设备响应于针对目标应用的代码检测操作,从目标应用的程序代码中分割成出目标代码块,并计算目标代码块与至少一个参考代码块之间的代码相似度,然后根据目标代码块和各参考代码块之间的代码相似度,从至少一个参考代码块中确定与目标代码块相匹配的匹配代码块;根据所述匹配代码块为目标代码块添加目标标记信息。计算机设备无需通过获取SDK的源包或jar包以提取SDK本身的特征,只需要通过对目标应用的程序代码进行切割,并通过将切割得到的代码块和参考代码块进行相似度分析,便可快速检测出目标应用中所集成的SDK,可有效提高应用检测的效率。
基于上述应用检测方法实施例的描述,本申请实施例还公开了一种计算机设备,请参见图9,该计算机设备至少可包括处理器901、输入设备902、输出设备903以及计算机存储介质904。其中,计算机设备内的处理器901、输入设备902、输出设备903以及计算机存储介质904可通过总线或其他方式连接。
所述计算机存储介质904是计算机设备中的记忆设备,用于存放程序和数据。可以理解的是,此处的计算机存储介质904既可以包括计算机设备的内置存储介质,当然也可以包括计算机设备支持的扩展存储介质。计算机存储介质904提供存储空间,该存储空间存储了计算机设备的操作***。并且,在该存储空间中还存放了适于被处理器901加载并执行的一条或多条指令,这些指令可以是一个或一个以上的计算机程序(包括程序代码)。需要说明的是,此处的计算机存储介质可以是高速RAM存储器;可选的,还可以是至少一个远离前述处理器的计算机存储介质、所述处理器可以称为中央处理单元(Central ProcessingUnit,CPU),是计算机设备的核心以及控制中心,适于被实现一条或多条指令,具体加载并执行一条或多条指令从而实现相应的方法流程或功能。
在一种可行的实施例中,可由处理器901加载并执行计算机存储介质中存放的一条或多条第一指令,以实现上述有关应用检测方法实施例中的方法的相应步骤;具体实现中,计算机存储介质中的一条或多条第一指令由处理器901加载并执行如下操作:
响应于针对目标应用的代码检测操作,从目标应用的程序代码中分割出目标代码块;
计算所述目标代码块与至少一个参考代码块之间的代码相似度,一个参考代码块对应一个软件开发工具包;
根据所述目标代码块和各参考代码块之间的代码相似度,从所述至少一个参考代码块中确定与所述目标代码块相匹配的匹配代码块;
根据所述匹配代码块为所述目标代码块添加目标标记信息,所述目标标记信息用于指示所述目标代码块属于所述匹配代码块对应的软件开发工具包。
再一种实现方式中,所述处理器901,具体用于:
针对任一参考代码块,获取所述目标代码块的特征参数和所述任一参考代码块的特征参数;
对所述目标代码块的特征参数和所述任一参考代码块的特征参数进行相似度计算,得到所述目标代码块与所述任一个参考代码块之间的代码相似度。
再一种实现方式中,所述特征参数为操作指令,所述操作指令包括多个目标指令片段;所述处理器901,具体用于:
从所述目标代码块中获取至少一个类,每个类包括至少一个方法和至少一个变量;
对所述每个类中的每个方法进行指令提取处理,得到多个候选指令片段;
从所述多个候选指令片段中选取多个目标指令片段。
再一种实现方式中,所述处理器901,具体用于:
确定各候选指令片段的指令长度;
从所述多个候选指令片段中选取指令长度大于长度阈值的候选指令片段作为目标指令片段。
再一种实现方式中,所述特征参数为操作指令,所述处理器901,具体用于:
采用目标哈希算法对所述目标代码块的操作指令进行哈希运算,得到目标哈希值;以及采用所述目标哈希算法对所述任一参考代码块的操作指令进行哈希运算,得到参考哈希值;
对所述目标哈希值与所述参考哈希值进行距离运算,得到所述目标代码块与所述任一个参考代码块之间的代码相似度。
再一种实现方式中,所述目标代码块的操作指令包括多个目标指令片段,所述目标哈希算法为局部敏感哈希算法;所述处理器901,具体用于:
分别对所述多个目标指令片段中的各个目标指令片段进行哈希运算,得到哈希值集合,所述哈希值集合中包括所述各个目标指令片段的哈希值;
根据各个哈希值在所述哈希值集合中出现的次数,确定所述各个哈希值的权重值;
采用所述各个哈希值的权重值对所述各个哈希值进行加权求和,得到目标哈希值。
再一种实现方式中,所述处理器901,具体用于:
将各个哈希值在所述哈希值集合中出现的次数,作为所述各个哈希值的权重值;或者,
根据各个哈希值在所述哈希值集合中出现的次数,确定所述各个哈希值在所述哈希值集合中的重复度;并将所述各个哈希值对应的重复度所对应的权重值,作为所述各个哈希值的权重值。
再一种实现方式中,所述处理器901,具体用于:
响应于针对目标应用的代码检测操作,获取所述目标应用的代码文件,所述代码文件包括所述目标应用的程序代码;
对所述代码文件进行反编译,得到所述程序代码的层级结构;
根据所述层级结构对所述目标应用的程序代码进行代码切割,得到至少一个代码块;
从所述至少一个代码块中选取目标代码块。
再一种实现方式中,所述至少一个参考代码块是存储在软件开发工具包特征库中的;所述处理器901,还用于:
获取至少两个参考应用的程序代码,并将所述至少两个参考应用的程序代码分割成多个参考代码块;
将所述多个参考代码块进行聚类分析,并根据分析结果对所述多个参考代码块进行分组处理;一个组别中的参考代码块属于同一个软件开发工具包;
根据每个参考代码块的组别信息,获取所述每个参考代码块的标记信息;任一参考代码块的标记信息是在对所述任一参考代码块所属组别中的各个参考代码块进行特征联合分析,以确定出所述任一参考代码块所属的软件开发工具包后生成的;
将所述每个参考代码块和对应的标记信息添加至软件开发工具包特征库。
在本发明实施例中,计算机设备响应于针对目标应用的代码检测操作,从目标应用的程序代码中分割成出目标代码块,并计算目标代码块与至少一个参考代码块之间的代码相似度,然后根据目标代码块和各参考代码块之间的代码相似度,从至少一个参考代码块中确定与目标代码块相匹配的匹配代码块;根据所述匹配代码块为目标代码块添加目标标记信息。计算机设备无需通过获取SDK的源包或jar包以提取SDK本身的特征,只需要通过对目标应用的程序代码进行切割,并通过将切割得到的代码块和参考代码块进行相似度分析,便可快速检测出目标应用中所集成的SDK,可有效提高应用检测的效率。
需要说明的是,本申请实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述应用检测方法实施例图3或图5中所执行的步骤。
以上所揭露的仅为本发明一种较佳实施例而已,当然不能以此来限定本发明之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或部分流程,并依本发明权利要求所作的等同变化,仍属于发明所涵盖的范围。
Claims (10)
1.一种应用检测方法,其特征在于,包括:
响应于针对目标应用的代码检测操作,从目标应用的程序代码中分割出目标代码块;
计算所述目标代码块与至少一个参考代码块之间的代码相似度,一个参考代码块对应一个软件开发工具包;
根据所述目标代码块和各参考代码块之间的代码相似度,从所述至少一个参考代码块中确定与所述目标代码块相匹配的匹配代码块;
根据所述匹配代码块为所述目标代码块添加目标标记信息,所述目标标记信息用于指示所述目标代码块属于所述匹配代码块对应的软件开发工具包。
2.如权利要求1所述的方法,其特征在于,所述计算所述目标代码块与至少一个参考代码块之间的代码相似度,包括:
针对任一参考代码块,获取所述目标代码块的特征参数和所述任一参考代码块的特征参数;
对所述目标代码块的特征参数和所述任一参考代码块的特征参数进行相似度计算,得到所述目标代码块与所述任一个参考代码块之间的代码相似度。
3.如权利要求2所述的方法,其特征在于,所述特征参数为操作指令,所述操作指令包括多个目标指令片段;所述获取所述目标代码块的特征参数,包括:
从所述目标代码块中获取至少一个类,每个类包括至少一个方法和至少一个变量;
对所述每个类中的每个方法进行指令提取处理,得到多个候选指令片段;
从所述多个候选指令片段中选取多个目标指令片段。
4.如权利要求3所述的方法,其特征在于,所述从所述多个候选指令片段中选取多个目标指令片段,包括:
确定各候选指令片段的指令长度;
从所述多个候选指令片段中选取指令长度大于长度阈值的候选指令片段作为目标指令片段。
5.如权利要求2-4任一项所述的方法,其特征在于,所述特征参数为操作指令,所述对所述目标代码块的特征参数和所述任一参考代码块的特征参数进行特征相似度计算,得到所述目标代码块与所述任一个参考代码块之间的代码相似度,包括:
采用目标哈希算法对所述目标代码块的操作指令进行哈希运算,得到目标哈希值;以及采用所述目标哈希算法对所述任一参考代码块的操作指令进行哈希运算,得到参考哈希值;
对所述目标哈希值与所述参考哈希值进行距离运算,得到所述目标代码块与所述任一个参考代码块之间的代码相似度。
6.如权利要求5所述的方法,其特征在于,所述目标代码块的操作指令包括多个目标指令片段,所述目标哈希算法为局部敏感哈希算法;所述采用目标哈希算法对所述目标代码块的操作指令进行哈希运算,得到目标哈希值,包括:
分别对所述多个目标指令片段中的各个目标指令片段进行哈希运算,得到哈希值集合,所述哈希值集合中包括所述各个目标指令片段的哈希值;
根据各个哈希值在所述哈希值集合中出现的次数,确定所述各个哈希值的权重值;
采用所述各个哈希值的权重值对所述各个哈希值进行加权求和,得到目标哈希值。
7.如权利要求6所述的方法,其特征在于,所述根据各个哈希值在所述哈希值集合中出现的次数,确定所述各个哈希值的权重值,包括:
将各个哈希值在所述哈希值集合中出现的次数,作为所述各个哈希值的权重值;或者,
根据各个哈希值在所述哈希值集合中出现的次数,确定所述各个哈希值在所述哈希值集合中的重复度;并将所述各个哈希值对应的重复度所对应的权重值,作为所述各个哈希值的权重值。
8.如权利要求1所述的方法,其特征在于,所述响应于针对目标应用的代码检测操作,从目标应用的程序代码中分割出目标代码块,包括:
响应于针对目标应用的代码检测操作,获取所述目标应用的代码文件,所述代码文件包括所述目标应用的程序代码;
对所述代码文件进行反编译,得到所述程序代码的层级结构;
根据所述层级结构对所述目标应用的程序代码进行代码切割,得到至少一个代码块;
从所述至少一个代码块中选取目标代码块。
9.如权利要求1所述的方法,其特征在于,所述至少一个参考代码块是存储在软件开发工具包特征库中的;所述方法还包括:
获取至少两个参考应用的程序代码,并将所述至少两个参考应用的程序代码分割成多个参考代码块;
将所述多个参考代码块进行聚类分析,并根据分析结果对所述多个参考代码块进行分组处理;一个组别中的参考代码块属于同一个软件开发工具包;
根据每个参考代码块的组别信息,获取所述每个参考代码块的标记信息;任一参考代码块的标记信息是在对所述任一参考代码块所属组别中的各个参考代码块进行特征联合分析,以确定出所述任一参考代码块所属的软件开发工具包后生成的;
将所述每个参考代码块和对应的标记信息添加至软件开发工具包特征库。
10.一种应用检测装置,其特征在于,包括:
分割单元,用于响应于针对目标应用的代码检测操作,从目标应用的程序代码中分割出目标代码块;
计算单元,用于计算所述目标代码块与至少一个参考代码块之间的代码相似度,一个参考代码块对应一个软件开发工具包;
确定单元,用于根据所述目标代码块和各参考代码块之间的代码相似度,从所述至少一个参考代码块中确定与所述目标代码块相匹配的匹配代码块;
添加单元,用于根据所述匹配代码块为所述目标代码块添加目标标记信息,所述目标标记信息用于指示所述目标代码块属于所述匹配代码块对应的软件开发工具包。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011171532.3A CN112148305A (zh) | 2020-10-28 | 2020-10-28 | 一种应用检测方法、装置、计算机设备和可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011171532.3A CN112148305A (zh) | 2020-10-28 | 2020-10-28 | 一种应用检测方法、装置、计算机设备和可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112148305A true CN112148305A (zh) | 2020-12-29 |
Family
ID=73953484
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011171532.3A Pending CN112148305A (zh) | 2020-10-28 | 2020-10-28 | 一种应用检测方法、装置、计算机设备和可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112148305A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112685080A (zh) * | 2021-01-08 | 2021-04-20 | 深圳开源互联网安全技术有限公司 | 开源组件查重方法、***、装置及可读存储介质 |
CN112732581A (zh) * | 2021-01-12 | 2021-04-30 | 京东数字科技控股股份有限公司 | Sdk检测方法、装置、电子设备、***和存储介质 |
CN113805892A (zh) * | 2021-09-17 | 2021-12-17 | 杭州云深科技有限公司 | 一种异常apk的识别方法、电子设备及可读存储介质 |
CN114416600A (zh) * | 2022-03-29 | 2022-04-29 | 腾讯科技(深圳)有限公司 | 应用检测方法、装置、计算机设备及存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20160100887A (ko) * | 2016-08-12 | 2016-08-24 | 충남대학교산학협력단 | 코드 블록 비교를 통한 악성 코드 탐지 방법 |
US9471285B1 (en) * | 2015-07-09 | 2016-10-18 | Synopsys, Inc. | Identifying software components in a software codebase |
CN106803040A (zh) * | 2017-01-18 | 2017-06-06 | 腾讯科技(深圳)有限公司 | 病毒特征码处理方法及装置 |
US20170242671A1 (en) * | 2016-02-18 | 2017-08-24 | Qualcomm Innovation Center, Inc. | Semantically sensitive code region hash calculation for programming languages |
US10048945B1 (en) * | 2017-05-25 | 2018-08-14 | Devfactory Fz-Llc | Library suggestion engine |
CN109710299A (zh) * | 2018-12-14 | 2019-05-03 | 平安普惠企业管理有限公司 | 一种开源类库监控方法、装置、设备及计算机存储介质 |
CN110175045A (zh) * | 2019-05-20 | 2019-08-27 | 北京邮电大学 | 安卓应用程序重打包数据处理方法及装置 |
CN111190603A (zh) * | 2019-12-18 | 2020-05-22 | 腾讯科技(深圳)有限公司 | 一种隐私数据检测方法、装置和计算机可读存储介质 |
CN111338622A (zh) * | 2020-05-15 | 2020-06-26 | 支付宝(杭州)信息技术有限公司 | 供应链代码识别方法、装置、服务器及可读存储介质 |
-
2020
- 2020-10-28 CN CN202011171532.3A patent/CN112148305A/zh active Pending
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9471285B1 (en) * | 2015-07-09 | 2016-10-18 | Synopsys, Inc. | Identifying software components in a software codebase |
US20170242671A1 (en) * | 2016-02-18 | 2017-08-24 | Qualcomm Innovation Center, Inc. | Semantically sensitive code region hash calculation for programming languages |
KR20160100887A (ko) * | 2016-08-12 | 2016-08-24 | 충남대학교산학협력단 | 코드 블록 비교를 통한 악성 코드 탐지 방법 |
CN106803040A (zh) * | 2017-01-18 | 2017-06-06 | 腾讯科技(深圳)有限公司 | 病毒特征码处理方法及装置 |
US10048945B1 (en) * | 2017-05-25 | 2018-08-14 | Devfactory Fz-Llc | Library suggestion engine |
CN109710299A (zh) * | 2018-12-14 | 2019-05-03 | 平安普惠企业管理有限公司 | 一种开源类库监控方法、装置、设备及计算机存储介质 |
CN110175045A (zh) * | 2019-05-20 | 2019-08-27 | 北京邮电大学 | 安卓应用程序重打包数据处理方法及装置 |
CN111190603A (zh) * | 2019-12-18 | 2020-05-22 | 腾讯科技(深圳)有限公司 | 一种隐私数据检测方法、装置和计算机可读存储介质 |
CN111338622A (zh) * | 2020-05-15 | 2020-06-26 | 支付宝(杭州)信息技术有限公司 | 供应链代码识别方法、装置、服务器及可读存储介质 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112685080A (zh) * | 2021-01-08 | 2021-04-20 | 深圳开源互联网安全技术有限公司 | 开源组件查重方法、***、装置及可读存储介质 |
CN112685080B (zh) * | 2021-01-08 | 2023-08-11 | 深圳开源互联网安全技术有限公司 | 开源组件查重方法、***、装置及可读存储介质 |
CN112732581A (zh) * | 2021-01-12 | 2021-04-30 | 京东数字科技控股股份有限公司 | Sdk检测方法、装置、电子设备、***和存储介质 |
CN112732581B (zh) * | 2021-01-12 | 2023-03-10 | 京东科技控股股份有限公司 | Sdk检测方法、装置、电子设备、***和存储介质 |
CN113805892A (zh) * | 2021-09-17 | 2021-12-17 | 杭州云深科技有限公司 | 一种异常apk的识别方法、电子设备及可读存储介质 |
CN113805892B (zh) * | 2021-09-17 | 2024-04-05 | 杭州云深科技有限公司 | 一种异常apk的识别方法、电子设备及可读存储介质 |
CN114416600A (zh) * | 2022-03-29 | 2022-04-29 | 腾讯科技(深圳)有限公司 | 应用检测方法、装置、计算机设备及存储介质 |
CN114416600B (zh) * | 2022-03-29 | 2022-06-28 | 腾讯科技(深圳)有限公司 | 应用检测方法、装置、计算机设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109753800B (zh) | 融合频繁项集与随机森林算法的Android恶意应用检测方法及*** | |
US9665713B2 (en) | System and method for automated machine-learning, zero-day malware detection | |
CN112148305A (zh) | 一种应用检测方法、装置、计算机设备和可读存储介质 | |
CN110929203B (zh) | 异常用户的识别方法、装置、设备及存储介质 | |
RU2722692C1 (ru) | Способ и система выявления вредоносных файлов в неизолированной среде | |
CN111723371B (zh) | 构建恶意文件的检测模型以及检测恶意文件的方法 | |
CN115562992A (zh) | 一种文件检测方法、装置、电子设备及存储介质 | |
CN106301979B (zh) | 检测异常渠道的方法和*** | |
EP3293664A1 (en) | Software analysis system, software analysis method, and software analysis program | |
CN115632874A (zh) | 一种实体对象的威胁检测方法、装置、设备及存储介质 | |
Liu et al. | MOBIPCR: Efficient, accurate, and strict ML-based mobile malware detection | |
CN108804917B (zh) | 一种文件检测方法、装置、电子设备及存储介质 | |
CN114662108A (zh) | 软件检测方法和装置、电子设备 | |
CN108229168B (zh) | 一种嵌套类文件的启发式检测方法、***及存储介质 | |
CN113360895A (zh) | 站群检测方法、装置及电子设备 | |
US20210360001A1 (en) | Cluster-based near-duplicate document detection | |
CN109684844B (zh) | 一种webshell检测方法、装置以及计算设备、计算机可读存储介质 | |
WO2016127858A1 (zh) | 网页入侵脚本特征的识别方法及设备 | |
CN110598115A (zh) | 一种基于人工智能多引擎的敏感网页识别方法及*** | |
CN112347477A (zh) | 家族变种恶意文件挖掘方法和装置 | |
CN111191238A (zh) | 一种webshell检测方法、终端设备及存储介质 | |
CN107844702B (zh) | 基于云防护环境下网站木马后门检测方法及装置 | |
CN110717182A (zh) | 一种网页木马检测方法、装置、设备及可读存储介质 | |
CN114124913B (zh) | 一种网络资产变化监控的方法、装置及电子设备 | |
CN114491528A (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 |