应用程序安装包的生成方法、应用程序的运行方法及装置与流程

文档序号:13876004阅读:232来源:国知局
应用程序安装包的生成方法、应用程序的运行方法及装置与流程

本申请涉及计算机技术领域,尤其涉及一种应用程序安装包的生成方法、应用程序的运行方法及装置。



背景技术:

随着互联网信息技术的不断发展,越来越多具有不同功能且可以应用于智能终端设备上的应用程序被开发出来,极大的丰富了人们的日常生活。这里所说的应用程序,比如,可以是计算机上的应用程序,也可以是移动终端上的应用(application,app)。

然而,随着终端应用市场的飞速发展,应用程序被山寨、被破解的问题也变得越来越严重。对于一些优秀的应用,由于缺少对源代码的保护机制,很容易就可以通过反编译的方式破解,造成应用程序代码的泄露,这就会给应用程序的开发者带来很大损失。

其中,反编译,一般是指将应用程序的指定可执行文件中包含的操作代码(operatecode,opcode)转化为应用程序的高级语言源代码。就反编译的具体实现方式而言,其通常采用的是转移内存数据(dump内存)的方式:在应用程序运行时,从内存中,dump出应用程序的指定可执行文件中的被加载到内存的操作代码,进而将所述操作代码转化为该应用程序的高级语言源代码。以安卓应用为例,这里所说的指定可执行文件一般是classes.dex文件。

如何保护应用程序的操作代码不会被反编译的方式破解,成为亟待解决的问题。



技术实现要素:

本申请实施例提供一种应用程序安装包的生成方法,用以解决应用程序安装包可能会被反编译的方式破解,而造成应用程序操作代码泄露的问题。

本申请实施例还提供一种应用程序安装包的生成装置,用以解决应用程序安装包可能会被反编译的方式破解,而造成应用程序操作代码泄露的问题。

本申请实施例提供一种应用程序的运行方法。

本申请实施例提供一种应用程序的运行装置。

本申请实施例采用下述技术方案:

一种应用程序安装包的生成方法,包括:

从应用程序第一安装包中确定出待保护的第一代码,并根据确定出的所述第一代码,生成包含所述第一代码的动态链接库文件;

生成用于调用所述生成的动态链接库文件的第二代码;

根据所述第二代码以及所述生成的动态链接库文件,生成包含所述第二代码以及所述动态链接库文件的应用程序第二安装包。

一种应用程序安装包的生成装置,包括:

动态链接库文件生成单元,用于从应用程序第一安装包中确定出待保护的第一代码,并根据分离出的所述第一代码,生成包含所述第一代码的动态链接库文件;

第二代码生成单元,用于生成用于调用所述生成的动态链接库文件的第二代码;

应用程序安装包生成单元,用于根据所述第二代码以及所述生成的动态链接库文件,生成包含所述第二代码以及所述动态链接库文件的应用程序第二安装包。

一种应用程序的运行方法,包括:

接收针对应用程序第二安装包的加载指令;所述应用程序第二安装包中包含用于调用动态链接库文件的第二代码,所述动态链接库文件,是根据所述应用程序第一安装包中待保护的第一代码生成的;

响应于所述加载指令,加载所述第二代码,以使得通过运行所述第二代码,调用所述动态链接库文件到内存中;

运行被调用到所述内存中的所述动态链接库文件。

一种应用程序的运行装置,包括:

加载指令接收单元,用于接收针对应用程序第二安装包的加载指令;所述应用程序第二安装包中包含用于调用动态链接库文件的第二代码,所述动态链接库文件,是根据所述应用程序第一安装包中待保护的第一代码生成的;

代码加载单元,用于响应于所述加载指令,加载所述第二代码,以使得通过运行所述第二代码,调用所述动态链接库文件到内存中;

运行单元,用于运行被调用到所述内存中的所述动态链接库文件。

本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:

一方面,由于根据所述第二代码以及所述生成的动态链接库文件,生成包含所述第二代码以及所述动态链接库文件的应用程序第二安装包后,第一代码存在于应用程序第二安装包的动态链接库中,因此采用反编译的方式从生成的应用程序第二安装包中无法获得第一代码,从而避免了应用程序操作代码泄露;另一方面,由于第一代码原有的功能,后续可以由第二代码调用包含所述第一代码的动态链接库文件来实现,因此保证了生成的应用程序第二安装包仍然可以实现所述第一代码的功能。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1为本申请实施例提供的一种应用程序安装包的生成方法的具体实现流程示意图;

图2为本申请实施例提供的一种应用程序安装包的生成方法的具体实现流程示意图;

图3为本申请实施例提供的一种应用程序运行方法的具体实现流程示意图;

图4为本申请实施例提供的一种应用程序安装包的生成方法以及运行应用程序安装包的具体流程示意图;

图5为本申请实施例提供的一种应用程序安装包的生成装置的具体结构示意图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

以下结合附图,详细说明本申请各实施例提供的技术方案。

实施例1

本申请实施例提供了一种应用程序安装包的生成方法,用以解决应用程序安装包可能会被反编译的方式破解,而造成应用程序操作代码泄露的问题。

本申请实施例提供的应用程序安装包的生成方法,该方法的执行主体,可以但不限于为手机、平板电脑、个人电脑(personalcomputer,pc)、智能电视以及任何可以运行应用程序的终端设备中的至少一种。此外,该方法的执行主体,也可以是服务器,例如,用于对应用程序安装包进行生成处理的服务器(可以称为应用程序安装包生成服务器),等。

为便于描述,下文以该方法的执行主体为应用程序安装包生成网站服务器为例,对该方法的实施方式进行介绍。可以理解,该方法的执行主体为应用程序生成网站服务器只是一种示例性的说明,并不应理解为对该方法的限定。

该方法的具体实现流程图如图1所示,主要包括下述步骤:

步骤11,从应用程序第一安装包中确定待保护的第一代码,并根据确定出的所述第一代码,生成包含所述第一代码的动态链接库文件;

所述应用程序的安装包(installpackage)中包括该应用程序的安装文件,运行所述安装包,可将该应用程序的安装文件保存到智能终端的存储设备(如,硬盘)上。

所述第一代码可以是指应用程序安装包中的操作代码(operatecode,opcode)。以使用安卓(android)操作系统的智能手机为例,所述第一代码可以为安卓安装包(androidpackage,apk)中的可执行文件“classes.dex文件”中的opcode。而采用反编译等应用程序安装包破解方法,就是期望获取到应用程序的opcode,进而将获取到的opcode转化为应用程序的高级语言源代码。

需要说明的是,所述应用程序的操作代码一般保存在应用程序安装包的指定文件中,以运行在安卓操作系统的安卓应用程序为例,安卓应用程序的操作代码一般保存在安卓安装包的可执行文件classes.dex文件中,则一般可以从应用程序安装包的指定文件(后文称为第一文件)中确定出待保护的第一代码。

从应用程序安装包的第一文件中确定出待保护的第一代码,具体可以包括:对所述应用程序第一安装包进行解压,获得所述应用程序第一安装包中的第一文件以及第二文件;从所述第二文件中确定所述应用程序待保护的类的名称;根据确定出的所述待保护的类的名称,从所述第一文件中确定与所述待保护的类的名称对应的代码,作为待保护的第一代码。其中,所述第二文件中保存有所述应用程序能够实现的类的名称。

步骤12,生成用于调用所述生成的动态链接库文件的第二代码;

在一种实施方式中,步骤12的具体实现方式可以为:在所述应用程序第一安装包中生成用于调用所述动态链接库文件的第二代码。

具体地,可以在所述应用程序第一安装包中通过加载重新编写(getmethodrewriter)函数,对所述应用程序第一安装包中的第一文件进行重新创建,在重新创建的过程中,可以在第一文件中生成用于调用所述动态链接库文件的第二代码,从而使得重新创建的第一文件中包含第二代码。

后续,可以通过运行所述重新创建的第一文件,来实现所述应用程序的、与所述第一文件中包含的第一代码对应的功能。具体而言,可以通过运行所述第一文件中包含的第二代码,实现调用所述动态链接库文件并运行。由于运行所述动态链接库文件,包含运行所述动态链接库文件中的第一代码,从而达到了实现第一代码对应的功能的目的。

步骤13,根据所述第二代码以及所述生成的动态链接库文件生成包含所述第二代码以及所述动态链接库文件的应用程序第二安装包。

该应用程序第二安装包,即为供用户使用的应用程序安装包。后续,可以发布应用程序第二安装包,使得用户可以根据需求下载并使用该应用程序第二安装包。具体而言,可以将应用程序第二安装包,发布到应用程序下载平台(如应用程序商城中),供用户下载使用。

通过上述执行步骤13,可以达到将所述应用程序安装包中待保护的第一代码替换为所述动态链接库文件。

需要说明的是,目前,反编译的具体实现方式,通常采用的是转移内存数据(dump内存)的方式。具体而言,由于在运行应用程序时,该应用程序的指定可执行文件(也即所述第一文件)中包括的操作代码会被加载到内存中,那么,基于该特点,反编译的具体实现方式包括:根据操作系统为运行所述中指定可执行文件分配的进程的进程号,在内存中查找与该进程号对应的存储区域;由于所述确定出的存储区域中保存的内存数据,为所述指定可执行文件中包括的操作代码,因此,将所述确定出的存储区域中保存的内存数据进行dump(比如dump到其他文件中),就可以获得所述指定可执行文件中包含的操作代码,后续,可以进一步地将所述操作代码转化为该应用程序的高级语言源代码。

而通过本申请实施例提供的上述方法可知,由于采用本申请实施例提供的方案,可以实现将待保护的第一代码替换为所述动态链接库文件,使得所述指定可执行文件中不再存在第一代码(可以相当于所述指定可执行文件中的第一代码无效),从而后续即便所述指定可执行文件中的操作代码被加载到内存中,相应的内存数据也不会包含第一代码。

此外,将应用程序第一安装包,生成为包含第二代码以及动态链接库文件的应用程序第二安装包后,原有的应用程序第一安装包中的第一代码的功能,是通过运行动态链接库文件实现的。由于操作系统为应用程序中的不同文件所分配的进程是不同的,即操作系统为所述指定可执行文件分配的进程的进程号与操作系统为所述动态链接库文件分配的进程的进程号是不同的,因此根据所述指定可执行文件的进程号确定的内存存储区域与动态链接库文件对应的内存存储区域不同,从而,在这样的情况下采用反编译的方式,将无法从所述指定可执行文件对应的内存存储区域中dump得到所述待保护的第一代码。

综上可知,采用本申请实施例提供的方案,可以避免通过反编译的方式,从所述应用程序安装包的所述指定可执行文件中获得待保护的第一代码,从而造成应用程序操作代码泄露的问题。

为了达到将应用程序安装包中待保护的第一代码替换成包含所述第一代码的动态链接库文件的目的,在一种实施方式中,步骤13的具体实现方式可以包括:根据所述第二代码以及所述生成的动态链接库文件,按照使得所述第二代码以及生成的动态链接库文件替换所述应用程序第一安装包中第一代码的方式,生成包含所述第二代码以及所述动态链接库文件的应用程序第二安装包。

具体而言,比如,在生成过程中,可以将待保护的第一代码从应用程序第一安装包中的所述第一文件中分离出来,以使得生成的第二应用程序安装包的所述第一文件中不包含第一代码。本申请实施例中,将待保护的第一代码从应用程序第一安装包中的所述第一文件中分离出来的时机,可以是在所述应用程序第一安装包中通过加载重新编写(getmethodrewriter)函数,对所述应用程序第一安装包中的第一文件进行重新创建的过程中。在该过程中,通过对getmethodrewriter函数的设置,可以使重新编写的第一文件中不再包含第一代码。

需要说明的是,本申请实施例中,为了保证使用所述动态链接库文件替换所述应用程序第一安装包中待保护的第一代码后,不影响该应用程序的运行,在一种实施方式中,生成的动态链接库文件一般满足:成功运行所述动态链接库文件得到的运行结果,与成功运行所述第一代码得到的运行结果相同。

当通过执行步骤11,生成加密后的动态链接库文件时,步骤13的具体实现方式可以包括:根据所述第二代码以及加密后的动态链接库文件生成包含所述第二代码以及所述加密后的动态链接库文件的应用程序第二安装包。

一般地,应用程序安装包中的第二文件可包括但不仅限于以下两种类型的文件:

类型1:所述第二文件为预设的配置文件;

当所述第二文件为预设的配置文件时,从所述第二文件中确定出所述待保护的类的名称,具体可以包括:将所述预设的配置文件中的类的名称确定为所述待保护的类的名称。

其中,所述预设的配置文件为根据应用程序开发人员预先设定的类,而生成的包含所述预先设定的类的名称的文件。

本申请实施例中,为了使得应用程序开发人员可以根据对于代码的保护需求,灵活设置期望保护的代码,在一种实施方式中,可以根据期望保护的代码(即待保护的第一代码)对应的类(也称期望保护的类)的名称,生成包含所述期望保护的类的名称的预设的配置文件。

为便于描述,后文将期望保护的代码对应的类,称为待保护的类。

本申请实施例中,基于保存有期望保护的类的名称的预设的配置文件,后续可以从预设的配置文件中确定出类的名称,作为待保护的类的名称。

类型2:所述第二文件为全局描述文件——manifest.xml;

当所述第二文件为全局描述manifest.xml文件时,从所述第二文件中确定出所述待保护的类的名称,具体可以包括:将所述全局描述manifest.xml文件中的组件类的名称确定为所述待保护的类的名称。

以待保护的应用程序安装包为安卓安装包(androidpackage,apk)为例,该应用程序能够实现的类的名称,往往保存在apk的androidmanifest.xml文件中,而androidmanifest.xml文件中包括的:活动(activity)组件、服务(service)组件、广播接收机(broadcastreceiver)组件以及内容提供商(contentprovider)组件,与该应用程序功能的实现密切相关。考虑到组件类与应用程序功能的实现密切相关,因而androidmanifest.xml文件中的组件类一般为应用程序开发人员期望重点保护的类,从而在本申请实施例中,可以将androidmanifest.xml文件中的组件类默认作为待保护的类,而待保护的类对应的代码(也即待保护的类的名称对应的代码),即为待保护的第一代码。

假设,以待保护的应用程序安装包为安卓安装包(androidpackage,apk)为例,该应用程序待保护的第一代码往往保存在apk的classes.dex文件中,而该应用程序能够实现的类的名称往往保存在apk的androidmanifest.xml文件中,则在一种实施方式中,从应用程序的apk的第一文件中分离出待保护的第一代码,具体可以包括:通过对所述应用程序apk的解压,获得所述apk中的androidmanifest.xml文件以及classes.dex文件;从所述androidmanifest.xml文件中确定出所述的应用程序待保护的类的名称;在所述classes.dex文件中通过加载重新编写(getmethodrewriter)函数,对所述classes.dex文件进行重新创建,在重新创建的过程中,不再将所述classes.dex文件中包含的、与待保护的类的名称对应的代码再放入重新创建的classes.dex文件中,而是存放到其他位置备用。根据存放到其他位置备用的第一代码,可以生成包含所述第一代码的动态链接库文件。

在一种实施方式中,根据第一代码生成动态链接库文件的具体实现方式,具体可以包括:将所述第一代码保存为cpp格式的文件;根据所述cpp格式的文件与用于将所述cpp格式的文件加载到内存中的加载器,生成包含所述cpp格式的文件和所述加载器的动态链接库文件。

其中,所述cpp格式的文件,即c++(cplusplus)格式的文件。所述加载器用于将所述cpp格式的文件加载到内存中,并运行所述cpp格式的文件。所述动态链接库文件为一种二进制程序文件,允许程序共享执行特殊任务所需要的操作代码以及其他资源。针对动态链接库中的操作代码(如前文所述的第一代码)的加载和运行方式而言,当操作系统需要运行某个类所对应的操作代码时,可以从动态链接库文件中调用本次需要运行的该类对应的操作代码,并将本次需要运行的该类对应的操作代码加载到内存中。类似地,当操作系统需要运行其他类所对应的操作代码时,可以从动态链接库文件中调用所述其他类对应的操作代码,并将本次需要运行的所述其他类对应的操作代码加载到内存中。

仍以待保护的应用程序安装包为安卓安装包为例,则根据确定出的第一代码生成动态链接库文件可以为so库文件。

需要说明的是,目前逆向分析(又称逆向工程)也是一种常见的应用程序破解方式。所述逆向工程是根据已经存在的产品,反向推出产品设计数据(如,应用程序的高级语言源代码)的过程。以通过逆向分析破解应用程序安装包为例,可以根据该应用程序的功能,反向推出该功能是通过应用程序安装包中的什么文件实现的,并确定这个文件中包含哪些代码,分析这个文件中所包含的代码对应的功能,进而一步步的推导出应用程序安装包中用于实现该功能的操作代码。

假设将应用程序安装包中第一文件中的操作代码被替换成了动态链接库文件,并在所述第一文件中生成用于调用动态链接库文件的第二代码,则采用逆向分析的方式,可能会实现根据所述第一文件中的所述第二代码,分析出所述第一文件中被分离出的第一代码保存在动态链接库文件中,进而可以从动态链接库文件中获得所述第一代码。

为了避免上述问题,在一种实施方式中,可以对生成的动态链接库文件进行加密处理。所述加密处理不影响终端操作系统通过加载第二代码对加密后的动态链接库文件的调用。在这种情况下,采用逆向分析的方式,从动态链接库文件中获得的操作代码为加密后的操作代码,加密后的操作代码一般为乱码,从而避免了应用程序中操作代码的泄露。

具体的,本申请实施例可以通过下述两种方式对动态链接库文件进行的加密处理,具体可以包括:

方式a:采用加壳技术,对所述动态链接库文件进行处理;

其中,所述加壳技术的原理,是指利用特殊的算法,对待加壳的文件里的数据进行压缩,且压缩后该文件的解压过程完全隐蔽,都在内存中完成。采用加壳技术对文件进行处理后,该文件中保存的代码将以加密的形式存在,从而可以比较有效地防止通过逆向分析的方式对文件的破解。

方式b:采用花指令技术,对所述动态链接库文件进行处理;

其中,花指令,一般是指无意义且不影响程序正常运行的代码。花指令技术,则是指通过在文件中保存的代码中增加花指令的方式,防止对文件的破解。

下文以应用程序安装包为apk1为例,介绍本申请实施例提供的应用程序安装包的生成方法的具体实现方式,该方法的具体实现流程如图2所述,主要包括下述步骤:

步骤a,对apk1进行解压,获得所述apk1中的androidmanifest.xml文件以及classes.dex文件;

步骤b,从所述androidmanifest.xml文件中获取待保护的类的名称;

需要说明的是,可以默认将所述androidmanifest.xml文件中的组件类作为待保护的类;或者也可以将所述akp1中包含的配置文件中的类作为待保护的类;

步骤c,从所述classes.dex文件分离出与待保护的类的名称对应的第一代码,作为待保护的代码;并在所述classes.dex文件中生成用于调用动态链接库的第二代码;

步骤d,将分离出的所述待保护的代码保存为cpp格式文件,并根据所述cpp格式的文件与用于将所述cpp格式的文件加载到内存中的加载器,生成包含所述cpp格式的文件和所述加载器的动态链接库文件(so文件);

步骤e,采用加壳技术或花指令技术,对所述动态链接库文件进处理;

步骤f,根据第二代码以及生成的动态链接库文件,生成包含所述第二代码以及所述动态链接库文件的apk2,并将所述apk2作为后续发布的、供用户下载使用的安装包。

下文以执行主体为智能手机为例,介绍一种应用程序的运行方法。

该方法的具体实现流程如图3所示,主要包括下述步骤:

步骤a:接收针对应用程序的安装包的加载指令;所述应用程序安装包中包含用于调用动态链接库文件的第二代码;

用户可以通过在应用程序的操作界面输入指定操作(如点击操作或者滑动操作)以触发针对应用程序的指定文件的加载指令,通过将所述指定文件中的代码加载到内存并运行所述代码,以实现所述应用程序的与该代码对应的功能。

以安卓应用为例,安卓应用能够实现的类所对应的代码一般保存在classes.dex文件中,则用户可以通过在安卓应用的操作界面输入指定操作(如点击操作或者滑动操作)以触发针对安卓应用的classes.dex文件的加载指令。

步骤b:响应于所述加载指令,加载所述第二代码,以使得通过运行所述第二代码,调用所述动态链接库文件到内存中;

响应于所述加载指令,智能终端的操作系统通过加载所述第二文件,并对第二文件中包含的代码进行运行,通过运行所述第二文件中包含的第二代码,可以调用所述动态链接库文件,并将所述动态链接库文件中包含的代码加载到内存中。

步骤c:运行被调用到所述内存中的所述动态链接库文件;

其中,所述动态链接库文件,是根据所述应用程序的安装包中待保护的第一代码生成的。

需要说明的是,当所述动态链接库文件为加密后的动态链接库文件时,步骤c的具体实现方式可以包括:对所述加密后的动态链接库文件进行还原处理,并运行经还原处理后的动态链接库文件。

其中,所述还原处理,可以是指对加密后的动态链接库文件进行的脱壳处理,由于如何对加密文件进行脱壳处理已经是比较成熟的相关技术,因而此处不再赘述。

以下以图4为例,具体介绍对应用程序安装包的生成方法以及运行应用程序安装包过程,如图4所示,用户a为apk1的开发人员,用户a通过工作机a对apk1的解压,获得apk1中的androidmanifest.xml文件以及classes.dex文件,从所述classes.dex文件获得待保护的第一代码;生成包含所述第一代码的动态链接库文件;并根据动态链接库文件以及所述第二代码,生成包含所述第二代码以及所述动态链接库文件的akp2,并将生成的akp2上传至服务器,供用户下载并使用。

用户b作为akp2的使用用户,用户b通过工作机b从服务器中下载生成的akp2,并通过工作机b输入针对akp2的加载指令,工作机b接收针对akp2的加载指令;响应于所述加载指令,工作机b的操作系统加载所述第二文件,并对第二文件中包含的代码进行运行,工作机b运行所述第二文件中包含的第二代码,可以调用所述动态链接库文件,并将所述动态链接库文件中包含的代码加载到内存中,进而运行被调用到所述内存中的所述动态链接库文件,工作机b通过将所述动态链接库文件中包含的待保护的第一代码加载到内存中,并运行所述加载到内存中的第一代码,以达到运行所述akp2的目的。

采用实施例1提供的应用程序安装包的生成方法,一方面,由于根据所述第二代码以及所述生成的动态链接库文件,生成包含所述第二代码以及所述动态链接库文件的应用程序第二安装包后,第一代码存在于应用程序第二安装包的动态链接库中,因此采用反编译的方式从生成的应用程序第二安装包中无法获得第一代码,从而避免了应用程序操作代码泄露;另一方面,由于第一代码原有的功能,后续可以由第二代码调用包含所述第一代码的动态链接库文件来实现,因此保证了生成的应用程序第二安装包仍然可以实现所述第一代码的功能。

实施例2

本申请实施例提供了一种应用程序安装包的生成装置,用以解决应用程序安装包可能会被反编译的方式破解,而造成应用程序操作代码泄露的问题。该装置的具体结构示意图如图5所示,包括:动态链接库文件生成单元21、第二代码生成单元22以及应用程序安装包生成单元23。

其中,动态链接库文件生成单元21,用于从应用程序第一安装包中确定待保护的第一代码,并根据确定出的所述第一代码,生成包含所述第一代码的动态链接库文件;

第二代码生成单元22,用于生成用于调用所述生成的动态链接库文件的第二代码;

应用程序安装包生成单元23,用于根据所述第二代码以及所述生成的动态链接库文件,生成包含所述第二代码以及所述动态链接库文件的应用程序第二安装包。

在一种实施方式中,应用程序安装包生成单元23,用于根据所述第二代码以及所述生成的动态链接库文件,按照使得所述第二代码以及生成的动态链接库文件替换所述应用程序第一安装包中第一代码的方式,生成包含所述第二代码以及所述动态链接库文件的应用程序第二安装包。

在一种实施方式中,动态链接库文件生成单元21,用于:将确定出的所述第一代码保存为符合指定的计算机编程语言格式的文件;根据所述符合指定的计算机编程语言格式的文件与加载器,生成包含所述符合指定的计算机编程语言格式的文件和所述加载器的动态链接库文件,其中,所述加载器用于将所述符合指定的计算机编程语言格式的文件加载到内存中。

在一种实施方式中,动态链接库文件生成单元21,用于:对所述应用程序第一安装包进行解压,获得所述应用程序第一安装包中的第一文件以及第三文件;所述第三文件中保存有所述应用程序能够实现的类的名称;从所述第三文件中确定所述待保护的类的名称;根据确定出的所述待保护的类的名称,从所述第一文件中确定与所述待保护的类的名称对应的代码。

在一种实施方式中,动态链接库文件生成单元21,用于:当所述第二文件为全局描述manifest.xml文件时,将所述全局描述manifest.xml文件中的所有组件类的名称确定为所述待保护的类的名称;当所述第二文件为预设的配置文件时,将所述预设的配置文件中的所有类的名称确定为所述待保护的类的名称;所述预设的配置文件为根据预先设定的类,生成的包含所述预先设定的类的名称的文件。

在一种实施方式中,第二代码生成单元22,用于:在所述应用程序第一安装包中生成用于调用所述动态链接库文件的第二代码。

在一种实施方式中,应用程序安装包生成单元23,用于:对所述动态链接库文件进行加密处理,得到加密后的动态链接库文件;根据所述第二代码以及加密后的动态链接库文件,生成包含所述第二代码以及所述加密后的动态链接库文件的应用程序第二安装包。

在一种实施方式中,对所述动态链接库文件进行加密处理,包括下述至少一种:采用加壳技术,对所述动态链接库文件进行处理;采用花指令技术,对所述动态链接库文件进行处理。

本申请实施例还提供了一种应用程序的运行装置,用以实现对加密后的应用程序的运行,包括:加载指令接收单元31、代码加载单元32以及运行单元33。

其中,加载指令接收单元31,用于接收针对应用程序第二安装包的加载指令;所述应用程序第二安装包中包含用于调用动态链接库文件的第二代码,所述动态链接库文件,是根据应用程序第一安装包中待保护的第一代码生成的;

代码加载单元32,用于响应于所述加载指令,加载所述第二代码,以使得所述通过运行所述第二代码,调用所述动态链接库文件到内存中;

运行单元33,用于运行被调用到所述内存中的所述动态链接库文件。

在一种实施方式中,运行单元,用于:当所述动态链接库文件为加密后的动态链接库文件时,对所述加密后的动态链接库文件进行还原处理,并运行经还原处理后的动态链接库文件。

采用实施例2提供的应用程序安装包的生成装置,一方面,由于根据所述第二代码以及所述生成的动态链接库文件,生成包含所述第二代码以及所述动态链接库文件的应用程序第二安装包后,第一代码存在于应用程序第二安装包的动态链接库中,因此采用反编译的方式从生成的应用程序第二安装包中无法获得第一代码,从而避免了应用程序操作代码泄露;另一方面,由于第一代码原有的功能,后续可以由第二代码调用包含所述第一代码的动态链接库文件来实现,因此保证了生成的应用程序第二安装包仍然可以实现所述第一代码的功能。

实施例3

为了解决应用程序安装包可能会被反编译的方式破解,而造成应用程序操作代码泄露的问题。本申请实施例提供了一种应用程序安装包的生成装置。所述应用程序安装包的生成装置可以包括处理器以及存储器等。

其中,所述存储器用于存储程序指令;所述处理器,耦合到所述存储器,用于读取所述存储器存储的程序指令,并作为响应,执行如下操作:从应用程序第一安装包中确定待保护的第一代码,并根据确定出的所述第一代码,生成包含所述第一代码的动态链接库文件;生成用于调用所述生成的动态链接库文件的第二代码;根据所述第二代码以及所述生成的动态链接库文件,生成包含所述第二代码以及所述动态链接库文件的应用程序第二安装包。

在一种实施方式中,所述处理器,用于根据所述第二代码以及所述生成的动态链接库文件,按照使得所述第二代码以及生成的动态链接库文件替换所述应用程序第一安装包中第一代码的方式,生成包含所述第二代码以及所述动态链接库文件的应用程序第二安装包。

在一种实施方式中,所述处理器,用于将确定出的所述第一代码保存为符合指定的计算机编程语言格式的文件;根据所述符合指定的计算机编程语言格式的文件与加载器,生成包含所述符合指定的计算机编程语言格式的文件和所述加载器的动态链接库文件,其中,所述加载器用于将所述符合指定的计算机编程语言格式的文件加载到内存中。

在一种实施方式中,所述处理器,用于对所述应用程序第一安装包进行解压,获得所述应用程序第一安装包中的第一文件以及第二文件;所述第二文件中保存有所述应用程序能够实现的类的名称;从所述第二文件中确定所述待保护的类的名称;根据确定出的所述待保护的类的名称,从所述第一文件中确定与所述待保护的类的名称对应的代码,作为待保护的第一代码。

在一种实施方式中,所述处理器,用于当所述第二文件为全局描述文件时,将所述全局描述文件中的组件类的名称确定为所述待保护的类的名称;当所述第二文件为预设的配置文件时,将所述预设的配置文件中的类的名称确定为所述待保护的类的名称;所述预设的配置文件为根据预先设定的类,生成的包含所述预先设定的类的名称的文件。

在一种实施方式中,所述处理器,用于在所述应用程序第一安装包中生成用于调用所述动态链接库文件的第二代码。

在一种实施方式中,所述处理器,用于对所述动态链接库文件进行加密处理,得到加密后的动态链接库文件;根据所述第二代码以及加密后的动态链接库文件,生成包含所述第二代码以及所述加密后的动态链接库文件的应用程序第二安装包。

在一种实施方式中,所述处理器,用于采用加壳技术,对所述动态链接库文件进行处理;采用花指令技术,对所述动态链接库文件进行处理。

本申请还提供了一种应用程序的运行装置,该装置,比如可以是智能手机或平板电脑等。所述应用程序的运行装置可以包括处理器以及存储器等。

其中,所述存储器用于存储程序指令;所述处理器,耦合到所述存储器,用于读取所述存储器存储的程序指令,并作为响应,执行如下操作:接收针对应用程序第二安装包的加载指令;所述应用程序第二安装包中包含用于调用动态链接库文件的第二代码,所述动态链接库文件,是根据应用程序第一安装包中待保护的第一代码生成的;响应于所述加载指令,加载所述第二代码,以使得通过运行所述第二代码,调用所述动态链接库文件到内存中;运行被调用到所述内存中的所述动态链接库文件。

在一种实施方式中,所述处理器,用于当所述动态链接库文件为加密后的动态链接库文件时,对所述加密后的动态链接库文件进行还原处理,并运行经还原处理后的动态链接库文件。

采用本申请实施例提供的应用程序安装包生成方法,一方面,由于根据所述第二代码以及所述生成的动态链接库文件,生成包含所述第二代码以及所述动态链接库文件的应用程序第二安装包后,第一代码存在于应用程序第二安装包的动态链接库中,因此采用反编译的方式从生成的应用程序第二安装包中无法获得第一代码,从而避免了应用程序操作代码泄露;另一方面,由于第一代码原有的功能,后续可以由第二代码调用包含所述第一代码的动态链接库文件来实现,因此保证了生成的应用程序第二安装包仍然可以实现所述第一代码的功能。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1