应用防破解方法和装置的制造方法_3

文档序号:9524433阅读:来源:国知局
一虚拟机指令转换为第二虚拟机指令,分别生成未被转换的第一虚拟机指令对应的Class文件以及第二虚拟机指令对应的Class文件。最后,可以通过Dex文件格式转换工具将Class文件转换成Dex文件,将安卓应用在运行时所需的资源文件和Dex文件进行打包,最终生成APK (Android Package,安卓安装包)文件。从而使得用户通过该APK文件安装应用后,在应用运行时,即执行Dex文件时,执行的虚拟机指令为第一虚拟机、第二虚拟机指令。从而使得即使破解程序获取全部加载在内存中的应用的源代码对应的虚拟机指令,由于无法确定第一虚拟机指令、第二虚拟机指令的对应关系,而无法对第一虚拟机指令、第二虚拟机指令进行区分,从而使得破解程序无法恢复出应用的源代码。
[0042]在本实施例的一些可选的实现方式中,还包括:在基于第一虚拟机指令中未被转换的第一虚拟机指令与第二虚拟机指令,生成应用对应的可执行文件之后,将可执行文件与第二虚拟机的源代码进行打包,生成应用对应的安装包文件。
[0043]在本实施例中,在将部分第一虚拟机指令转化为第二虚拟机指令之后,可以将包含有未被转换的第一虚拟机指令、第二虚拟机指令的可执行文件与第二虚拟机的源代码进行打包,生成应用对应的安装包文件。以应用为由Java代码编写的安卓应用为例,可以将Dex文件与第二虚拟机的源代码进行打包,生成APK文件。从而当用户下载APK文件安装应用时,可以同时安装第二虚拟机,然后在应用运行时,由第二虚拟机执行Dex文件中的第二虚拟机指令。
[0044]请参考图4,其示出了根据本申请的应用防破解方法的另一个实施例的流程400。本实施例所提供的应用防破解方法可以由图1中的终端设备101、102、103或服务器105执行。该方法包括以下步骤:
[0045]步骤401,获取应用对应的被第一虚拟机解析的第一虚拟机指令。
[0046]在本实施例中,第一虚拟机指令基于对应用的源代码进行编译生成,第一虚拟机为解析第一虚拟机指令以生成机器指令的虚拟机。例如,当应用的源代码为Java代码时,第一虚拟机指令可以为由Java编译器对Java代码进行编译后生成的Java字节码,相应地,第一虚拟机可以为Java虚拟机。
[0047]步骤402,选取第一虚拟机指令中部分第一虚拟机指令,将部分第一虚拟机指令进行编码生成第二虚拟机指令。
[0048]在本实施例中,在获取应用的第一虚拟机指令之后,可以选取第一虚拟机指令中部分第一虚拟机指令。以第一虚拟机指令为Java字节码,第一虚拟机为Java虚拟机为例。在Java虚拟机规范中,Java字节码设置于Class文件中,因此,选取第一虚拟机指令中部分第一虚拟机指令可以为选取Class文件中的方法代码即与Class文件中定义的方法对应的Java字节码,从而将与Class文件中定义的方法对应的Java字节码作为部分第一虚拟机指令。
[0049]在本实施例中,可以采用以下方式将选取出的部分第一虚拟机指令转换为第二虚拟机指令:提取部分第一虚拟机指令中的操作码与操作数;以第二虚拟机指令对应的预设指令格式对操作码与操作数进行编码,生成第二虚拟机指令。在本实施例中,可以预先设置第二虚拟机指令对应的预设指令格式,该第二虚拟机指令对应的预设指令格式可以定义有操作码、操作数等的长度以及在第二虚拟机指令中位置,然后可以将从第一虚拟机指令中提取出的操作码、操作数转换为预设指令格式中定义的长度,以及将转换后的操作码、操作数设置于预设指令格式中的相应地的位置上,从而将选取出的部分第一虚拟机指令转换为第二虚拟机指令。
[0050]在本实施例的一些可选的实现方式中,还包括:设置操作码与操作数在第二虚拟机指令中对应的字段的长度,基于字段的长度,调整预设指令格式。在本实施例中,还可以预先设置操作码与操作数在第二虚拟机指令中对应的字段的长度,从而实现在将第一虚拟机指令转换为第二虚拟机指令的过程中,随机设置第二虚拟机指令的指令格式,实现随机产生第二虚拟机指令。然后,可以将包含有该操作码与操作数的第一虚拟机指令转换为随机生成的第二虚拟机指令,从而实现第一虚拟机指令与第二虚拟机指令的动态映射,进一步提升安全性。
[0051]步骤403,基于第一虚拟机指令中未被转换的第一虚拟机指令与第二虚拟机指令,生成应用对应的可执行文件。
[0052]在本实施例中,可以基于第一虚拟机指令中未被转换的第一虚拟机指令与第二虚拟机指令,生成应用对应的可执行文件,以使得可执行文件被执行时,由第一虚拟机、第二虚拟机分别执行未被转换的第一虚拟机指令、第二虚拟机指令。在本实施例中,还可以将可执行文件与第二虚拟机的源代码进行打包,生成应用对应的安装包文件。以应用为由Java代码编写的安卓应用为例,可以将Dex文件与第二虚拟机的源代码进行打包,生成APK文件。从而当用户下载APK文件安装应用时,可以同时安装第二虚拟机,然后在运行应用时,由第二虚拟机执行Dex文件中的第二虚拟机指令。
[0053]请参考图5,其示出了根据本申请的应用防破解装置的一个实施例的结构示意图。装置500包括:获取单元501,处理单元502,生成单元503。其中,获取单元501配置用于获取应用对应的被第一虚拟机解析的第一虚拟机指令,第一虚拟机指令基于对应用的源代码进行编译生成,第一虚拟机为解析第一虚拟机指令以生成机器指令的虚拟机;处理单元502配置用于选取第一虚拟机指令中部分第一虚拟机指令,以及将部分第一虚拟机指令转换为被第二虚拟机解析的第二虚拟机指令,第二虚拟机为解析第二虚拟机指令生成机器指令的虚拟机;生成单元503配置用于基于第一虚拟机指令中未被转换的第一虚拟机指令与第二虚拟机指令,生成应用对应的可执行文件,以使得可执行文件被执行时,由第一虚拟机、第二虚拟机分别执行未被转换的第一虚拟机指令、第二虚拟机指令。
[0054]在本实施例的一些可选的实现方式中,第一虚拟机、第二虚拟机均为Java虚拟机,第一虚拟机指令为Java字节码。
[0055]在本实施例的一些可选的实现方式中,装置500还包括:安装包生成单元(未示出),配置用于在基于第一虚拟机指令中未被转换的第一虚拟机指令与第二虚拟机指令,生成应用对应的可执行文件之后,将可执行文件与第二虚拟机的源代码进行打包,生成应用对应的安装包文件。
[0056]在本实施例的一些可选的实现方式中,处理单元502包括:第一转换子单元(未示出),配置用于基于第一虚拟机指令与第二虚拟机指令的对应关系表,将部分第一虚拟机指令转换为第二虚拟机指令。
[0057]在本实施例的一些可选的实现方式中,处理单元502包括:提取子单元(未示出),配置用于提取部分第一虚拟机指令中的操作码与操作数;第二转换子单元(未示出),配置用于以第二虚拟机指令对应的预设指令格式对操作码与操作数进行编码,生成第二虚拟机指令。
[0058]在本实施例的一些可选的实现方式中,装置500还包括:调整单元(未示出),配置用于设置操作码与操作数在第二虚拟机指令中对应的字段的长度,基于字段的长度,调整预设指令格式。
[0059]图6示出了适于用来实现本申请实施例的终端设备或服务器的计算机系统的结构示意图。如图6所示,计算机系统600包括中央处理单元(CPU)601,其可以根据存储在只读存储器(ROM) 602中的程序或者从存储部分608加载到随机访问存储器(RAM) 603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有系统600操作所需的各种程序和数据。CPU60UR0M 602以及RAM603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
[0060]以下部件连接至I/O接口 605:包括键盘、鼠标等的输入部分606 ;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分607 ;包括硬盘等的存储部分608 ;以及包括诸如LAN卡、调制解调器等的网络接口卡的通
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1