Java源代码的保护方法和系统技术方案

技术编号:7180194 阅读:860 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种Java源代码的保护方法和系统。在第一启动类被调用时,该方法包括以下步骤,其中,第一启动类为Java程序的启动类:第一启动类将第一密文数据进行解密,得到类加载器;类加载器将第二密文数据读入内存进行解密,得到第一类,其中,第一类为Java虚拟机运行的类,其后缀名为.class;类加载器将第二启动类加载到内存,其中,第二启动类为Java程序的jar包中的原启动类;以及类加载器将第一类加载到Java虚拟机,以便Java虚拟机能够调用第二启动类中的主接口,运行Java程序。通过本发明专利技术,能够实现Java源代码的保护,使得Java源代码不易被反汇编。

【技术实现步骤摘要】

本专利技术涉及软件保护
,具体而言,涉及一种Java源代码的保护方法和系统
技术介绍
Java语言是一种解释型语言,Java源代码经过编译,生成字节码文件,所生成的字节码文件在Java虚拟机中解释执行。由于这种字节码文件自描述性很强,保留了很多符号以及编译信息,导致Java源代码很容易被反编译成可读性很强的源代码,导致开发者的劳动成果被剽窃或者产品被篡改,随着Java语言的流行,Java的应用领域越来越广泛,对于Java源代码的保护的需求也越来越迫切。现有技术中,对于Java源代码的保护一般是通过混淆打乱代码执行流程或者隐藏关键信息使反编译后的代码难以理解从而提高破解代价,但随着反混淆技术的发展,单纯的混淆已不能达到很好的保护目的。针对相关技术中Java源代码容易被反汇编的问题,目前尚未提出有效的解决方案。
技术实现思路
本专利技术的主要目的在于提供一种Java源代码的保护方法和系统,以解决Java源代码容易被反汇编的问题。为了实现上述目的,根据本专利技术的一个方面,提供了一种Java源代码的保护方法。根据本专利技术的Java源代码的保护方法,在第一启动类被调用时包括以下步骤,其中,第一启动类为Java程序的启动类S1 第一启动类将第一密文数据读入内存进行解密, 得到第一明文数据,并将第一明文数据定义为类加载器,其中,第一密文数据为类加载器的字节码文件加密后得到的数据;S2 类加载器将第二密文数据读入内存进行解密,得到第二明文数据,并将第二明文数据定义为第一类,其中,第一类为Java虚拟机运行的类,其后缀名为.class,第二密文数据为第一类的字节码文件加密后得到的数据;以及S3 类加载器将第二启动类加载到内存,其中,第二启动类为Java程序的jar包中的原启动类;S4 类加载器将第一类加载到Java虚拟机,以便Java虚拟机能够调用第二启动类中的主接口,运行Java程序。进一步地,步骤Sl包括S11 第一启动类将第一密文数据读入内存;S12 第一启动类将本地的第一动态库加载到内存;S13 第一启动类调用第一动态库中的第三接口 ; S14 第一启动类将第一密文数据在内存中的地址传入第一动态库中的第三接口 ;S15 第一动态库中的第三接口对第一密文数据进行解密,得到第一明文数据;以及S16 第一动态库中的第三接口调用Java虚拟机的定义类接口将第一明文数据定义为类加载器。进一步地,步骤Sll包括Slll 调用第一启动类中的第一接口 ;S112:第一启动类中的第一接口调用第一启动类中的第二接口 ;以及S113:第一启动类中的第二接口将第一密文数据读入内存。进一步地,步骤S3包括S31 第一动态库中的第三接口调用类加载器中的第四接口 ;S32 类加载器中的第四接口读出Java程序的jar包中的配置文件;S33 类加载器中的第四接口从配置文件中读出第二启动类;S34 类加载器中的第四接口调用类加载器中的第五接口 ;以及S35 类加载器中的第五接口将第二启动类加载到内存。进一步地,步骤S2包括S21 类加载器中的第五接口调用类加载器中的第六接口 ;S22 类加载器中的第六接口将第二密文数据读入内存;S23 类加载器中的第五接口对第二密文数据进行解密得到第二明文数据;以及S24 类加载器的第五接口调用Java虚拟机的定义类接口将第二明文数据定义为第一类。进一步地,通过以下方式对第一密文数据和第二密文数据进行解密S2001 调用加密锁接口检索是否有加密锁;S2002 在检索到加密锁时,调用加密锁接口将密文数据传入加密锁中;S2003 调用加密锁接口使用存储在加密锁中的密钥对传入的密文数据进行解密,得到明文数据;以及S2004 调用加密锁接口获取明文数据。为了实现上述目的,根据本专利技术的一个方面,提供了一种Java源代码的保护系统。根据本专利技术的Java源代码的保护系统包括第一处理模块,包括第一启动类,其中,第一启动类为Java程序的启动类;调用模块,用于调用第一启动类;第二处理模块,包括类加载器;加密模块,用于将类加载器的字节码文件加密为第一密文数据以及将第一类的字节码文件加密为第二密文数据,其中,第一类为Java虚拟机运行的类;以及解密模块, 用于将第一密文数据解密为第一明文数据以及将第二密文数据解密为第二明文数据,其中,第一启动类用于将第一密文数据读入内存,并控制解密模块对第一密文数据解密,得到第一明文数据,并将第一明文数据定义为类加载器,类加载器用于将第二启动类加载到内存,将第二密文数据读入内存,并控制解密模块对第二密文数据进行解密,以及将第一类加载到Java虚拟机,以便Java虚拟机调用第二启动类中的主接口运行Java程序,其中,第二启动类为Java程序的jar包中的原启动类。进一步地,第一启动类还用于将本地的第一动态库加载到内存,调用第一动态库中的第三接口以及将第一密文数据在内存中的地址传入第一动态库中的第三接口,其中, 第一动态库中的第三接口用于对第一密文数据进行解密得到第一明文数据,以及调用Java 虚拟机的定义类接口将第一明文数据定义为类加载器。进一步地,第一启动类中包括第一接口和第二接口,第一启动类中的第一接口用于调用第一启动类中的第二接口,第一启动类中的第二接口用于将第一密文数据读入内存。进一步地,类加载器中包括第四接口和第五接口,其中,类加载器中的第四接口用于读出Java程序的jar包中的配置文件,从配置文件中读出第二启动类,并调用类加载器中的第五接口,类加载器中的第五接口用于将第二启动类加载到内存;以及第一动态库中的第三接口还用于调用类加载器中的第四接口。进一步地,类加载器中包括第六接口,其中,类加载器中的第六接口用于将第二密文数据读入内存;以及类加载器中的第五接口还用于调用类加载器中的第六接口,并对第二密文数据进行解密得到第二明文数据,调用Java虚拟机的定义类接口将第二明文数据定义为第一类。进一步地,解密模块包括第二检索子模块,用于调用加密锁接口检索是否有加密锁;第二传入子模块,用于在检索到加密锁时,调用加密锁接口将密文数据传入加密锁中; 第一解密子模块,用于调用加密锁接口使用存储在加密锁中的密钥对传入的密文数据进行解密,得到明文数据;以及第三获取子模块,用于调用加密锁接口获取明文数据。通过本专利技术,在第一启动类即Java程序的启动类被调用时,采用包括以下步骤的Java源代码的保护方法S1 第一启动类将第一密文数据读入内存进行解密,得到第一明文数据,并将第一明文数据定义为类加载器,其中,第一密文数据为类加载器的字节码文件加密后得到的数据;S2 类加载器将第二密文数据读入内存进行解密,得到第二明文数据,并将第二明文数据定义为第一类,其中,第一类为Java虚拟机运行的类,其后缀名为.class,第二密文数据为第一类的字节码文件加密后得到的数据;S3 类加载器将第二启动类加载到内存,其中,第二启动类为Java程序的jar包中的原启动类;以及S 4 类加载器将第一类加载到Java虚拟机,以便Java虚拟机能够调用第二启动类中的主接口,运行 Java程序,解决了 Java源代码容易被反汇编的问题,实现Java源代码的保护。附图说明构成本申请的一部分的附图用来提供对本专利技术的进一步理解,本专利技术的示意性实本文档来自技高网...

【技术保护点】
1.一种Java源代码的保护方法,其特征在于,在第一启动类被调用时该方法包括以下步骤,其中,所述第一启动类为Java程序的启动类:S1:所述第一启动类将第一密文数据读入内存进行解密,得到第一明文数据,并将所述第一明文数据定义为类加载器,其中,所述第一密文数据为类加载器的字节码文件加密后得到的数据;S2:所述类加载器将第二密文数据读入内存进行解密,得到第二明文数据,并将所述第二明文数据定义为第一类,其中,所述第一类为Java虚拟机运行的类,其后缀名为.class,所述第二密文数据为所述第一类的字节码文件加密后得到的数据;S3:所述类加载器将第二启动类加载到内存,其中,所述第二启动类为Java程序的jar包中的原启动类;以及S4:所述类加载器将所述第一类加载到所述Java虚拟机,以便所述Java虚拟机能够调用所述第二启动类中的主接口,运行所述Java程序。

【技术特征摘要】

【专利技术属性】
技术研发人员:陆舟于华章
申请(专利权)人:飞天诚信科技股份有限公司
类型:发明
国别省市:11

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

1