一种基于动态链接库的Java源码保护方法技术

技术编号:17879282 阅读:35 留言:0更新日期:2018-05-06 01:00
本发明专利技术公开本发明专利技术提供一种基于动态链接库的Java源码保护方法,从Java源代码文件中进行抽取和分离函数声明接口和函数实现主体,得到源代码中抽取的接口声明文件;将源代码编译成Java字节码文件,对字节码文件进行处理,获取字节码内容信息并生成动态链接库文件;对所述抽取的接口声明文件进行编译,获得可供发布的接口调用文件,并可发布供第三方使用;将所述动态链接库文件部署到运行的环境中,使用对应Java类加载器将所述动态链接库文件内容中字节码信息动态加载到JVM虚拟机,完成对受保护代码的运行。该方法能有效对核心代码进行保护和运行控制,增加了对Java源代码的保护。

A Java source protection method based on dynamic link library

The invention provides a Java source protection method based on dynamic link library, extracting and separating function declaration interface and function realization subject from Java source code files, obtaining interface declaration files extracted from source code, compiling the source code into Java bytecode files, processing bytecode files, Obtain the content information of bytecode and generate dynamic link library files; compile the extracted interface declaration files, obtain the published interface call files, and publish it for third parties; deploy the dynamic link library files to the running environment, use the dynamic link library for the Java class loader. The bytecode information is dynamically loaded into the JVM virtual machine to complete the operation of the protected code. This method can effectively protect and run the core code, and increase the protection of Java source code.

【技术实现步骤摘要】
一种基于动态链接库的Java源码保护方法
本专利技术涉及网络系统中的信息安全

技术介绍
在当今软件系统开发中,B/S(Browser/Server)结构即浏览器和服务器结构的模式越来越流行。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。B/S结构的优点:具有分布性特点,可以随时随地进行查询、浏览等业务处理,业务扩展简单方便,通过增加网页即可增加服务器功能,维护简单方便,只需要改变网页,即可实现所有用户的同步更新,开发简单,共享性强。大多数B/S系统以主流的J2EE技术架构为基础。针对J2EE技术开发的Java源代码编译运行文件常用格式为Jar包或者War包等格式。一种现有的方案是将项目源码使用打成War包,并解压为文件夹的形式;将指定文件夹下的源码文件加密,降低源Class文件被直接反编译的风险;改写类加载器,通过自定义JVM类加载器,解密源码文件;混淆类加载器,通过混淆自定义类加载器,达到打乱类加载器逻辑、隐藏解密算法的目的。或者对程序源代码进行逻辑替换,保存源代码函数调用关系,并用指定字符串和分隔符替换,对函数的调用信息的对应关系进行加密生成授权文件,改写Java类加载器发送到用户终端,使用户终端解密所述授权文件与函数调用逻辑的Java代码生成源代码文件。从源代码文件中获取函数调用信息,或者用预设字符串替换核心源代码,并将替换内容加密。同时改写类加载器,在运行的时候,将代码通过授权文件对替换字符串进行解密,从而还原Java运行源代码。在实际应用中,通过利用代码混淆了源码,虽然降低了代码的可读性,但是编译后的运行代码仍然可以被反编译。如果通过修改源代码,将核心源代码内容替换成调用函数或者字符串信息,则会影响源代码的维护。故,需要一种新的技术方案以解决上述问题。
技术实现思路
专利技术目的:提供一种Java源码保护方法,以满足防止Java运行文件被反编译的需求。技术方案:为达到上述目的,本专利技术可采用如下技术方案:一种基于动态链接库的Java源码保护方法,其特征在于,包括以下步骤:(1)、抽取Java接口:将源代码文件进行抽取和分离函数声明接口和函数实现主体;将所有需要保护的Java源代码抽取出一套接口,接口文件中只包含Java接口和类的声明,得到源代码抽取的接口声明文件;(2)、编译文件:将所有源代码编译打包成Class字节码文件,并解析字节码内容,记录字节码中相互依赖关系,并根据字节码内容生成C语言头文件;(3)、生成动态链接库文件:将C语言头文件和加密模块,打包编译成动态链接库文件,生成dll或so格式文件;(4)、对Java接口文件编译打包发布:将步骤(1)中抽取的接口文件进行编译打包,形成可供第三方开发者使用的Jar接口文件,并进行分发;(5)、设置加载本地lib包:将步骤(3)生成的包含所有Java字节码内容的dll或so文件部署到运行环境中,并设置JVM-agentlib启动参数;(6)、动态加载动态链接库内容:在程序运行过程中,通过类加载器动态将动态链接库中加密的Java字节码内容装在到JVM中,实现完整Java字节码的加载运行。有益效果:本专利技术将实现一种基于动态链接库的Java源代码保护方法及装置,主要针对Java代码难以保护,容易被反编译、无法有效保护核心代码,无法防止程序被非法复制和传播的问题,提出了一种基于动态链接库的Java源码保护方法及装置,可将Java源代码编译打包成动态链接库文件,通过发布Java接口文件,动态加载动态链接库文件,从而达到保护Java源代码避免被发编译。可避免Java混淆代码被反编译,同时避免替换Java源代码内容造成的代码维护困难。进一步的,步骤(2)中,将所有源代码通过Ant,Maven等工具编译打包成Class字节码文件。进一步的,步骤(5)中JVM-agentlib启动参数设置方法为:agentlib:libname[=options],设置libname为本地代理库文件名;在Windows平台上JVM搜索本地库名为libname.dll的文件,在linux平台上JVM搜索本地库名为libname.so的文件。进一步的,JVM为Java虚拟机。进一步的,该方法应用于B/S结构。附图说明图1为本专利技术中Java源码保护方法的示意图。具体实施方式本专利技术中包括的技术术语说明如下:动态链接库:动态链接库可支撑Window和Linux系统,Window平台下为dll文件,Linux平台下so文件,器主要是实现共享函数库概念的一种方式。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个动态链接库文件中,该动态链接库包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。动态链接库还有助于共享数据和资源。Java虚拟机:虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机(JVM)一种用于计算机设备的规范,可用不同的方式(软件或硬件)加以实现。编译虚拟机的指令集与编译微处理器的指令集非常类似。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。字节码:字节码(Byte-code)是一种包含执行程序、由一序列op代码/数据对组成的二进制文件。字节码是一种中间码,它比机器码更抽象。它经常被看作是包含一个执行程序的二进制文件,更像一个对象模型。字节码被这样叫是因为通常每个opcode是一字节长,但是指令码的长度是变化的。每个指令有从0到255(或十六进制的:00到FF)的一字节操作码,被参数例如寄存器或内存地址跟随。Java类加载器:类加载器是负责将可能是网络上、也可能是磁盘上的class文件加载到内存中。并为其生成对应的java.lang.class对象。一旦一个类被载入JVM了,同一个类就不会被再次加载。在JAVA中一个类用其全限定类名(包名和类名)作为其唯一标识,但是在JVM中,一个类用其全限定类名和其类加载器作为其唯一标识。在JAVA中的同一个类,如果用不同的类加载器加载,则生成的class对象认为是不同的。当JVM启动时,会形成由三个类加载器组成的初始类加载器层次结构。本专利技术提供一种基于动态链接库的Java源码保护方法,应用于计算机领域的B/S结构。本专利技术包括以下步骤:(1)、抽取Java接口:将源代码文件进行抽取和分离函数声明接口和函数实现主体。利用装置将所有需要保护的Java源代码抽取出一套接口,接口文件中只包含Java接口和类的声明。得到源代码抽取的接口声明文件。(2)、编译文件:将所有源代码通过Ant,Maven等工具编译打包成Class字节码文件,并解析字节码内容,记录字节码中相互依赖关系,并根据字节码内容生成C语言头文件。(3)、生成动态链接库文件:将C语言头文件和加密模块,打包编译成动态链接库文件,生成dll或so格式文件,可避免文件内容被反编译而泄露。(4本文档来自技高网
...
一种基于动态链接库的Java源码保护方法

【技术保护点】
一种基于动态链接库的Java源码保护方法,其特征在于,包括以下步骤:(1)、抽取Java接口:将源代码文件进行抽取和分离函数声明接口和函数实现主体;将所有需要保护的Java源代码抽取出一套接口,接口文件中只包含Java接口和类的声明,得到源代码抽取的接口声明文件;(2)、编译文件:将所有源代码编译打包成Class字节码文件,并解析字节码内容,记录字节码中相互依赖关系,并根据字节码内容生成C语言头文件;(3)、生成动态链接库文件:将C语言头文件和加密模块,打包编译成动态链接库文件,生成dll或so格式文件;(4)、对Java接口文件编译打包发布:将步骤(1)中抽取的接口文件进行编译打包,形成可供第三方开发者使用的Jar接口文件,并进行分发;(5)、设置加载本地lib包:将步骤(3)生成的包含所有Java字节码内容的dll或so文件部署到运行环境中,并设置JVM‑agentlib启动参数;(6)、动态加载动态链接库内容:在程序运行过程中,通过类加载器动态将动态链接库中加密的Java字节码内容装在到JVM中,实现完整Java字节码的加载运行。

【技术特征摘要】
1.一种基于动态链接库的Java源码保护方法,其特征在于,包括以下步骤:(1)、抽取Java接口:将源代码文件进行抽取和分离函数声明接口和函数实现主体;将所有需要保护的Java源代码抽取出一套接口,接口文件中只包含Java接口和类的声明,得到源代码抽取的接口声明文件;(2)、编译文件:将所有源代码编译打包成Class字节码文件,并解析字节码内容,记录字节码中相互依赖关系,并根据字节码内容生成C语言头文件;(3)、生成动态链接库文件:将C语言头文件和加密模块,打包编译成动态链接库文件,生成dll或so格式文件;(4)、对Java接口文件编译打包发布:将步骤(1)中抽取的接口文件进行编译打包,形成可供第三方开发者使用的Jar接口文件,并进行分发;(5)、设置加载本地lib包:将步骤(3)生成的包含所有Java字节码内容的dll或so文件部署到运行环境中,并设置JVM-agentlib启动参数;(6...

【专利技术属性】
技术研发人员:苏祖辉支兵
申请(专利权)人:南京莱斯信息技术股份有限公司
类型:发明
国别省市:江苏,32

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

1