一种保护java程序的方法技术

技术编号:8959603 阅读:258 留言:0更新日期:2013-07-25 19:10
本发明专利技术公开一种保护java程序的方法,属于软件保护领域。所述方法包括:java虚拟机装载class文件,当class文件中的java类方法对应的java指令符合预设可移植指令条件时,将java类方法对应的java指令移植到预设缓冲区中,获取java类方法的最大栈深度和最大局部变量个数,并用获取栈和局部变量的java类方法、执行加密锁内虚拟机的java类方法、修改栈和局部变量的java类方法填充class文件中被移植的java指令的位置。采用本发明专利技术的技术方案,将部分java程序移植到加密锁中,修改了被保护的java程序,使得程序逻辑不完整,无法还原原始java程序,提高了java程序的安全性。

【技术实现步骤摘要】

本专利技术涉及软件保护领域,尤其涉及。
技术介绍
Java语言是一种解释型语言。Java源代码经过编译,生成java指令文件,所生成的java指令文件在Java虚拟机(JVM)中解释执行。这种解释执行的运行机制导致Java源代码很容易被反编译。目前这种反编译工具很多,并且反编译的效果也很好,使得任何使用Java软件的用户都可以很容易地反编译和重构产品的源代码,从而使所有基于Java语言的授权认证许可变得毫无意义。因此,保证Java软件程序不被反编译和重构或者提高反编译和重构的难度,是基于Java语言的软件保护领域需要解决的一个重要问题。
技术实现思路
本专利技术的目的是为了克服现有技术的不足,提供了。本专利技术采用的技术方案是:,包括:步骤A: java虚拟机装载class文件,并判断所述class文件是否是合法的文件,如果是,则执行步骤B,否则返回错误信息,结束;步骤B:所述java虚拟机获取所述class文件中java类方法的总个数和java类方法的起始位置,根据所述起始位置找到当前java类方法;步骤C:所述java虚拟机解析当前java类方法对应的java指令,并判断是否解析成功,如果是,则执行步骤D,否则返回错误信息,结束;步骤D: 所述java虚拟机判断所述当前java类方法对应的java指令是否符合预设可移植指令条件,如果是,则将所述当前java类方法对应的java指令移植并保存到预设缓冲区中,执行步骤E,否则执行步骤G ;步骤E:所述java虚拟机获取当前java类方法的最大java虚拟机栈深度和最大局部变量个数;步骤F:所述java虚拟机根据所述最大java虚拟机栈深度和最大局部变量个数,用获取栈和局部变量的java类方法、执行加密锁内虚拟机的java类方法与修改栈和局部变量的java类方法填充所述class文件中被移植的java指令的位置,执行步骤G ;步骤G:所述java虚拟机判断已解析的java类方法的个数是否达到所述class文件中java类方法的总个数,如果是,则将所述预设缓冲区中的当前java类方法对应的java指令移植到加密锁内,结束,否则继续获取下一 java类方法作为当前java类方法,返回执行步骤C ;所述步骤A中,所述判断所述class文件是否是合法的文件,具体为:获取并判断class文件的文件头是否为预设字符串,如果是,则表示所述class文件是合法的文件,否则表示所述class文件是不合法的文件;所述步骤C中,所述解析当前java类方法对应的java指令,具体为:步骤C-1:所述java虚拟机获取所述class文件中常量池的个数和常量池的起始位置;步骤C-2:所述java虚拟机根据当前java类方法的第一成员变量和第二成员变量,从所述常量池中获取java类方法名称和java类方法描述符,并判断是否获取成功,如果是,则执行步骤C-3,否则返回错误信息,结束;步骤C-3:所述java虚拟机根据当前java类方法的第三成员变量和第四成员变量,获取当前java类方法的附加属性,并判断是否获取成功,如果是,则执行步骤D,否则返回错误信息,结束;所述当前java类方法的第一成员变量是对所述常量池中的java类方法名称的索引;所述当前java类方法的第二成员变量是对所述常量池中java类方法描述符的索引;所述当前java类方法的第三成员变量为当前java类方法的附加属性的个数;所述当前java类方法的第四成员变量为当前java类方法的附加属性的起始位置;所述附加属性包括code属性,code属性中包括当前java类方法的java指令和当前java类方法的java指令的长度;所述步骤C与所述步骤D之间包括:步骤A-1:所述java虚拟机显示class文件的当前java类方法和当前java类方法对应的java指令;步骤B-1:所述java虚拟机判断已解析的java类方法的个数是否超过所述class文件中java类方法的总个数,如果是,则执行步骤C-1,否则将下一 java类方法作为当前java类方法,返回执行步骤C ;步骤C-1:所述java虚拟机接收用户对显示的java类方法和java类方法对应的java指令的选择,根据所述附加属性,获取用户选择的java类方法对应的java指令的起始位置,根据所述起始位置,找到当前java类方法对应的java指令,执行步骤D ;所述步骤D具体为:步骤A-2:所 述java虚拟机判断当前java类方法对应的java指令是否符合预设可移植指令条件,如果是,则执行步骤B-2,否则执行步骤G ;步骤B-2:所述java虚拟机显示java文件的当前java类方法和当前java类方法对应的java指令;步骤C-2::所述java虚拟机判断已解析的java类方法的个数是否超过class文件中java类方法的总个数,如果是,则执行步骤D-2,否则将下一 java类方法作为当前java类方法,返回执行步骤C ;步骤D-2:所述java虚拟机接收用户对显示的java类方法和java类方法对应的java指令的选择,根据附加属性,获取被选择的java指令的起始位置,将起始位置的java指令作为当前java指令,将所述当前java指令移植并保存到预设缓冲区中,执行步骤E ;所述判断当前java类方法对应的java指令是否符合预设可移植指令条件,具体为:步骤D-1:所述java虚拟机判断当前java类方法对应的java指令的类型是否存在于预设可移植java指令类型集合中,如果是,则执行步骤D-2,否则表示当前指令不可被移植,执行步骤G ;步骤D-2:所述java虚拟机判断当前java类方法对应的java指令是否存在于预设引用常量池指令集合中,如果是,则表示当前指令不可被移植,执行步骤G,否则执行步骤D-3 ;步骤D-3:所述java虚拟机判断当前java类方法对应的java指令是否涉及内存操作,如果是,则表示当前指令不可被移植,执行步骤G,否则执行步骤D-4 ;步骤D-4:所述java虚拟机判断当前java类方法对应的java指令是否对class文件结构体的成员变量进行操作,如果是,则表示当前指令不可被移植,执行步骤G,否则执行步骤D-5 ;步骤D-5:所述java虚拟机判断当前java类方法对应的java指令是否调用外部java类方法,如果是,则表示当前指令不可被移植,执行步骤G,否则执行步骤E ;所述预设可移植java指令类型集合,包括栈操作指令类型、逻辑运算指令类型、位操作指令类型、算数运算指令类型;所述步骤F中,所述用获取栈和局部变量的java类方法填充所述class文件中被移植的java指令的位置,具体为:步骤F-1l:所述java虚拟机定位到被移植的当前java类方法的位置;步骤F-12:所述java虚拟机创建当前java类方法的常量池的索引;步骤F-13:所述java虚拟机将获取栈和局部变量的java类方法与所述常量池的索引填充到被移植的当前java类方法的位置;所述步骤F中,所述用执行加密锁内虚拟机的java类方法填充所述class文件中被移植的java指令的位置,具体为:步骤F-21:所述java虚拟机定位到被移植的当前java类方法的位置;步骤F本文档来自技高网...

【技术保护点】
一种保护java程序的方法,其特征在于,包括:步骤A:java虚拟机装载class文件,并判断所述class文件是否是合法的文件,如果是,则执行步骤B,否则返回错误信息,结束;步骤B:所述java虚拟机获取所述class文件中java类方法的总个数和java类方法的起始位置,根据所述起始位置找到当前java类方法;步骤C:所述java虚拟机解析当前java类方法对应的java指令,并判断是否解析成功,如果是,则执行步骤D,否则返回错误信息,结束;步骤D:所述java虚拟机判断所述当前java类方法对应的java指令是否符合预设可移植指令条件,如果是,则将所述当前java类方法对应的java指令移植并保存到预设缓冲区中,执行步骤E,否则执行步骤G;步骤E:所述java虚拟机获取当前java类方法的最大java虚拟机栈深度和最大局部变量个数;步骤F:所述java虚拟机根据所述最大java虚拟机栈深度和最大局部变量个数,用获取栈和局部变量的java类方法、执行加密锁内虚拟机的java类方法与修改栈和局部变量的java类方法填充所述class文件中被移植的java指令的位置,执行步骤G;步骤G:所述java虚拟机判断已解析的java类方法的个数是否达到所述class文件中java类方法的总个数,如果是,则将所述预设缓冲区中的当前java类方法对应的java指令移植到加密锁内,结束,否则继续获取下一java类方法作为当前java类方法,返回执行步骤C。...

【技术特征摘要】
1.一种保护java程序的方法,其特征在于,包括: 步骤A: java虚拟机装载class文件,并判断所述class文件是否是合法的文件,如果是,则执行步骤B,否则返回错误信息,结束; 步骤B:所述java虚拟机获取所述class文件中java类方法的总个数和java类方法的起始位置,根据所述起始位置找到当前java类方法; 步骤C:所述java虚拟机解析当前java类方法对应的java指令,并判断是否解析成功,如果是,则执行步骤D,否则返回错误信息,结束; 步骤D:所述java虚拟机判断所述当前java类方法对应的java指令是否符合预设可移植指令条件,如果是,则将所述当前java类方法对应的java指令移植并保存到预设缓冲区中,执行步骤E,否则执行步骤G ; 步骤E:所述java虚拟机获取当前java类方法的最大java虚拟机栈深度和最大局部变量个数; 步骤F:所述java虚拟机根据所述最大java虚拟机栈深度和最大局部变量个数,用获取栈和局部变量的java类方法、执行加密锁内虚拟机的java类方法与修改栈和局部变量的java类方法填充所述class文件中被移植的java指令的位置,执行步骤G ; 步骤G:所述java虚拟机判断已解析的java类方法的个数是否达到所述class文件中java类方法的总个数,如果是,则将所述预设缓冲区中的当前java类方法对应的java指令移植到加密锁内,结束,否则继续获取下一 java类方法作为当前java类方法,返回执行步骤C。2.根据权利要求1所述的方法,其特征在于,所述步骤A中,所述判断所述class文件是否是合法的文件,具体为:获取并判断class文件的文件头是否为预设字符串,如果是,则表示所述class文件是合法的文件,否则表示所述class文件是不合法的文件。3.根据权利要求1所述的方法,其特征在于,所述步骤C中,所述解析当前java类方法对应的java指令,具体为: 步骤C-1:所述java虚拟机获取所述class文件中常量池的个数和常量池的起始位置; 步骤C-2:所述java虚拟机根据当前java类方法的第一成员变量和第二成员变量,从所述常量池中获取java类方法名称和java类方法描述符,并判断是否获取成功,如果是,则执行步骤C-3,否则返回错误信息,结束; 步骤C-3:所述java虚拟机根据当前java类方法的第三成员变量和第四成员变量,获取当前java类方法的附加属性,并判断是否获取成功,如果是,则执行步骤D,否则返回错误信息,结束。4.根据权利要求3所述的方法,其特征在于,所述当前java类方法的第一成员变量是对所述常量池中的java类方法名称的索引;所述当前java类方法的第二成员变量是对所述常量池中java类方法描述符的索引;所述当前java类方法的第三成员变量为当前java类方法的附加属性的个数;所述当前java类方法的第四成员变量为当前java类方法的附加属性的起始位置。5.根据权利要求3或4所述的方法,其特征在于,所述附加属性包括code属性,code属性中包括当前java类方法的 java指令和当前java类方法的java指令的长度。6.根据权利要求3所述的方法,其特征在于,所述步骤C与所述步骤D之间包括: 步骤A-1:所述java虚拟机显示class文件的当前java类方法和当前java类方法对应的java指令; 步骤B-1:所述java虚拟机判断已解析的java类方法的个数是否超过所述class文件中java类方法的总个数,如果是,则执行步骤C-1,否则将下一 java类方法作为当前java类方法,返回执行步骤C ; 步骤C-1:所述java虚拟机接收用户对显示的java类方法和java类方法对应的java指令的选择,根据所述附加属性,获取用户选择的java类方法对应的java指令的起始位置,根据所述起始位置,找到当前java类方法对应的jav...

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

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

1