教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 教育文库 >

基于JVMTI的Java字节码保护技术的研究和实现v0.22(2)

来源:网络收集 时间:2026-09-15
导读: 首先创建一个动态链接库项目,并将JDK中JVMTI和JNI相关的头文件(jvmti.h、jni.h、jni_md.h)引入到项目中以建立支持JVMTI和JNI的编程环境;然后创建Agent_OnLoad函数,在该函数中通过GetEnv获取JVMTI环境并向JVM预

首先创建一个动态链接库项目,并将JDK中JVMTI和JNI相关的头文件(jvmti.h、jni.h、jni_md.h)引入到项目中以建立支持JVMTI和JNI的编程环境;然后创建Agent_OnLoad函数,在该函数中通过GetEnv获取JVMTI环境并向JVM预定VMInit事件的通知并设置VMInit事件的回调函数,在回调函数中利用RegisterNatives将自定义的本地代理方法注册到ClassLoader.defineclass1上;最后完成自定义的本地代理方法,在该方法中实现对字节码的解密。解密后的字节码存储在JVM的内存中,此时再调用java.dll中的

_Java_java_lang_ClassLoader_defineClass1@32方法将解密后的字节码转换为Class对象并将这个对象作为Agent_OnLoad的返回值返回给JVM。

在运行加密过的class文件时,必须在JVM的运行参数中通过-agentlib参数指定JVMTI客户端。

3.2 基于Linux平台的实现

在windows平台上的源代码基础上做如下修改即可实现JVMTI客户端向Linux平台的移植:

由于在Windows平台从动态链接库中调用函数需要LoadLibrary、GetProcAddress

和FreeLibrary三个库函数,而g++编译器不支持这三个库函数,所以需要将

windows.h头文件改为dlfcn.h头文件,然后分别使用dlopen、dlsym和dlclose这三

摘要:本文分析了Java字节码保护技术的现状,在此基础上提出了一种基于JVMTI的Java字节码保护技术,使得Java字节码的安全级别相当于传统的二进制代码。本文还给出了该技术在Windows平台和Linux平台下的实现方案。

个库函数,具体实现和Windows平台类似。

利用g++编译代码时,需要使用shared参数,这样将代码编译成动态链接库,利用

-o libXXX.so输出代理库,其中输出名称的后缀为lib和.so,XXX为自定义名称。 在程序运行前,必须使用set命令设置L-D_LIBRARY_PATH变量为代理库的路径。 和Windows平台一样,在运行加密过的class文件时,必须在JVM的运行参数中通过-agentlib参数指定JVMTI客户端。

4 结束语

本文提出的基于JVMTI的Java字节码保护技术及其实现方案在保持Java程序跨平台特性和不修改JVM的前提下达到了有效防止反编译的目标。当然这种技术并非无懈可击,采用极端的方式仍然可以对JVMTI客户端程序进行破解,破解的难度取决于JVMTI客户端采用的加密算法的强度。但正如Alex Kalinovsky所说[6]:成功的保护机制的关键是让它复杂到95%的典型用户很难破解,并迫使其余5%有经验的破解者花费大量的时间来破译。换句话来说,目标是让购买许可比花费在破解保护上的时间显得更加划算。

本文在JVMTI客户端程序对JVM类加载器执行效率的影响方面没有给出做详尽的分析或数据,但可以肯定的是这种影响是存在的,其影响程度主要取决于解密算法的时间复杂度。这个问题值得相关工程技术人员进一步研究和探讨。

参考文献:

[1] 欧阳辰.如何保护Java程序[EB/OL].

/article/websec/java/index,2004-12-02.

[2]陈刚.基于封装包的Java源代码安全保护[J].电子信息与对抗技术,2006,21(3):45-48.

[3]陈晗,赵轶群,缪亚波.Java字节码的水印嵌入[J].微型电脑应用,2004,20(20):56-58.

[4]Sun Microsystems. Java Native Interface

Specification[EB/OL]./javase/6/docs/technotes/guides/jni/spec/niTOC.2007-06-20.

[5]Sun Microsystems.JVM(TM)Tool Interface

1.1.102[EB/OL]./javase/6/docs/platform/jvmti/jvmti.2007-06-20.

[6]Alex Kalinovsky. 透视JAVA[M].刘凌,周哲海 译.北京:清华大学出版社,2005

摘要:本文分析了Java字节码保护技术的现状,在此基础上提出了一种基于JVMTI的Java字节码保护技术,使得Java字节码的安全级别相当于传统的二进制代码。本文还给出了该技术在Windows平台和Linux平台下的实现方案。

Research and Realization of Java Byte Code Protection Technical Based on

JVMTI

Abstract: The status of existing Java byte code protection technical is analyzed. Based on the result of this analyze, put forward a Java byte code protection technical based on JVMTI that can make the security level of Java byte code equal to the traditional binary code. Moreover, the implementation scheme works on the platform of Windows and Linux were offered. Keywords: Java; JVMTI; byte code protection; security level

…… 此处隐藏:619字,全部文档内容请下载后查看。喜欢就下载吧 ……
基于JVMTI的Java字节码保护技术的研究和实现v0.22(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/281028.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)