当前位置: 首页 > 专利查询>耶德托公司专利>正文

用于混淆虚拟机上的应用程序的执行的方法、装置以及计算机可读介质制造方法及图纸

技术编号:15342872 阅读:84 留言:0更新日期:2017-05-17 00:17
一种用于混淆虚拟机(VM)上的应用程序的执行的装置、计算机可读介质以及计算机实现方法包括接收对应于自定义VM的自定义VM定义,至少部分地基于自定义VM定义从应用程序源代码生成自定义应用程序字节码,自定义应用程序字节码被配置成在自定义VM上运行,至少部分地基于自定义VM定义生成自定义VM源代码,用一个或多个目标系统编译器来编译自定义VM源代码以生成自定义VM的一个或多个实例,自定义VM的一个或多个实例被配置成在一个或多个目标系统上运行,以及将自定义应用程序字节码和自定义VM的一个或多个实例打包到可安装应用程序中。

【技术实现步骤摘要】
【国外来华专利技术】用于混淆虚拟机上的应用程序的执行的方法、装置以及计算机可读介质
技术介绍
软件应用程序常常要求某些适应性以便适合于在不同平台上的执行。修改软件以在不同平台上运行的过程称为“移植”并要求每个硬件平台的理解。CPU、操作系统、图形用户界面或标准库中的差别可能要求对软件代码的显著改变,并且可能要求编译器或链接器来生成用于每个不同平台的新的可执行代码。结果,保持应用程序在许多看起来接近的平台上的可移植性可能是困难的任务。过程虚拟机(VM)使得软件开发者能够专注于单个“虚拟机”平台,从而使得开发者能够保持软件跨多个平台的可移植性,所述多个平台中的每一个可以运行虚拟机的一个版本。在图1A中图示出典型的VM开发流程。如图中所示,在生成应用程序二进制代码103的VM编译器上编译应用程序源代码101。应用程序二进制代码103可以被视为虚拟机代码,并且包含指令,所述指令然后如在104处所示被VM解释并执行。某些众所周知的虚拟机是Java虚拟机(JVM)或公共语言运行时。在图1B中示出了用于Java虚拟机的虚拟机开发流程。源代码111被JVM编译器编译而生成在JVM上可执行的一组指令,也称为Java字节码113,因为可执行代码中的每个指令的尺寸是一个字节。然后在JVM114上执行字节码,JVM114解释并执行字节码中的指令。虚拟机应用程序有效地隐藏所有平台差异,因此仅单个应用程序(虚拟机本身)需要适应于所有平台。这对其中竞争导致大范围的计算平台差异的诸如移动电话和平台计算机之类的移动设备特别有用。VM还可以与数字TV内容相组合地使用,如在美国专利申请公开US2004/0133794A1和US2008/0101604A1中所述。诸如JVM之类的许多虚拟机利用即时编译(JIT),其是在程序的执行期间——在运行时——而不是在执行之前完成的编译。JIT编译器可以分许多区段(或全部地)读取字节码,并动态地将其编译成机器语言,因此程序可以更快速地运行。代码可以在即将被执行时被编译(因此得名“即时”),并且然后被高速缓存且在稍后被再使用而不需要被重新编译。虽然虚拟机的使用可能导致性能损失,但即时编译器优化在大多数情况下使得VM与本地执行相比能够实现可接受的性能。JIT编译的一个实施方式是首先具有应用程序源代码到字节码(虚拟机代码)的提前(AOT)编译,称为字节码编译,并且然后具有到机器代码的JIT编译(动态编译)。图1C示出了执行字节码121的JVM122中功能组件中的某些。类加载器加载用于Java应用程序的特定类的Java字节码,并且在将控制转移给由VM解释器和JIT编译器形成的执行功能元件之前验证字节码完整性。存储器管理器模块控制对数据结构的访问并实现动态存储器功能。JavaAPI和运行时间库为Java应用程序提供了使用公共库函数并访问本地计算环境中的其它资源的能力。所有这些功能的集合常常称为Java运行时环境(JRE)。图1D示出了用于执行字节码131的JRE132的示意图。用JRE,Java应用程序可以实现本地应用程序可实现的任何功能。在某些情况下,仅使用在JRE中支持的特征来实现某些特征是困难或麻烦的。对于那些特征而言,Java本地接口(JNI)提供对接到本地应用程序(例如编译C或C++应用程序)的能力。图1E图示出用于JNI的示意图,其是执行字节码141并与操作系统144、硬件145以及本地应用程序143对接的JRE142的一部分。AndroidTM是主要针对诸如智能电话和平板计算机之类的触摸屏移动设备设计的众所周知的操作系统。Android应用程序包文件(APK)是用来将应用软件和中间件分发并安装到Android操作系统上的文件格式。为了产生APK文件,首先编译用于Android的程序,并且然后将其部分中的所有封装成一个文件。这保持该程序的字节码(诸如.dex文件)、资源、资产、证书以及清单文件中的所有,并且APK文件是基于Java档案文件(JAR)文件格式的ZIP文件格式化的包。APK文件是通常包含以下文件和文件夹的档案文件:•META-INF目录,包含:○MANIFEST.MF:清单文件,○CERT.RSA:应用程序的证书,○CERT.SF:MANIFEST.MF文件中的对应行的资源列表和SHA-1摘要,•lib:包含处理器的软件层特定的编译代码的目录,该目录被分离成在其内部的更多目录:○armeabi:仅用于所有基于ARM的处理器的编译代码,○armeabi-v7a:仅用于所有基于ARMv7及以上的处理器的编译代码,○x86:仅用于x86处理器的编译代码,○mips:仅用于MIPS处理器的编译代码,•res:包含未被编译成resources.arsc的资源的目录,•assets:包含应用程序资产的目录,其可以被AssetManager检索,•AndroidManifest.xml:附加Android清单文件,描述用于应用程序的名称、版本、访问权限、参考库文件。此文件可采取Android二进制XML,其可以被用诸如AXMLPrinter2、apktool或Androguard之类的工具转换成人类可读的明文XML,•classes.dex:以可被Dalvik虚拟机理解的dex文件格式编译的类,以及•resources.arsc:包含预编译资源(诸如例如,二进制XML)的文件。“classes.dex”文件是APK中的最重要文件。每个APK正好具有一个“classes.dex”文件。上述列表显示整个程序的Java代码被包含在classes.dex文件中。由于可移植性原因,用于Android设备的程序通常用Java来编写并编译成字节码(其被包含在.class文件中)。该编译字节码然后被从Java虚拟机兼容的.class文件转换成Dalvik兼容的.dex(Dalvik可执行)文件以使得能够安装在移动设备上。Java字节码(即.class文件)是表示Java虚拟机执行的指令的二进制格式。图1F图示出基于JavaVM指令集且包括三个指令151、152和153的三行Java字节码150的示例。左侧的数字指示用于每个指令的字节地址。例如,第一指令151在字节号0处,第二指令152在字节号3处,并且第三指令153在字节号4处。某些指令可获取操作数。例如,第一指令“sipush”151将操作数150所指示的短值推送到栈上。由于该操作数占用两个字节(字节1和2),所以下一指令152在字节3处开始。遗憾的是,存在于Java源代码文件中的大量信息常常将被包含在字节码中。这诸如通过将指令与特定行的源代码相关的“LineNumberTable”和用来验证变量类型的“StackMapTable”而包括关于类、方法、字段以及源代码的信息。诸如反编译器之类的逆向工程工具受益于此附加嵌入式信息而增加了反编译源代码的输出质量。用于对抗逆向工程的一个技术是软件混淆。软件混淆技术可以使得对受保护的软件应用进行逆向工程非常难。然而,高度的混淆导致显著的性能损失。这特别地适用于在虚拟机(其本身引入性能损失)中操作的软件应用程序。由软件混淆和在虚拟机上的执行引起的组合的性能损失可能难以在诸如移动设备之类的资源有限平台中克服。因此,软件混淆保护的程度常常受本文档来自技高网...
用于混淆虚拟机上的应用程序的执行的方法、装置以及计算机可读介质

【技术保护点】
一种由一个或多个计算设备执行的用于混淆虚拟机(VM)上的应用程序的执行的方法,该方法包括:由所述一个或多个计算设备中的至少一个接收对应于自定义VM的自定义VM定义;由所述一个或多个计算设备中的至少一个至少部分地基于所述自定义VM定义从应用程序源代码生成自定义应用程序字节码,其中,所述自定义应用程序字节码被配置成在所述自定义VM上运行;由所述一个或多个计算设备中的至少一个至少部分地基于所述自定义VM定义而生成自定义VM源代码;由所述一个或多个计算设备中的至少一个用一个或多个目标系统编译器来编译所述自定义VM源代码以生成所述自定义VM的一个或多个实例,其中,所述自定义VM的所述一个或多个实例被配置成在一个或多个目标系统上运行;以及由所述一个或多个计算设备中的至少一个将所述自定义应用程序字节码和所述自定义VM的所述一个或多个实例打包到可安装应用程序中。

【技术特征摘要】
【国外来华专利技术】1.一种由一个或多个计算设备执行的用于混淆虚拟机(VM)上的应用程序的执行的方法,该方法包括:由所述一个或多个计算设备中的至少一个接收对应于自定义VM的自定义VM定义;由所述一个或多个计算设备中的至少一个至少部分地基于所述自定义VM定义从应用程序源代码生成自定义应用程序字节码,其中,所述自定义应用程序字节码被配置成在所述自定义VM上运行;由所述一个或多个计算设备中的至少一个至少部分地基于所述自定义VM定义而生成自定义VM源代码;由所述一个或多个计算设备中的至少一个用一个或多个目标系统编译器来编译所述自定义VM源代码以生成所述自定义VM的一个或多个实例,其中,所述自定义VM的所述一个或多个实例被配置成在一个或多个目标系统上运行;以及由所述一个或多个计算设备中的至少一个将所述自定义应用程序字节码和所述自定义VM的所述一个或多个实例打包到可安装应用程序中。2.一种用于混淆虚拟机(VM)上的应用程序的执行的装置,该装置包括:一个或多个处理器;以及一个或多个存储器,其被操作耦合到所述一个或多个处理器中的至少一个并且具有存储于其上的指令,所述指令在被所述一个或多个处理器中的至少一个执行时引起所述一个或多个处理器中的至少一个:接收对应于自定义VM的自定义VM定义;至少部分地基于所述自定义VM定义从应用程序源代码生成自定义应用程序字节码,其中,所述自定义应用程序字节码被配置成在所述自定义VM上运行;至少部分地基于所述自定义VM定义生成自定义VM源代码;用一个或多个目标系统编译器来编译所述自定义VM源代码以生成所述自定义VM的一个或多个实例,其中,所述自定义VM的所述一个或多个实例被配置成在一个或多个目标系统上运行;以及将所述自定义应用程序字节码和所述自定义VM的所述一个或多个实例打包到可安装应用程序中。3.根据权利要求2所述的装置,其中,在被所述一个或多个处理器中的至少一个执行时引起所述一个或多个处理器中的至少一个从应用程序源代码生成自定义应用程序字节码的指令还引起所述一个或多个处理器中的至少一个:将所述自定义VM定义转换成自定义VM描述;以及使用VM编译器将所述应用程序源代码编译成自定义应用程序字节码,其中,所述VM编译器至少部分地基于所述自定义VM描述生成所述自定义应用程序字节码。4.存储计算机可读指令的至少一个非暂时性计算机可读介质,所述计算机可读指令在被一个或多个计算设备执行时引起所述一个或多个计算设备中的至少一个:接收对应于自定义VM的自定义VM定义;至少部分地基于所述自定义VM定义从应用程序源代码生成自定义应用程序字节码,其中,所述自定义应用程序字节码被配置成在所述自定义VM上运行;至少部分地基于所述自定义VM定义生成自定义VM源代码;用一个或多个目标系统编译器来编译所述自定义VM源代码以生成所述自定义VM的一个或多个实例,其中,所述自定义VM的所述一个或多个实例被配置成在一个或多个目标系统上运行;以及将所述自定义应用程序字节码和所述自定义VM的所述一个或多个实例打包到可安装应用程序中。5.根据权利要求4所述的至少一个非暂时性计算机可读介质,其中,在被所述一个或多个计算设备中的至少一个执行时引起所述一个或多个计算设备中的至少一个从应用程序源代码生成自定义应用程序字节码的指令还引起所述一个或多个计算设备中的至少一个:将所述自定义VM定义转换成自定义VM描述;以及使用VM编译器将所述应用程序源代码编译成自定义应用程序字节码,其中,所述VM编译器至少部...

【专利技术属性】
技术研发人员:Y李W契S刘T陈
申请(专利权)人:耶德托公司
类型:发明
国别省市:荷兰,NL

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

1