基于JVMTI的Java字节码保护技术的研究和实现v0.22(2)
首先创建一个动态链接库项目,并将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字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [教育文库]夜场KTV服务员的岗位职责及工作流程[1]
- [教育文库]企划、网络、市场绩效考核方案
- [教育文库]学党史、知党情、强党性--“党的基本理
- [教育文库]2016年高考物理大一轮总复习(江苏专版
- [教育文库]干部廉洁自律自查自纠的报告
- [教育文库]2010年北京大学心理学系拟录取硕士研究
- [教育文库]资金时间价值练习题及答案
- [教育文库]保护环境的心得体会
- [教育文库]英语角内容:英语趣味小知识
- [教育文库]档案收集与管理工作通知
- [教育文库]劳动规章制度范本范本
- [教育文库]高考物理一轮复习课后限时作业1运动的
- [教育文库]机械工艺夹具毕业设计195推动架设计说
- [教育文库]通用技术教学比赛说课稿2
- [教育文库]2018年四年级英语下册 Module 7 Unit 2
- [教育文库]第2章 宽带IP网络的体系结构
- [教育文库]九年级化学第五单元课题3《根据化学方
- [教育文库]小学英语六年级情态动词用法归纳
- [教育文库]甲级单位编制窑井盖项目可行性报告(立
- [教育文库]2016-2021年中国城市规划行业全景调研
- 高考英语听力十大场景词汇总结
- 全省领导班子思想政治建设座谈会会议精
- 人教版新课标高一英语提优竞赛试题 下
- 江西省2014年生物中考试题
- 长沙镇食品药品安全事故应急预案
- 《金刚石、石墨和C60》片段教学设计
- 福州教育学院(王旭东)
- 基于EDA音乐播放器的设计
- 9、古诗两首《夜书所见》《九月九日忆
- 小学语文课外阅读有效策略探讨
- 贵州文化产业发展成支柱产业的问卷调查
- 膀胱类癌的诊治体会(附3例报告)
- 发动机积碳产生的原因
- Configuring Code Composer Studio for
- 学生良好的心理素质如何培养点滴谈
- 46 电沉积法制备锂离子电池用硅-锂薄膜
- 美舍雅阁公司管理中各部门职责
- 去壳剥皮的小妙招
- 六自由度运动平台的仿真研究
- Pride and Prejudice(傲慢与偏见)




