一种Java代码检测方法及装置制造方法及图纸

技术编号:15690777 阅读:286 留言:0更新日期:2017-06-24 03:26
本申请提供一种Java代码检测方法及装置,所述方法包括:接收待检测的源代码;分析源代码的函数调用关系,得出所述源代码的所有子结构代码;获取所述源代码以及每一个子结构代码调用的jar包集合;判断所获取的各个jar包集合是否存在冲突jar包;在所述获取的各个jar包集合存在冲突jar包的情况下,输出所述源代码存在混淆后功能不一致的检测结果。应用本申请实施例,可以实现提前发现java代码存在混淆后代码功能不一致的情况。

Java code detecting method and device

This application provides a Java code detection method and device, the method comprises: receiving the detected source code; analysis of source code of function calls, all the sub structure of the code to get the source code; obtaining the source code as well as each sub structure code to call the jar package set; each jar judgment gets a collection of packets if there is a conflict jar package; each jar gets in the packet conflict set jar packet, output of the source code to detect the presence of inconsistent results function after confusion. Applying this application example, it is possible to realize the inconsistent function of the code in advance when the Java code is confused.

【技术实现步骤摘要】
一种Java代码检测方法及装置
本申请涉及软件开发
,尤其涉及一种Java代码检测方法及装置。
技术介绍
在软件开发过程中,对于编写好的Java代码通常可以使用代码混淆工具(如proguard工具)对代码进行混淆。混淆后的Java代码相对于混淆前的Java代码可以具有减少代码量、增加代码被破译的难度等优点。然而,使用代码混淆工具后,经常会发送混淆后的Java代码功能与混淆前的Java代码功能不一致,甚至混淆后代码功能不可用的情况。现有技术中,针对混淆后代码功能不一致的情况,通常会对混淆后的代码进行测试。测试过程中需要用到测试用例。由于导致混淆后代码功能不一致的原因多种多样,一般一个测试用例只能发现一种原因,所以需要编写尽可能多的测试用例。然而,编写测试用例需要很高的成本,基于成本考虑无法无限制地增加测试用例,因此基于测试用例的测试无法覆盖所有混淆后代码功能不一致的情况,导致存在不能及时发现混淆后java代码功能不一致的问题。
技术实现思路
本申请提供的一种Java代码检测方法及装置,以解决现有技术中存在不能及时发现混淆后Java代码功能不一致的问题。根据本申请实施例提供的一种Java代码检测方法,所述方法包括:接收待检测的源代码;分析源代码的函数调用关系,得出所述源代码的所有子结构代码;获取所述源代码以及每一个子结构代码调用的jar包集合;判断所获取的各个jar包集合是否存在冲突jar包;在所述获取的各个jar包集合存在冲突jar包的情况下,输出Java代码存在混淆后功能不一致的检测结果。可选的,所述获取所述源代码以及每一个子结构代码调用的jar包集合,具体包括:读取所述源代码的配置文件中记录的所述源代码调用的jar包;读取所述子结构代码的配置文件中记录的所述子结构代码调用的jar包;将所述源代码调用的jar包以及所述每一个子结构代码调用的jar包,存入对应的jar包集合。可选的,所述读取所述源代码的配置文件中记录的所述源代码调用的jar包,具体包括:读取所述源代码的配置文件中记录的所述源代码调用的jar包的名称以及版本号;所述读取所述子结构代码的配置文件中记录的所述子结构代码调用的jar包,具体包括:读取所述子结构代码的配置文件中记录的所述子结构代码调用的jar包的名称以及版本号。可选的,所述配置文件包括pom文件或者build.gradle文件。可选的,所述判断所获取的各个jar包集合是否存在冲突jar包,具体包括:获取所获取的各个jar包集合中jar包的名称以及版本号;判断是否存在相同名称、不同版本号的jar包;相应地,所述在所述获取的各个jar包集合存在冲突jar包的情况下,输出Java代码存在混淆后功能不一致的检测结果,具体包括:在存在相同名称、不同版本号的jar包的情况下,将其加入到冲突jar包集合;输出所述冲突jar包集合以及Java代码存在混淆后功能不一致的检测结果。根据本申请实施例提供的一种Java代码检测装置,所述装置包括:接收单元,接收待检测的源代码;分析单元,分析源代码的函数调用关系,得出所述源代码的所有子结构代码;获取单元,获取所述源代码以及每一个子结构代码调用的jar包集合;判断单元,判断所获取的各个jar包集合是否存在冲突jar包;输出单元,在所述获取的各个jar包集合存在冲突jar包的情况下,输出Java代码存在混淆后功能不一致的检测结果。可选的,所述获取单元,具体包括:第一读取子单元,读取所述源代码的配置文件中记录的所述源代码调用的jar包;第二读取子单元,读取所述子结构代码的配置文件中记录的所述子结构代码调用的jar包;存储子单元,将所述源代码调用的jar包以及所述每一个子结构代码调用的jar包,存入对应的jar包集合。可选的,所述第一读取子单元,具体包括:读取所述源代码的配置文件中记录的所述源代码调用的jar包的名称以及版本号;所述第二读取子单元,具体包括:读取所述子结构代码的配置文件中记录的所述子结构代码调用的jar包的名称以及版本号。可选的,所述配置文件包括pom文件或者build.gradle文件。可选的,所述判断单元,具体包括:获取子单元,获取所获取的各个jar包集合中jar包的名称以及版本号;判断子单元,判断是否存在相同名称、不同版本号的jar包;相应地,所述输出单元,具体包括:存储子单元,在存在相同名称、不同版本号的jar包的情况下,将其加入到冲突jar包集合;输出子单元,输出所述冲突jar包集合以及Java代码存在混淆后功能不一致的检测结果。本申请实施例中,java代码混淆后不一致的原因是由于调用相同jar包的版本号存在不一致;所以通过分析源代码的所有子结构代码,从而获取所述源代码和所有子结构代码调用的jar包集合;在所述获取的各个jar包集合存在冲突jar包的情况下,可以得出Java代码存在混淆后功能不一致的检测结果。如此,无需通过编写测试用例,仅通过扫描混淆前的源代码既可以提前发现使用混淆工具后出现的功能不一致的情况。附图说明图1是本申请提供的代码结构的示意图;图2是本申请一实施例提供的Java代码检测方法的流程图;图3是图2中步骤130的具体步骤的流程图;图4是本申请提供的Java代码检测装置所在设备的一种硬件结构图;图5是本申请一实施例提供的Java代码检测装置的模块示意图。具体实施方式这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。本申请实施例可以应用在对Java代码进行测试的测试客户端。所述测试客户端可以是软件上的测试程序。所述测试客户端也可以是指软硬结合的客户端,例如安装了测试程序的设备。如今随着应用功能的越来越多,越来越全,满足了用户需求的同时,对于编程人员来说,则意味着越来越多的代码,为了方便区分不同的代码所实现的功能,如今普遍采用的是分层架构也称为多层架构(例如三层架构)的方式来编写代码。分层架构可以将大量代码按照不同功能进行区分,不同层的代码各司其职,不会相互影响;便于后期进行维护、扩展功能。如此,对于一个完整的Java代码来说,其是由多个实现不同功能的子结构代码组成的。所述子结构代码一般会被封装为一个函数例如addA();不同子结构代码之间可以通过调用函数来传递本文档来自技高网...
一种Java代码检测方法及装置

【技术保护点】
一种Java代码检测方法,其特征在于,所述方法包括:接收待检测的源代码;分析源代码的函数调用关系,得出所述源代码的所有子结构代码;获取所述源代码以及每一个子结构代码调用的jar包集合;判断所获取的各个jar包集合是否存在冲突jar包;在所述获取的各个jar包集合存在冲突jar包的情况下,输出所述源代码存在混淆后功能不一致的检测结果。

【技术特征摘要】
1.一种Java代码检测方法,其特征在于,所述方法包括:接收待检测的源代码;分析源代码的函数调用关系,得出所述源代码的所有子结构代码;获取所述源代码以及每一个子结构代码调用的jar包集合;判断所获取的各个jar包集合是否存在冲突jar包;在所述获取的各个jar包集合存在冲突jar包的情况下,输出所述源代码存在混淆后功能不一致的检测结果。2.根据权利要求1所述的方法,其特征在于,所述获取所述源代码以及每一个子结构代码调用的jar包集合,具体包括:读取所述源代码的配置文件中记录的所述源代码调用的jar包;读取所述子结构代码的配置文件中记录的所述子结构代码调用的jar包;将所述源代码调用的jar包以及所述每一个子结构代码调用的jar包,存入对应的jar包集合。3.根据权利要求2所述的方法,其特征在于,所述读取所述源代码的配置文件中记录的所述源代码调用的jar包,具体包括:读取所述源代码的配置文件中记录的所述源代码调用的jar包的名称以及版本号;所述读取所述子结构代码的配置文件中记录的所述子结构代码调用的jar包,具体包括:读取所述子结构代码的配置文件中记录的所述子结构代码调用的jar包的名称以及版本号。4.根据权利要求2或3所述的方法,其特征在于,所述配置文件包括pom文件或者build.gradle文件。5.根据权利要求1所述的方法,其特征在于,所述判断所获取的各个jar包集合是否存在冲突jar包,具体包括:获取所获取的各个jar包集合中jar包的名称以及版本号;判断是否存在相同名称、不同版本号的jar包;相应地,所述在所述获取的各个jar包集合存在冲突jar包的情况下,输出Java代码存在混淆后功能不一致的检测结果,具体包括:在存在相同名称、不同版本号的jar包的情况下,将其加入到冲突jar包集合;输出所述冲...

【专利技术属性】
技术研发人员:杨磊磊
申请(专利权)人:阿里巴巴集团控股有限公司
类型:发明
国别省市:开曼群岛,KY

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1