提升代码安全性的方法、装置、计算机设备和存储介质与流程

文档序号:29935433发布日期:2022-05-07 13:31阅读:89来源:国知局
提升代码安全性的方法、装置、计算机设备和存储介质与流程

1.本发明涉及代码调用技术领域,尤其是指提升代码安全性的方法、装置、计算机设备和存储介质。


背景技术:

2.java是目前市场上主流的企业级应用解决方案,java在企业级开发中占据绝对的市场主导份额,包括很多重要的对安全敏感的领域,比如政企业务,电商,供应链等。传统的对java代码进行保护的方法为:代码混淆和自定义类加载(简称:classload),虽然上述两种方法都可以在一定程度实现对java代码的保护,但是上述两种方法均存在如下弊端:一是,spring框架(java中的一种主流开发框架)作为一种依赖反射获取方法名和变量名的框架,使用代码混淆的方法对java代码进行保护需要将方法和变量名都进行重命名,对spring框架这种高度使用反射进行依赖管理的框架具有极强的破坏性。二是,自定义classload需要基于java进行代码加解密,存在易破解、安全性低的弊端,并且自定义classload破坏了spring框架固有的classload机制以及启动入口,存在兼容性差的问题。三是,当代码作为第三方库或工具包提供给客户使用时,基于代码混淆方法被混淆的class文件对客户而言可读性较差,尤其是经过加密之后的class文件,客户更是难以进行编译开发。四是,class文件的可读性变差,集成开发环境或二次开发对代码的识别性降低。五是,采用代码混淆的方法会改变方法名,客户在使用产品的过程中,不容易发现问题,增加了客户对漏洞排查定位的难度。
3.因此,急需提出一种适用性强、安全性高的提升代码安全性的方法、装置、计算机设备和存储介质。


技术实现要素:

4.为了解决上述技术问题,本发明提供了一种提升代码安全性的方法、装置、计算机设备和存储介质,可以在不改变方法名和变量名的前提下,提升代码的安全性和兼容性。
5.为实现上述目的,本技术提出第一技术方案:
6.提升代码安全性的方法,包括以下步骤:提取class文件中的方法体,生成第一class文件;对所述方法体进行加密生成加密方法体,并将所述加密方法体存储至二进制文件;监测所述第一class文件是否发生加载事件,若监测到所述第一class文件发生加载事件,则按照预设的索引方法,获取所述加密方法体;解密回填所述加密方法体至所述第一class文件。
7.在本发明的一个实施例中,所述生成第一class文件还包括:基于所述class文件中的方法体,判断所述方法体存在需返回的数据类型;若所述方法体不存在需返回的数据类型,则直接提取所述class文件中的方法体;若所述方法体存在需返回的数据类型,则将所述class文件中的方法体提取之后,插入返回数据类型为空的字节码至所述第一class文件。
8.在本发明的一个实施例中,所述方法体的名称包括:类名、方法名和参数个数。
9.在本发明的一个实施例中,所述监测所述第一class文件是否发生加载事件具体包括:若监测到所述第一class文件发生加载事件,则拦截所述第一class文件。
10.在本发明的一个实施例中,所述按照预设的索引方法,获取所述加密方法体具体包括:获取所述第一class文件的类名和所述方法体的名称,提取所述方法体的类名;若所述方法体的类名与所述第一class文件的类名一致,则获取所述加密方法体。
11.在本发明的一个实施例中,所述对所述方法体进行加密生成加密方法体包括:基于对称加密算法对所述方法体进行加密生成加密方法体;其中,所述加密方法体为二进制文件;所述对称加密算法包括:des算法、3des算法和aes算法中的任一项。
12.为实现上述目的,本技术还提出第二技术方案:
13.一种提升代码安全性的装置,所述装置包括:方法体提取单元,以用于提取class文件中的方法体,生成第一class文件;加密存储单元,所述加密单元与所述方法体提取单元通信连接,所述加密反元以用于对所述方法体进行加密生成加密方法体,并将所述加密方法体存储至二进制文件;监测单元,所述监测单元与所述加密存储单元通信连接,所述监测单元以用于监测所述第一class文件是否发生加载事件,若监测到所述第一class文件发生加载事件,则按照预设的索引方法,获取所述加密方法体;解密回填单元,所述解密回填单元以用于解密还原所述加密方法体至所述方法体,回填所述方法体至第一class文件。
14.在本发明的一个实施例中,所述监测单元具体包括:拦截模块,所述拦截模块与所述监测单元通信连接,若所述监测单元监测到所述第一class文件发生加载事件,则对所述第一class文件进行拦截并按照预设的索引方法,获取所述加密方法体。
15.为实现上述目的,本技术提出第三技术方案:
16.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现所述方法的步骤。
17.为实现上述目的,本技术提出第四技术方案:
18.一种计算机可读存储介质,所述计算机可读存储介质存储有程序,当所述程序被处理器执行时,使得所述处理器执行所述方法的步骤。
19.本发明的上述技术方案相比现有技术具有以下优点:
20.本发明所述的一种提升代码安全性的方法、装置、计算机设备和存储介质,所述方法包括:提取class文件中的方法体,生成第一class文件;对所述方法体进行加密生成加密方法体,并将所述加密方法体存储至二进制文件;监测所述第一class文件是否发生加载事件,若监测到所述第一class文件发生加载事件,则按照预设的索引方法,获取所述加密方法体;解密回填所述加密方法体至所述第一class文件。本技术所述的提升代码安全性的方法、装置、计算机设备和存储介质通过对class文件中的方法体进行无变化提取存储,在不影响spring框架的反射机制和classload机制前提下,提升了代码的安全性和兼容性。
附图说明
21.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它
的附图。
22.图1是本发明的方法流程图;
23.图2是本发明的方法流程图;
24.图3是本发明的装置结构图。
具体实施方式
25.为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
26.实施例一:
27.参照图1所示,图1为实施例一的方法流程图。
28.本实施例的提升代码安全性的方法,包括以下步骤:
29.步骤s1、提取class文件中的方法体,生成第一class文件;即所述第一class与class文件的区别在于:class文件中包含有方法体,而第一class文件中不包含有方法体。class文件是java字节代码经编译之后得到的。
30.在其中一个实施方式中,所述生成第一class文件还包括:基于所述class文件中的方法体,判断所述方法体存在需返回的数据类型;若所述方法体不存在需返回的数据类型,则直接提取所述class文件中的方法体;若所述方法体存在需返回的数据类型,则将所述class文件中的方法体提取之后,插入返回数据类型为空的字节码至所述第一class文件。即如果class文件中的方法体存在需要返回的数据类型,则为了确保class文件的完整性,需要在已经完成方法体提取的第一class文件中插入原方法体返回数据类型为空的字节码。
31.在其中一个实施方式中,所述方法体的名称包括:类名、方法名和参数个数。需要理解的是,本领域的技术人员可以对上述类名、方法体和参数个数的前后排列顺序进行调整,但是需要理解的是,为了确保方法体的顺利调用,方法体的名称中应至少包含类名、方法名和参数个数。
32.步骤s2、对所述方法体进行加密生成加密方法体,并将所述加密方法体存储至二进制文件。
33.在其中一个实施方式中,基于对称加密算法对所述方法体进行加密生成加密方法体;其中,所述加密方法体为二进制文件;所述对称加密算法包括:des算法、3des算法和aes算法中的任一项。
34.步骤s3、监测所述第一class文件是否发生加载事件,若监测到所述第一class文件发生加载事件,则按照预设的索引方法,获取所述加密方法体。
35.在其中一个实施方式中,所述监测所述第一class文件是否发生加载事件具体包括:若监测到所述第一class文件发生加载事件,则拦截所述第一class文件。也就是说,如果已经预判到第一class文件发生加载事件,则将待发生加载事件的第一class文件进行拦截。
36.在其中一个实施方式中,所述按照预设的索引方法,获取所述加密方法体具体包
括:获取所述第一class文件的类名和所述方法体的名称,提取所述方法体的类名;若所述方法体的类名与所述第一class文件的类名一致,则获取所述加密方法体。
37.步骤s4、解密回填所述加密方法体至所述第一class文件。
38.实施例二:
39.参照图1-图2所示,图1-图2为实施例二的方法流程图。
40.本实施例的提升代码安全性的方法,包括以下步骤:提取class文件中的方法体,生成第一class文件;对所述方法体进行加密生成加密方法体,并将所述加密方法体存储至二进制文件;监测所述第一class文件是否发生加载事件,若监测到所述第一class文件发生加载事件,则按照预设的索引方法,获取所述加密方法体;解密回填所述加密方法体至所述第一class文件。
41.在其中一个实施方式中,所述生成第一class文件还包括:基于所述class文件中的方法体,判断所述方法体存在需返回的数据类型;若所述方法体不存在需返回的数据类型,则直接提取所述class文件中的方法体;若所述方法体存在需返回的数据类型,则将所述class文件中的方法体提取之后,插入返回数据类型为空的字节码至所述第一class文件。
42.在其中一个实施方式中,所述方法体的名称包括:类名、方法名和参数个数。
43.在其中一个实施方式中,所述监测所述第一class文件是否发生加载事件具体包括:若监测到所述第一class文件发生加载事件,则拦截所述第一class文件。
44.在其中一个实施方式中,所述按照预设的索引方法,获取所述加密方法体具体包括:获取所述第一class文件的类名和所述方法体的名称,提取所述方法体的类名;若所述方法体的类名与所述第一class文件的类名一致,则获取所述加密方法体。
45.在其中一个实施方式中,所述对所述方法体进行加密生成加密方法体包括:基于对称加密算法对所述方法体进行加密生成加密方法体;其中,所述加密方法体为二进制文件;所述对称加密算法包括:des算法、3des算法和aes算法中的任一项。
46.实施例三:
47.参照图3所示,图3为实施例四的装置结构图。
48.本实施例的提升代码安全性的装置,包括:方法体提取单元,以用于提取class文件中的方法体,生成第一class文件;加密存储单元,所述加密单元与所述方法体提取单元通信连接,所述加密反元以用于对所述方法体进行加密生成加密方法体,并将所述加密方法体存储至二进制文件;监测单元,所述监测单元与所述加密存储单元通信连接,所述监测单元以用于监测所述第一class文件是否发生加载事件,若监测到所述第一class文件发生加载事件,则按照预设的索引方法,获取所述加密方法体;解密回填单元,所述解密回填单元以用于解密还原所述加密方法体至所述方法体,回填所述方法体至第一class文件。
49.在其中一个实施方式中,所述监测单元具体包括:拦截模块,所述拦截模块与所述监测单元通信连接,若所述监测单元监测到所述第一class文件发生加载事件,则对所述第一class文件进行拦截并按照预设的索引方法,获取所述加密方法体。
50.需要理解是,上述提升代码安全性的装置中所述的方法体提取单元、加密存储单元、监测单元和解密回填单元可以使用外接的设备装置完成对应的方法步骤,也可以基于虚拟模块及代码形式实现对应方法步骤。比如:上述装置中的监测单元可以通过java虚拟
机暴露出来的一些供用户扩展的接口集合(全称:java virtual machine tool interface;简称:jvmti)实现对第一class文件加载事件的监测和拦截。加密存储单元可以是是一个可以扩展和自定义加密算法的工具。方法体提取单元可以使一个字节码提取器。解密回填单元可以通过jvmti实现类文件加载hook机制,对方法体进行解密回填至第一class文件,交回给java虚拟机(全称:java virtual machine;简称:jvm)执行。
51.实施例四:
52.本实施例提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如实施例一和实施例二所述方法的步骤。
53.所述处理器执行所述计算机程序时实现如下步骤:提取class文件中的方法体,生成第一class文件;对所述方法体进行加密生成加密方法体,并将所述加密方法体存储至二进制文件;监测所述第一class文件是否发生加载事件,若监测到所述第一class文件发生加载事件,则按照预设的索引方法,获取所述加密方法体;解密回填所述加密方法体至所述第一class文件。其中,所述方法体的名称包括:类名、方法名和参数个数。
54.所述处理器执行所述计算机程序时实现如下步骤:基于所述class文件中的方法体,判断所述方法体存在需返回的数据类型;若所述方法体不存在需返回的数据类型,则直接提取所述class文件中的方法体;若所述方法体存在需返回的数据类型,则将所述class文件中的方法体提取之后,插入返回数据类型为空的字节码至所述第一class文件。
55.所述处理器执行所述计算机程序时实现如下步骤:若监测到所述第一class文件发生加载事件,则拦截所述第一class文件。
56.所述处理器执行所述计算机程序时实现如下步骤:获取所述第一class文件的类名和所述方法体的名称,提取所述方法体的类名;若所述方法体的类名与所述第一class文件的类名一致,则获取所述加密方法体。
57.所述处理器执行所述计算机程序时实现如下步骤:基于对称加密算法对所述方法体进行加密生成加密方法体;其中,所述加密方法体为二进制文件;所述对称加密算法包括:des算法、3des算法和aes算法中的任一项。
58.实施例五:
59.本实施例提供一种计算机可读存储介质,计算机可读存储介质存储有程序,当程序被处理器执行时,使得处理器执行上述实施例一和实施例二中的提升代码安全性的方法的步骤。
60.当程序被处理器执行时,使得处理器执行如下步骤:提取class文件中的方法体,生成第一class文件;对所述方法体进行加密生成加密方法体,并将所述加密方法体存储至二进制文件;监测所述第一class文件是否发生加载事件,若监测到所述第一class文件发生加载事件,则按照预设的索引方法,获取所述加密方法体;解密回填所述加密方法体至所述第一class文件。其中,所述方法体的名称包括:类名、方法名和参数个数。
61.当程序被处理器执行时,使得处理器执行如下步骤:基于所述class文件中的方法体,判断所述方法体存在需返回的数据类型;若所述方法体不存在需返回的数据类型,则直接提取所述class文件中的方法体;若所述方法体存在需返回的数据类型,则将所述class文件中的方法体提取之后,插入返回数据类型为空的字节码至所述第一class文件。
62.当程序被处理器执行时,使得处理器执行如下步骤:若监测到所述第一class文件发生加载事件,则拦截所述第一class文件。
63.当程序被处理器执行时,使得处理器执行如下步骤:获取所述第一class文件的类名和所述方法体的名称,提取所述方法体的类名;若所述方法体的类名与所述第一class文件的类名一致,则获取所述加密方法体。
64.当程序被处理器执行时,使得处理器执行如下步骤:基于对称加密算法对所述方法体进行加密生成加密方法体;其中,所述加密方法体为二进制文件;所述对称加密算法包括:des算法、3des算法和aes算法中的任一项。
65.本领域内的技术人员应明白,本发明实施例中的实施例可提供为方法、系统、或计算机程序产品。因此,本发明实施例中可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例中可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
66.本发明实施例中是参照根据本发明实施例中实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
67.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
68.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
69.注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其它等效实施例,而本发明的范围由所附的权利要求范围决定。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1