用于移动应用保护的系统和方法
【专利说明】用于移动应用保护的系统和方法
[0001]相关申请的交叉引用
[0002]本公开内容要求对2013年7月17日提交的美国临时专利申请N0.61/847,203的优先权以及来自该美国临时专利申请的权益,它的全文通过弓I用并入本文。
技术领域
[0003]本专利文件中所描述的技术一般性地涉及移动设备,并且更特别地涉及移动应用保护。
【背景技术】
[0004]移动设备(例如,智能电话)经常能够支持各种各样的应用(即,应用程序)来丰富用户体验。虚拟机(VM)通常对应于计算机的一种软件实施方式,该软件实施方式在任意平台上以相同方式提供用于执行一个或多个应用的独立编程环境,并且抽象去除底层的硬件或操作系统(OS)的细节。使用在移动设备中的VM可以包括:例如,Java虚拟机(JVM)、安卓的Dalvik VM、由苹果的iPhone操作系统(1S)所使用的低级虚拟机(LLVM)、等等。VM可以执行到字节代码的编译以克服具体硬件或OS的限制,在应用的实际操作期间解译字节代码,以及执行该应用。为移动设备所开发的应用经常分布在应用包中,应用包包含用以运行应用的元素,诸如程序代码、资源、资产(assets)、证书和清单。例如,对于安卓智能电话,应用包对应于其文件名以apk”结尾的应用包文件(APK文件)。
【发明内容】
[0005]根据本文所描述的教导,提供了系统和方法以用于移动应用保护。接收与应用相关联的可执行代码。至少部分地基于该可执行代码来生成加密的代码和包装器(wrapper)代码。该加密的代码能够至少部分地基于该包装器代码而被解密。为移动设备生成包括该加密的代码和该包装器代码的应用包。
[0006]在一个实施例中,用于保护用于移动设备的应用的系统包括:加密模块和包生成器。该加密模块被配置为:接收与应用相关联的可执行代码,并且至少部分地基于该可执行代码来生成加密的代码和包装器代码。该加密的代码能够至少部分地基于该包装器代码而被解密。该包生成器被配置为:为移动设备生成包括该加密的代码和该包装器代码的应用包。
[0007]在另一个实施例中,用于保护用于移动设备的应用的系统包括:一个或多个数据处理器和机器可读存储介质。该存储介质以用于命令这些数据处理器以执行某些操作的指令来编码。接收与应用相关联的可执行代码。至少部分地基于该可执行代码来生成加密的代码和包装器代码。该加密的代码能够至少部分地基于该包装器代码而被解密。为移动设备生成包括该加密的代码和该包装器代码的应用包。
【附图说明】
[0008]图1描绘了一个示例图,该示例图示出了用于移动设备的应用的示例打包流程。
[0009]图2描绘了一个示例图,该示例图示出了应用包的部分加密。
[0010]图3描绘了一个示例图,该示例图示出了用于移动设备的应用的示例打包流程。
[0011]图4描绘了一个示例图,该示例图示出了用于移动设备的应用的另一个示例打包流程。
[0012]图5描绘了一个示例图,该示例图示出了应用包的签名校验。
[0013]图6描绘了一个示例图,该示例图示出了应用包的散列值校验。
[0014]图7描绘了用于保护用于移动设备的应用的示例流程图。
【具体实施方式】
[0015]图1描绘了一个示例图,该示例图示出了针对用于移动设备的应用的示例打包流程。如图1中所示出的,应用102被编译并且打包到应用包104中,应用包104然后被分发给一个或多个移动设备106。具体地说,应用102使用安卓软件开发套件(SDK)以Java语言而写成。在编译和打包期间,Java代码首先被编译为采用Java字节代码格式的类文件。接着,这些类文件被转换为采用Dalvik字节代码格式的DEX文件,其中Dalvik字节代码与用于安卓的Dalvik VM的本机格式相对应。应用包(例如,APK文件)104包括清单文件(例如,AndroidManifest.xml)、可执行代码(例如,classes, dex文件)、资源(例如,resources, arse文件)、未编译的资源、等等。
[0016]应用包104能够经常容易被反编译和篡改。恶意软件可能被插入到应用包104中。当被篡改的应用包104在移动设备106上被运行时,恶意操作可能在后台执行而引起对移动设备106的危害。因此,保护应用包104免于被篡改是重要的。
[0017]图2描绘了一个示例图,该示例图示出了应用包的部分加密。如图2中所示出的,原始应用包202被部分地加密以生成新的应用包204。具体地说,与用于移动设备的应用相关联的可执行代码206 (例如,classes, dex文件)被转换为两个文件-加密的代码210 (例如,加密的DEX文件)和包装器代码208 (例如,classes, dex’文件)。
[0018]在一些实施例中,包装器代码208不包括用于执行应用的功能的基本逻辑代码。替代地,基本逻辑代码被加密并且成为加密的代码210的一部分。包装器代码208被用来辅助对加密的代码210的解密以及调用基本逻辑代码。本机库代码212被用来支持包装器代码208 (例如,classes, dex’文件)加载加密的代码210 (例如,通过本机安全类加载器)以及解密目标移动设备的存储器中的加密的代码210。
[0019]在某些实施例中,新的应用包204包括META-1NF目录214,META-1NF目录214可以包含清单文件(例如,“MANIFEST.MF”)、证书(例如,“CERT.RSA”)、以及资源的列表(例如,“CERT.SF”)。另外,新的应用包204包括附加清单文件216 (例如,AndroidManifest.xml),附加清单文件216描述了名称、版本、访问权限、以及用于该应用的参考库文件。新的应用包204可以包括其他文件218,诸如包含对于处理器的软件层是特定的经编译的代码的“lib”目录、包含经预编译的资源的“resources, arse”文件、包含未被编译到“resources.arse”文件中的资源的“res”目录、以及包含应用资产的“资产”目录。
[0020]图3描绘了一个示例图,该示例图示出了针对用于移动设备的应用的示例打包流程。如图3中所示出的,应用302被编译并且打包到原始应用包304中,并且原始应用包304被部分地加密以生成新的应用包310,新的应用包310然后被分发给一个或多个移动设备312。加密组件308执行对原始应用包304的部分加密,并且包生成器306生成新的应用包310。例如,原始应用包304和新的应用包310分别包括与原始应用包202和新的应用包204相同的组件。
[0021]具体地说,加密组件308将可执行代码314(例如,classes, dex文件)转换为加密的代码316 (例如,加密的DEX文件)和包装器代码318 (例如,classes, dex’文件)。包装器代码318不包括用于执行应用308的功能的基本逻辑代码,并且基本逻辑代码包含在加密的代码316中。本机库代码320被用来支持包装器代码318加载加密的代码316以及解密移动设备312的存储器中的加密的代码316。例如,移动设备312包括移动设备仿真器。
[0022]如图4中所