System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种字节码保护方法、终端设备及存储介质技术_技高网

一种字节码保护方法、终端设备及存储介质技术

技术编号:41126953 阅读:4 留言:0更新日期:2024-04-30 17:54
本发明专利技术涉及一种字节码保护方法、终端设备及存储介质,该方法中包括:通过docker容器加载对应目标服务器环境的加密工具镜像后启动初始化单元;初始化单元对加密单元和解密单元进行渲染并编译;初始化单元编译并加密解密辅助单元;加密单元加密字节码文件,并对java项目的代码框架中的用于处理字节码读取逻辑的字节码文件进行修改,将其中的用于读取字节码的逻辑修改为调用辅助解密单元内的用于字节码读取解密的逻辑;当目标服务器读取java项目加密后的字节码文件时,经由解密辅助单元通过JNI调用解密单元进行解密。本发明专利技术实现了对字节码文件的加解密。

【技术实现步骤摘要】

本专利技术涉及软件开发领域,尤其涉及一种字节码保护方法、终端设备及存储介质


技术介绍

1、现有的对java字节码保护的加解密技术通常有以下缺陷:

2、(1)一般基于jvmti的加解密方案无法兼容不同的操作系统,跨平台使用时步骤非常繁琐。

3、(2)密码通常被固定在解密装置的源代码中,这使得加密字节码时无法灵活修改密码,在密码或解密装置被泄漏后容易造成更广泛的影响。

4、(3)往往不支持spring和hibernate等具备自主读取和修改字节码功能的代码框架,或者必须禁用掉相关功能才能正常使用;也有方案通过创建一个与原字节码类文件同名的文件对相关功能的逻辑进行替换,但这种方案受限于类的加载顺序,只能用于程序主体,无法用于提供给第三方的组件库。

5、(4)出于防御目的会完全禁用掉java agent,导致无法兼容opentelemetry等基于java agent的工具。

6、(5)无法防御debug等破解手段。

7、(6)部分技术要求加解密目标必须为jar格式压缩包。

8、(7)一些通过代码混淆实现的代码保护技术会对程序逻辑产生影响,需要修改代码进行适配。


技术实现思路

1、为了解决上述问题,本专利技术提出了一种字节码保护方法、终端设备及存储介质。

2、具体方案如下:

3、一种字节码保护方法,包括以下步骤:

4、s1:通过docker容器加载对应目标服务器环境的加密工具镜像后,在目标服务器环境下启动加密工具中的初始化单元;

5、s2:初始化单元基于输入的加解密参数对加密工具中的加密单元和解密单元进行渲染并编译;

6、s3:初始化单元编译加密工具中的解密辅助单元后,通过加密单元对编译后的解密辅助单元进行加密;

7、s4:将java项目编译好的字节码文件通过加密单元进行加密;

8、s5:加密单元对java项目的代码框架中的用于处理字节码读取逻辑的字节码文件进行修改,将其中的用于读取字节码的逻辑修改为调用辅助解密单元内的用于字节码读取解密的逻辑;

9、s6:当目标服务器读取java项目加密后的字节码文件时,经由解密辅助单元通过jni调用解密单元进行解密。

10、进一步的,步骤s1中加密工具在java项目的源代码编译完成后,通过maven插件或shell脚本启动,之后通过docker容器加载对应的加密工具镜像。

11、进一步的,步骤s2中编译后的加密单元和解密单元保存为二进制动态库文件。

12、进一步的,步骤s4中还包括:加密单元读取并解压java项目依赖库路径下的除该java项目依赖库之外的其他依赖库的jar文件, 解压后对其中的字节码文件进行加密, 加密完成后重新压缩成jar文件。

13、进一步的,步骤s5中调用辅助解密单元内的用于字节码读取解密的逻辑在继承了代码框架中原有的用于读取字节码的逻辑的基础上,增加了通过jni调用加密工具中的解密单元的逻辑。

14、进一步的,步骤s6中的解密过程为:解密单元对加载的字节码文件中的前四个字节进行检查,判断其是否符合正常类文件的起始表示,如果是,直接加载字节码至内存中;否则,则基于加密时的秘钥和算法进行解密。

15、进一步的,步骤s6中目标服务器读取java项目加密后的字节码文件之前,还包括:

16、在java虚拟机jvm参数中通过设置代理库指定引用解密单元;

17、在解密单元加载后,将解密单元中的解密函数注册至classfileloadhook;

18、解密单元通过覆盖全局变量ghotspotvmstructs来禁用java的调试工具serviceability agent。

19、进一步的,在解密单元中的解密函数的调用过程中,解密单元通过jvm提供的管理接口jmminterface对jvm启动参数进行检查,判断是否有启用disableattachmechanism参数来禁用调试功能;当解密单元发现没有禁用调试功能时,中断解密流程;当解密单元检索到启动参数中存在javaagent或agentpath关键字时,触发对java agent合法性的检查,该检查将java agent文件名与事先录入在解密单元源代码中的java agent白名单列表进行比对,如果命中,则计算java agent文件的哈希值,将其与白名单中记录的哈希值进行比较,哈希值值一致则通过校验;如果未命中或者哈希值不一致,则中断解密流程。

20、一种字节码保护终端设备,包括处理器、存储器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本专利技术实施例上述的方法的步骤。

21、一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现本专利技术实施例上述的方法的步骤。

22、本专利技术采用如上技术方案,实现了对字节码文件的加解密,克服了现有技术中存在的缺陷。

本文档来自技高网...

【技术保护点】

1.一种字节码保护方法,其特征在于,包括以下步骤:

2.根据权利要求1所述的字节码保护方法,其特征在于:步骤S1中加密工具在java项目的源代码编译完成后,通过maven插件或shell脚本启动,之后通过docker容器加载对应的加密工具镜像。

3.根据权利要求1所述的字节码保护方法,其特征在于:步骤S2中编译后的加密单元和解密单元保存为二进制动态库文件。

4. 根据权利要求1所述的字节码保护方法,其特征在于:步骤S4中还包括:加密单元读取并解压java项目依赖库路径下的除该java项目依赖库之外的其他依赖库的jar文件, 解压后对其中的字节码文件进行加密, 加密完成后重新压缩成jar文件。

5.根据权利要求1所述的字节码保护方法,其特征在于:步骤S5中调用辅助解密单元内的用于字节码读取解密的逻辑在继承了代码框架中原有的用于读取字节码的逻辑的基础上,增加了通过JNI调用加密工具中的解密单元的逻辑。

6.根据权利要求1所述的字节码保护方法,其特征在于:步骤S6中的解密过程为:解密单元对加载的字节码文件中的前四个字节进行检查,判断其是否符合正常类文件的起始表示,如果是,直接加载字节码至内存中;否则,则基于加密时的秘钥和算法进行解密。

7.根据权利要求1所述的字节码保护方法,其特征在于:步骤S6中目标服务器读取java项目加密后的字节码文件之前,还包括:

8. 根据权利要求7所述的字节码保护方法,其特征在于:在解密单元中的解密函数的调用过程中,解密单元通过JVM提供的管理接口JmmInterface对JVM启动参数进行检查,判断是否有启用DisableAttachMechanism参数来禁用调试功能;当解密单元发现没有禁用调试功能时,中断解密流程;当解密单元检索到启动参数中存在javaagent或agentpath关键字时,触发对java agent合法性的检查,该检查将java agent文件名与事先录入在解密单元源代码中的java agent白名单列表进行比对,如果命中,则计算java agent文件的哈希值,将其与白名单中记录的哈希值进行比较,哈希值值一致则通过校验;如果未命中或者哈希值不一致,则中断解密流程。

9.一种字节码保护终端设备,其特征在于:包括处理器、存储器以及存储在所述存储器中并在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如权利要求1~8中任一所述方法的步骤。

10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现如权利要求1~8中任一所述方法的步骤。

...

【技术特征摘要】

1.一种字节码保护方法,其特征在于,包括以下步骤:

2.根据权利要求1所述的字节码保护方法,其特征在于:步骤s1中加密工具在java项目的源代码编译完成后,通过maven插件或shell脚本启动,之后通过docker容器加载对应的加密工具镜像。

3.根据权利要求1所述的字节码保护方法,其特征在于:步骤s2中编译后的加密单元和解密单元保存为二进制动态库文件。

4. 根据权利要求1所述的字节码保护方法,其特征在于:步骤s4中还包括:加密单元读取并解压java项目依赖库路径下的除该java项目依赖库之外的其他依赖库的jar文件, 解压后对其中的字节码文件进行加密, 加密完成后重新压缩成jar文件。

5.根据权利要求1所述的字节码保护方法,其特征在于:步骤s5中调用辅助解密单元内的用于字节码读取解密的逻辑在继承了代码框架中原有的用于读取字节码的逻辑的基础上,增加了通过jni调用加密工具中的解密单元的逻辑。

6.根据权利要求1所述的字节码保护方法,其特征在于:步骤s6中的解密过程为:解密单元对加载的字节码文件中的前四个字节进行检查,判断其是否符合正常类文件的起始表示,如果是,直接加载字节码至内存中;否则,则基于加密时的秘钥和算法进行解密。

7.根据权利要求1所述的字节...

【专利技术属性】
技术研发人员:马嘉骏
申请(专利权)人:厦门星纵数字科技有限公司
类型:发明
国别省市:

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

1