CN104102860A - 安卓平台应用程序的保护方法、运行方法、装置及系统 - Google Patents

安卓平台应用程序的保护方法、运行方法、装置及系统 Download PDF

Info

Publication number
CN104102860A
CN104102860A CN201410392716.0A CN201410392716A CN104102860A CN 104102860 A CN104102860 A CN 104102860A CN 201410392716 A CN201410392716 A CN 201410392716A CN 104102860 A CN104102860 A CN 104102860A
Authority
CN
China
Prior art keywords
application program
code
shell
processing
carried out
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201410392716.0A
Other languages
English (en)
Inventor
刘敦俊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Qihoo Technology Co Ltd
Qizhi Software Beijing Co Ltd
Original Assignee
Beijing Qihoo Technology Co Ltd
Qizhi Software Beijing Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Qihoo Technology Co Ltd, Qizhi Software Beijing Co Ltd filed Critical Beijing Qihoo Technology Co Ltd
Priority to CN201410392716.0A priority Critical patent/CN104102860A/zh
Publication of CN104102860A publication Critical patent/CN104102860A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation

Abstract

本发明是关于一种安卓平台应用程序的保护方法、运行方法、装置及系统。其中,所述保护方法包括:获取需要保护的应用程序;对所述应用程序进行分段处理,生成两个或两个以上的代码段;对所述两个或两个以上的代码段中的一个或任意多个进行段加密处理;构建壳程序;根据所述壳程序,对段加密处理后的所述两个或两个以上的代码段进行加壳处理;对所述加壳处理后生成的被保护应用程序进行壳加密处理。本发明提供的技术方案增加了应用程序的破解难度,进一步的提高了应用程序的保护强度。

Description

安卓平台应用程序的保护方法、运行方法、装置及系统
技术领域
本发明涉及一种计算机领域,特别是涉及一种安卓平台应用程序的保护方法、运行方法、装置及系统。
背景技术
随着安卓Android操作系统的快速升温,各种Android应用程序(Application,简称APP)快速出现在国内移动互联网领域中。然而由于安卓系统的开源性以及市场自身制度的不完善,越来越多的问题也浮现水面,各种APP被破解、反编译APK(Android Package,中文:安卓安装包)、二次打包问题以及用户信息泄露、被恶意扣费等时间屡见不鲜。因此,Android APP的安全以及对安卓加密保护逐渐成为人们所关注的话题。APK中至少包括可执行文件和动态链接库文件(SO文件);而SO文件一般是应用程序里面核心代码块。因此,对于很多开发者来说,对APP做加固保护,最为重要的是对SO库核心代码块的加密。
现有技术中,对软件进行保护通常是进行加壳保护。加壳保护就是在被保护软件中插入一段代码(即壳代码),并将被保护软件的入口点即软件执行的第一条指令指向壳代码,然后把被保护软件的代码和数据通过加密的方式进行保护。经过加壳处理的软件在运行时首先会进入到壳代码中,在壳代码中把被加密的原始代码还原回来,然后再跳转到被保护软件的原始的入口点继续执行。
现有技术中的软件加壳方式都有一个弱点,即加壳被保护软件运行时,在执行完壳代码跳转到被保护软件的原始入口点之后,被保护软件的所有代码和数据都暴露在内存中,通过一些工具就可以很容易的将其转储出来,导致被保护软件容易被破解。
发明内容
鉴于上述问题,提出了本发明以便于提供一种克服上述问题或者至少部分地解决上述问题的安卓平台应用程序的保护方法、运行方法、装置及系统。
依据本发明的第一个方面,提供了一种安卓平台应用程序的保护方法,包括:
获取需要保护的应用程序;
对所述应用程序进行分段处理,生成两个或两个以上的代码段;
对所述两个或两个以上的代码段中的一个或任意多个进行段加密处理;
构建壳程序;
根据所述壳程序,对段加密处理后的所述两个或两个以上的代码段进行加壳处理;
对所述加壳处理后生成的被保护应用程序进行壳加密处理。
可选的,前述的安卓平台应用程序的保护方法,所述应用程序为应用程序安装包中的动态链接库文件。
可选的,前述的安卓平台应用程序的保护方法,其中,所述对所述文件进行分段处理之前,还包括:
对所述应用程序进行数据破坏处理,以使所述数据破坏处理后的所述应用程序与所述数据破坏处理前的所述应用程序具有相同的执行行为;相应的
所述对所述应用程序进行分段处理,具体为:
对所述数据破坏处理后的所述应用程序进行分段处理。
可选的,前述的安卓平台应用程序的保护方法,其中,所述对所述应用程序进行数据破坏处理,包括:
识别所述应用程序中的有效数据信息和无效数据信息;
对所述有效数据信息进行格式处理,以将所述有效数据编译成预设自定义格式的数据信息;
对所述无效数据信息进行删除处理;
其中,所述有效数据为所述应用程序执行过程中所必须的数据,所述无效数据为所述应用程序执行过程中无需使用的数据。
可选的,前述的安卓平台应用程序的保护方法,其中,所述对所述应用程序进行分段处理,生成两个或两个以上的代码段,包括:
根据设定的保护等级参数,确定分段数量;
对所述应用程序进行分段处理,以将所述应用程序划分成所述分段数量的代码段。
可选的,前述的安卓平台应用程序的保护方法,其中,所述对所述应用程序进行分段处理之后,还包括:
根据预设的代码混淆策略,对所述两个或两个以上的代码段进行代码混淆处理;
相应的,所述的对所述两个或两个以上的代码段中的一个或任意多个进行段加密处理,具体为:
对所述代码混淆处理后的所述两个或两个以上的代码段中的一个或任意多个进行段加密处理。
可选的,前述的安卓平台应用程序的保护方法,其中,所述根据预设的代码混淆策略,对所述两个或两个以上的代码段进行代码混淆处理,包括:
根据所述预设的代码混淆策略,对所述应用程序中的各代码段进行遍历;
在所有代码段中的一个或任意多个种插入无用代码,插入所述无用代码后的所述应用程序的执行行为与源所述应用程序一致;
将所有所述代码段进行连接处理,以使所述连接处理后的所述应用程序的执行顺序与源所述应用程序的执行顺序不同。
依据本发明的第二个方面,提供了一种安卓平台被保护应用程序的运行方法,包括:
对被保护应用程序进行壳解密处理;
对解密后的所述被保护应用程序进行脱壳处理;
执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理;
其中,所述被保护应用程序中包含有两个或两个以上的代码段,且所述两个或两个以上的代码段中有一个或任意多个进行了段加密处理。
可选的,前述的安卓平台被保护应用程序的运行方法,其中,所述被保护应用程序为应用程序安装包中的动态链接库文件,相应的,所述执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理,具体为:
等待所述应用程序安装包中的可执行文件的调用;
在被调用时执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理。
可选的,前述的安卓平台被保护应用程序的运行方法,还包括:
若所述被保护应用程序进行了数据破坏处理,则根据预设的数据破坏逆规则,将被破坏的应用程序进行还原处理,以将所述应用程序还原至源所述应用程序的代码形式。
可选的,前述的安卓平台被保护应用程序的运行方法,其中,所述根据预设的数据破坏逆规则,将被破坏的应用程序进行还原处理,包括:
获取所述被保护应用程序中被删除的无效数据信息,
将所述无效数据信息添加至所述被保护应用程序的相应位置处;
根编译逆规则,将编译成预设自定义格式的数据信息逆变为编译前的格式。
可选的,前述的安卓平台被保护应用程序的运行方法,还包括:
若所述被保护应用程序进行了代码混淆处理,则所述执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理,具体为:
根据预设的代码混淆执行策略,执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理。
可选的,前述的安卓平台被保护应用程序的运行方法,其中,若所述被保护的应用程序是通过插入无用代码和连接处理实现代码混淆处理的,则所述根据预设的代码混淆执行策略,执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理,包括:
识别所述被保护应用程序中的所述无用代码;
对所述无用代码进行忽略处理;
在执行所述脱壳处理后的所述被保护应用程序的过程中,根据设定的跳转规则,跳转至所述跳转规则所指向的下一代码段,所述跳转规则中包含有所述应用程序执行过程中的所有跳转指示信息;
判断所述下一代码段是否进行了段加密处理,若是,对所述下一代码段进行段解密处理,并执行所述下一代码段,否则,执行所述下一代码段;
判断所述下一代码段是否为所述应用程序执行顺序中的最后一个执行代码段,若是,则执行完成,否则,继续根据设定的跳转规则,跳转至所述跳转规则所指向的下一代码段,直至执行完成。
依据本发明的第三个方面,提供了一种安卓平台应用程序的保护装置,包括:
获取模块,用于获取需要保护的应用程序;
分段模块,用于对所述应用程序进行分段处理,生成两个或两个以上的代码段;
段加密模块,用于对所述两个或两个以上的代码段中的一个或任意多个进行段加密处理;
加壳模块,用于构建壳程序,并根据所述壳程序,对段加密处理后的所述两个或两个以上的代码段进行加壳处理;
壳加密模块,用于对所述加壳处理后生成的被保护应用程序进行壳加密处理。
可选的,前述的安卓平台应用程序的保护装置,其中,所述应用程序为应用程序安装包中的动态链接库文件。
可选的,前述的安卓平台应用程序的保护装置,还包括:
数据破坏模块,用于对所述应用程序进行数据破坏处理,以使所述数据破坏处理后的所述应用程序与所述数据破坏处理前的所述应用程序具有相同的执行行为;相应的
所述分段模块,具体用于对所述数据破坏处理后的所述应用程序进行分段处理,生成两个或两个以上的代码段。
可选的,前述的安卓平台应用程序的保护装置,其中,所述数据破坏模块,包括:
识别单元,用于识别所述应用程序中的有效数据信息和无效数据信息;
编译单元,用于对所述有效数据信息进行格式处理,以将所述有效数据编译成预设自定义格式的数据信息;
删除单元,用于对所述无效数据信息进行删除处理;
其中,所述有效数据为所述应用程序执行过程中所必须的数据,所述无效数据为所述应用程序执行过程中无需使用的数据。
可选的,前述的安卓平台应用程序的保护装置,其中,所述分段模块,包括:
确定单元,用于根据设定的保护等级参数,确定分段数量;
分段单元,用于对所述应用程序进行分段处理,以将所述应用程序划分成所述分段数量的代码段。
可选的,前述的安卓平台应用程序的保护装置,还包括:
代码混淆模块,用于根据预设的代码混淆策略,对所述两个或两个以上的代码段进行代码混淆处理;
相应的,所述段加密模块,具体用于对所述代码混淆处理后的所述两个或两个以上的代码段中的一个或任意多个进行段加密处理。
可选的,前述的安卓平台应用程序的保护装置,其中,所述代码混淆模块,包括:
遍历单元,用于根据所述预设的代码混淆策略,对所述应用程序中的各代码段进行遍历;
插入单元,用于在所有代码段中的一个或任意多个种插入无用代码,插入所述无用代码后的所述应用程序的执行行为与源所述应用程序一致;
连接单元,用于将所有所述代码段进行连接处理,以使所述连接处理后的所述应用程序的执行顺序与源所述应用程序的执行顺序不同。
依据本发明的第四个方面,提供了一种安卓平台被保护应用程序的运行装置,包括:
壳解密模块,用于对被保护应用程序进行壳解密处理;
脱壳模块,用于对解密后的所述被保护应用程序进行脱壳处理;
执行模块,用于执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理;
其中,所述被保护应用程序中包含有两个或两个以上的代码段,且所述两个或两个以上的代码段中有一个或任意多个进行了段加密处理。
可选的,前述的安卓平台被保护应用程序的运行装置,其中,所述被保护应用程序为应用程序安装包中的动态链接库文件,相应的,
所述执行模块,具体用于:等待所述应用程序安装包中的可执行文件的调用,在被调用时执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理。
可选的,前述的安卓平台被保护应用程序的运行装置,还包括:
数据还原模块,用于当所述被保护应用程序进行了数据破坏处理时,根据预设的数据破坏逆规则,将被破坏的应用程序进行还原处理,以将所述应用程序还原至源所述应用程序的代码形式。
可选的,前述的安卓平台被保护应用程序的运行装置,其中,所述数据还原模块,包括:
获取单元,用于获取所述被保护应用程序中被删除的无效数据信息,
添加单元,用于将所述无效数据信息添加至所述被保护应用程序的相应位置处;
逆编译单元,用于根编译逆规则,将编译成预设自定义格式的数据信息逆变为编译前的格式。
可选的,前述的安卓平台被保护应用程序的运行装置,其中,所述执行模块,具体用于当所述被保护应用程序进行了代码混淆处理时,根据预设的代码混淆执行策略,执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理。
可选的,前述的安卓平台被保护应用程序的运行装置,其中,所述执行模块,具体用于当所述被保护的应用程序是通过插入无用代码和连接处理实现代码混淆处理时,
识别所述被保护应用程序中的所述无用代码;
对所述无用代码进行忽略处理;
在执行所述脱壳处理后的所述被保护应用程序的过程中,根据设定的跳转规则,跳转至所述跳转规则所指向的下一代码段,所述跳转规则中包含有所述应用程序执行过程中的所有跳转指示信息;
判断所述下一代码段是否进行了段加密处理,若是,对所述下一代码段进行段解密处理,并执行所述下一代码段,否则,执行所述下一代码段;
判断所述下一代码段是否为所述应用程序执行顺序中的最后一个执行代码段,若是,则执行完成,否则,继续根据设定的跳转规则,跳转至所述跳转规则所指向的下一代码段,直至执行完成。
依据本发明的第五个方面,提供了一种安卓平台应用程序的保护系统,包括:本发明第三个方面提供的安卓平台应用程序的保护装置以及本发明第四个方面提供的安卓平台被保护应用程序的运行装置。
借由上述技术方案,本发明实施例提供的技术方案至少具有下列优点:
本发明提供的技术方案通过对所述应用程序进行分段处理,并对分段出的代码段进行加密,然后再对所述所有代码段加壳和壳加密处理,使得破解者除需要破解出壳密码(即脱壳外),还需破解出壳内部代码段的密码,增加了应用程序的破解难度。较现有技术,本发明提供的技术方案提高了应用程序的保护强度。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了本发明实施例一提供的安卓平台应用程序的保护方法的一种实现的流程示意图;
图2示出了本发明实施例一提供的安卓平台应用程序的保护方法的另一种实现的流程示意图;
图3示出了本实施例二提供的一种安卓平台被保护应用程序的运行方法的一种实现的流程示意图;
图4示出了本实施例二提供的一种安卓平台被保护应用程序的运行方法的另一种实现的流程示意图;
图5示出了本发明实施例三提供的安卓平台应用程序的保护装置的一种实现的结构示意图;
图6示出了本发明实施例三提供的安卓平台应用程序的保护装置的另一种实现的结构示意图;
图7示出了本发明实施例四提供的安卓平台被保护应用程序的运行装置的一种实现的结构示意图;
图8示出了本发明实施例四提供的安卓平台被保护应用程序的运行装置的另一中实现的结构示意图;
图9示出了本发明实施例五提供的安卓平台应用程序的保护系统的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本发明实施例一提供的安卓平台应用程序的保护方法的流程示意图。如图1所示,本实施例提供的所述方法的执行主体可以是服务器,具体可以是安装在所述服务器端的保护装置,该保护装置包括服务侧的保护应用和客户端侧的客户端应用。用户可根据所述客户端侧应用的应用界面向服务器上传需要保护的应用程序。例如,所述客户端侧应用可以可是手机应用加固,360加固保等。本实施例一所述的方法包括:
步骤101、获取需要保护的应用程序。
在实际应用中,所述需要保护的应用程序可以是用户通过客户端应用上传至服务器的。安装在所述服务器上的安卓平台应用程序的保护装置接收用户上传的需要保护的应用程序。当然,所述应用程序也可以不是用户上传的,也可以是直接存储在所述服务器上的应用程序,所述服务器从存储区域内调取该应用程序即可。
这里需要补充的是:本实施例中所述的应用程序可以是应用程序安装包,也可以是所述应用程序安装包中的动态链接库文件(SO文件)。其中,所述应用程序安装包按各部分之间的调用关系包括有可执行文件和动态链接库文件。
步骤102、对所述应用程序进行分段处理,生成两个或两个以上的代码段。
本实施例为了进一步增大破解的难度,提高保护强度,通过本步骤对应用程序进行分段处理,以为后续对代码段进行加密处理作准备。其中,保护强度可以分成若干等级,可以根据终端性能和应用程序的重要性进行综合设定。如果终端性能较好且因应用程序较重要,可以增加该应用程序的保护强度,反之则降低保护强度。不同的保护强度可通过对应用程序划分的分段数量不同来实现,保护强度与需要划分的分段的数量成正比,即保护强度的等级越高,需要划分的代码段的数量也就可以越多。其中,所述保护强度在实际应用中可表征为保护等级参数。所述保护等级参数可以是用户通过客户端应用界面上传至服务器的,也可以是服务器内部自定义的保护等级参数。当然,所述服务器可以通过判断所述应用程序的程序复杂度和/或程序破解的难以程度,自行设置所述保护等级参数。当然,所述保护等级参数也可以是定值。
由此可知,本步骤:对所述应用程序进行分段处理,生成两个或两个以上的代码段,可采用如下步骤实现:
首先,根据设定的保护等级参数,确定分段数量。
其中,所述设定的保护等级参数可以是用户通过客户端应用界面设定并上传至服务器的,也可以是服务器根据对应用程序的分析确定的,例如分析所述应用程序的程序复杂度和/或程序破解的难以程度等等。
然后,对所述应用程序进行分段处理,以将所述应用程序划分成所述分段数量的代码段。
当然,本实施例对所述应用程序的划分可以按照执行顺序进行划分,或者可以按照应用程序的编译顺序进行划分,或者可以按照应用程序中的实现各子功能的功能单元进行划分等等。
步骤103、对所述两个或两个以上的代码段中的一个或任意多个进行段加密处理。
在实际应用中,可对所有代码段都进行段加密处理,也可对部分代码段进行加密处理。可以理解的是:段加密的代码段越多,对应用程序的保护强度就越高。另外,使用不同的加密算法也会影响应用程序的保护强度。本实施例中所述的加密算法可以是采用现有技术中已有的所有加密算法。具体的,本步骤中对所述代码段进行段加密处理的过程也可采用现有技术中已有的对应用程序加密的方法来实现。
步骤104、构建壳程序。
步骤105、根据所述壳程序,对段加密处理后的所述两个或两个以上的代码段进行加壳处理。
步骤106、对所述加壳处理后生成的被保护应用程序进行壳加密处理。
具体的,本步骤可采用如下方法实现:根据壳加密算法,生成加壳密钥,利用所述加壳密钥对所述加壳处理后生成的被保护应用程序进行壳加密。其中,所述壳加密算法可具体为:获取两个或两个以上的代码段的信息,然后,根据被加壳的两个或两个以上的代码段的信息,动态生成。其中,所述信息可以是所有代码段的字节数,也可以是部分代码段的字节数。例如,将所述被加壳的所有代码段的字节数求和,来得到所述加壳密钥。通过这种动态生成的方式,能进一步的加大破解的难度,进一步提高了对应用程序的保护强度。
本实施例提供的技术方案通过对所述应用程序进行分段处理,并对分段出的代码段进行加密,然后再对所述所有代码段加壳和壳加密处理,使得破解者除需要破解出壳密码(即脱壳外),还需破解出壳内部代码段的密码,增加了应用程序的破解难度。较现有技术,本发明提供的技术方案提高了应用程序的保护强度。
进一步的,如图2所示,上述实施例中所述的步骤:所述对所述目标库文件进行分段处理之前,还可以包括如下步骤:
步骤201、对所述目标库文件进行数据破坏处理,以使所述数据破坏处理后的所述目标库文件与所述数据破坏处理前的所述目标库文件具有相同的执行行为。
增加了上述步骤201后,相应的上述实施例中所述的步骤102、对所述应用程序进行分段处理,生成两个或两个以上的代码段,可具体表述为:
步骤102’、对所述数据破坏处理后的所述应用程序进行分段处理,生成两个或两个以上的代码段。
在实际应用中,对所述应用程序进行数据破坏处理可采用多种方法实现,只要保证数据破坏处理后的所述应用程序与所述数据破坏处理前的所述应用程序具有相同的执行行为即可。例如,只将应用程序中不影响应用程序执行行为的数据信息进行删除,如应用程序头文件中的一些信息,以使攻击者无法通过静态分析完全还原应用程序;或者,对应用程序中的所有数据信息进行格式的变换,以使攻击者无法识别出变换格式后的信息;或者结合上述两种方法,实现对应用程序进行数据破坏处理。
下面就以两种方法结合的方式为例,举例说明本步骤201的具体实现过程:
首先,识别所述应用程序中的有效数据信息和无效数据信息。
其中,所述有效数据为所述应用程序执行过程中所必须的数据,所述无效数据为所述应用程序执行过程中无需使用的数据。
然后,对所述有效数据信息进行格式处理,以将所述有效数据编译成预设自定义格式的数据信息。
最后,对所述无效数据信息进行删除处理。
本实施例通过增加上述数据破坏处理的步骤,进一步的增大了破解的难度,提高了应用程序的保护强度。
进一步的,如图2所示,上述实施例中所述的步骤102:对所述应用程序进行分段处理,生成两个或两个以上的代码段之后,还可以包括如下步骤:
步骤202、根据预设的代码混淆策略,对所述两个或两个以上的代码段进行代码混淆处理。
相应的,上述实施例一中步骤103、所述的对所述两个或两个以上的代码段中的一个或任意多个进行段加密处理,具体为:
步骤103’、对所述代码混淆处理后的所述两个或两个以上的代码段中的一个或任意多个进行段加密处理。
其中,代码混淆策略可以根据预先设置的代码混淆参数生成,代码混淆参数可以包括代码混淆强度(算法为程序增加的复杂度)和代码混淆弹性(算法抗机器攻击的能力)。
这里需要补充的是:本实施例上述步骤对两个或两个以上的代码段进行代码混淆处理采用了一种特殊的编译技术,该技术是将源程序P转换成目标程序0(P)。0(P)与P相比具有相同的外部行为,但是代码的安全性更强,对代码混淆处理的要求可以描述为:
设T是从源程序P到目标程序0(P)的一个变换,如果P与0(P)具有相同的可观测行为,并且满足一下两个条件:如果P无法中止或者以错误的状态中止,则0(P)可以中止,也可以不中止;否则0(P)必须中止,并且产生和P相同的输出结果,则称T为一个从P到0(P)的代码混淆变换。
实质上,对代码段进行代码混淆处理的方式有很多,例如,在原代码段中增加大量的跳转指令、比较指令、循环指令等。比如条件跳转和比较指令,只有当程序运行到此刻时,才能知道程序将会走向哪个分支,因此大量的条件跳转将大大干扰反汇编人员的分析。当然,添加无用代码也是一种干扰反汇编程序的手段,它会导致反汇编软件翻译出错误的反汇编代码。加无用代码的手法也比较多,一般无用代码都是一些不可能执行或者执行了也不影响程序功能的指令,它具有迷惑反汇编引擎的作用。
具体的,本实施例所述根据预设的代码混淆策略,对所述两个或两个以上的代码段进行代码混淆处理,可具体采用如下步骤实现:
步骤S1、根据所述预设的代码混淆策略,对所述应用程序中的各代码段进行遍历。
步骤S2、在所有代码段中的一个或任意多个种插入无用代码,插入所述无用代码后的所述应用程序的执行行为与源所述应用程序一致。
步骤S3、将所有所述代码段进行连接处理,以使所述连接处理后的所述应用程序的执行顺序与源所述应用程序的执行顺序不同。
实质上,对所述代码段进行连接处理就是对所述代码段进行移位和流程代码混淆的过程,以将连接处理后的所述应用程序的执行顺序与源所述应用程序的执行顺序不同。
这里需要补充的是:上述的代码混淆处理过程也可在所述应用程序分段前执行,即先对所述应用程序进行代码混淆处理,再对代码混淆处理后的所述应用程序进行分段。代码混淆处理过程可在所述数据破坏处理过程之后,这样就能避免在数据破坏处理时将代码混淆处理过程中加入的无用代码删除的情况。
如图3所示,本实施例二提供的一种安卓平台被保护应用程序的运行方法的流程示意图。本实施例二提供的所述方法,包括:
步骤301、对被保护应用程序进行壳解密处理。
步骤302、对解密后的所述被保护应用程序进行脱壳处理。
步骤303、执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理。
其中,所述被保护应用程序中包含有两个或两个以上的代码段,且所述两个或两个以上的代码段中有一个或任意多个进行了段加密处理。
同样的,基于上述实施例一中提到的:应用程序安装包至少包括可执行文件和动态链接库文件(SO文件)。本实施例中所述的应用程序可以是应用程序安装包中的动态链接库文件。相应的,
本步骤303、所述执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理,可具体为:
等待所述应用程序安装包中的可执行文件的调用;
在被调用时执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理。
本实施例提供的技术方案为采用上述实施例一提供的所述保护方法进行保护的被保护应用程序对应的运行方法。本实施例通过采用在执行过程中只有在需要执行时才进行段解密处理,使得被保护应用的所有代码和数据都不会完全暴露在内存中,进而增加了应用软件的破解难度,且提高了应用软件的保护强度。
进一步的,如图4所示,若本实施例中所述的被保护应用采用上述实施例一提供的方法,进行了数据破坏处理,则上述实施例二提供的所述方法,步骤303、执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理之前,还应该包括如下步骤:
步骤401、若所述被保护应用程序进行了数据破坏处理,则根据预设的数据破坏逆规则,将被破坏的应用程序进行还原处理,以将所述应用程序还原至源所述应用程序的代码形式。
其中,所述数据破坏逆规则即根据上述实施例一中对所述应用程序进行数据破坏处理的逆过程。若本实施例中所述被保护应用程序采用的是上述实施例一中所述的结合删除和格式变换两种方式实现的数据破坏处理,则本步骤:所述根据预设的数据破坏逆规则,将被破坏的应用程序进行还原处理,可具体采用如下方法实现:
首先,获取所述被保护应用程序中被删除的无效数据信息。
其中,所述无效数据信息可以预先存在在预设存储区中。当所述被保护应用程序需要运行时,可从所述预设存储区中获取;或者,所述无效数据信息也可是根据预设的还原规则生成的。所述还原规则可人为根据保护过程中数据破坏时的删除原则的逆过程,编译生成。
然后,将所述无效数据信息添加至所述被保护应用程序的相应位置处。
实际应用中,每一个被删除无效数据信息中都包含有其被删除前所在应用程序中的位置信息。因此在获取到所述无效数据信息后,可根据其包含的位置信息,将所述无效数据信息添加至所述被保护应用程序的相应位置处。
最后,根编译逆规则,将编译成预设自定义格式的数据信息逆变为编译前的格式。
所述编译逆规则实际上就是上述实施例一中保护过程中数据破坏时自定义格式生成过程的逆过程。因此,在上述实施例一保护过程中自定义格式生成过程一定,所述编译逆规则也就确定了。
进一步的,如图4所示,若本实施例中所述的被保护应用采用上述实施例一提供的方法,进行了代码混淆处理,则上述实施例中步骤303、所述执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理,具体为:
步骤303’、根据预设的代码混淆执行策略,执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理。
具体的,若所述被保护的应用程序是通过上述实施例一中提到的插入无用代码和连接处理实现代码混淆处理的,则所述步骤303,具体采用如下步骤实现:
首先、识别所述被保护应用程序中的所述无用代码。
然后、对所述无用代码进行忽略处理。
随后、在执行所述脱壳处理后的所述被保护应用程序的过程中,根据设定的跳转规则,跳转至所述跳转规则所指向的下一代码段,所述跳转规则中包含有所述应用程序执行过程中的所有跳转指示信息;
再后、判断所述下一代码段是否进行了段加密处理,若是,对所述下一代码段进行段解密处理,并执行所述下一代码段,否则,执行所述下一代码段;
最后、判断所述下一代码段是否为所述应用程序执行顺序中的最后一个执行代码段,若是,则执行完成,否则,继续根据设定的跳转规则,跳转至所述跳转规则所指向的下一代码段,直至执行完成。
总之,上述应用程序执行过程实际上就是将采用实施例一提供的方法进行保护的应用程序按照上述保护过程的逆过程执行即可,如本步骤中所述的预设的代码混淆执行策略就是上述实施例一提供的代码混淆处理的逆策略,也就是说上述实施例一提供的代码混淆策略一定了,本实施例中的所述代码混淆执行策略也就确定了。
需要说明的是:对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
如图5所示,本发明实施例三提供的安卓平台应用程序的保护装置的结构示意图。本实施例所述的安卓平台应用程序的保护装置可实现上述实施例一提供的所述保护方法。如图5所示,本实施例所述的保护装置包括:获取模块1、分段模块2、段加密模块3、加壳模块4及壳加密模块5。其中,所述获取模块1用于获取需要保护的应用程序。所述分段模块2用于对所述应用程序进行分段处理,生成两个或两个以上的代码段。所述段加密模块3用于对所述两个或两个以上的代码段中的一个或任意多个进行段加密处理。所述加壳模块4用于构建壳程序,并根据所述壳程序,对段加密处理后的所述两个或两个以上的代码段进行加壳处理。所述壳加密模块5用于对所述加壳处理后生成的被保护应用程序进行壳加密处理。
本实施例提供的技术方案通过对所述应用程序进行分段处理,并对分段出的代码段进行加密,然后再对所述所有代码段加壳和壳加密处理,使得破解者除需要破解出壳密码(即脱壳外),还需破解出壳内部代码段的密码,增加了应用程序的破解难度。较现有技术,本发明提供的技术方案提高了应用程序的保护强度。
其中,上述实施例中所述的所述应用程序可以是应用程序安装包中的动态链接库文件(SO文件)。
进一步的,如图6所示,上述实施例提供的所述保护装置,还可包括:数据破坏模块6。其中,所述数据破坏模块6用于对所述应用程序进行数据破坏处理,以使所述数据破坏处理后的所述应用程序与所述数据破坏处理前的所述应用程序具有相同的执行行为。相应的,上述实施例中所述的分段模块2具体用于对所述数据破坏处理后的所述应用程序进行分段处理,生成两个或两个以上的代码段。
再进一步的,上述实施例中所述的数据破坏模块可采用如下结构实现。所述数据破坏模块包括:识别单元、编译单元和删除单元。其中,所述识别单元,用于识别所述应用程序中的有效数据信息和无效数据信息。所述编译单元,用于对所述有效数据信息进行格式处理,以将所述有效数据编译成预设自定义格式的数据信息。所述删除单元,用于对所述无效数据信息进行删除处理。其中,所述有效数据为所述应用程序执行过程中所必须的数据,所述无效数据为所述应用程序执行过程中无需使用的数据。
进一步的,上述实施例中所述的分段模块可采用如下结构实现。所述分段模块包括:确定单元和分段单元。其中,所述确定单元,用于根据设定的保护等级参数,确定分段数量。所述分段单元,用于对所述应用程序进行分段处理,以将所述应用程序划分成所述分段数量的代码段。
进一步的,如图6所示,上述实施例三中所述的保护装置还可以包括:代码混淆模块7。其中,所述代码混淆模块7用于根据预设的代码混淆策略,对所述两个或两个以上的代码段进行代码混淆处理。相应的,上述实施例三中所述段加密模块,具体用于对所述代码混淆处理后的所述两个或两个以上的代码段中的一个或任意多个进行段加密处理。
具体的,所述代码混淆模块可采用如下结构实现。所述代码混淆模块包括:遍历单元、插入单元和连接单元。其中,所述遍历单元,用于根据所述预设的代码混淆策略,对所述应用程序中的各代码段进行遍历。所述插入单元,用于在所有代码段中的一个或任意多个种插入无用代码,插入所述无用代码后的所述应用程序的执行行为与源所述应用程序一致。所述连接单元,用于将所有所述代码段进行连接处理,以使所述连接处理后的所述应用程序的执行顺序与源所述应用程序的执行顺序不同。
图7所示,本发明实施例四提供的安卓平台被保护应用程序的运行装置的结构示意图。本实施例四提供的所述运行装置可执行上述实施例三提供的所述运行方法。如图7所示,本实施例四所述的运行装置包括:壳解密模块10、脱壳模块20和执行模块30。其中,所述壳解密模块10用于对被保护应用程序进行壳解密处理。所述脱壳模块20用于对解密后的所述被保护应用程序进行脱壳处理。所述执行模块30用于执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理。其中,所述被保护应用程序中包含有两个或两个以上的代码段,且所述两个或两个以上的代码段中有一个或任意多个进行了段加密处理。
本实施例通过采用在执行过程中只有在需要执行时才进行段解密处理,使得被保护应用的所有代码和数据都不会完全暴露在内存中,进而增加了应用软件的破解难度,且提高了应用软件的保护强度。
具体的,所述被保护应用程序为应用程序安装包中的动态链接库文件,相应的,上述实施例四中的所述执行模块,具体用于:等待所述应用程序安装包中的可执行文件的调用,在被调用时执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理。
进一步的,如图8所示,上述实施例四所述的运行装置还包括:数据还原模块40。所述数据还原模块40用于当所述被保护应用程序进行了数据破坏处理时,根据预设的数据破坏逆规则,将被破坏的应用程序进行还原处理,以将所述应用程序还原至源所述应用程序的代码形式。
具体的,所述数据还原模块包括:获取单元、添加单元和逆编译单元。其中,所述获取单元,用于获取所述被保护应用程序中被删除的无效数据信息。所述添加单元,用于将所述无效数据信息添加至所述被保护应用程序的相应位置处。所述逆编译单元,用于根编译逆规则,将编译成预设自定义格式的数据信息逆变为编译前的格式。
进一步的,上述实施例四所述的执行模块具体用于当所述被保护应用程序进行了代码混淆处理时,根据预设的代码混淆执行策略,执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理。
再进一步的,上述实施例四所述的执行模块具体用于当所述被保护的应用程序是通过插入无用代码和连接处理实现代码混淆处理时,
识别所述被保护应用程序中的所述无用代码;
对所述无用代码进行忽略处理;
在执行所述脱壳处理后的所述被保护应用程序的过程中,根据设定的跳转规则,跳转至所述跳转规则所指向的下一代码段,所述跳转规则中包含有所述应用程序执行过程中的所有跳转指示信息;
判断所述下一代码段是否进行了段加密处理,若是,对所述下一代码段进行段解密处理,并执行所述下一代码段,否则,执行所述下一代码段;
判断所述下一代码段是否为所述应用程序执行顺序中的最后一个执行代码段,若是,则执行完成,否则,继续根据设定的跳转规则,跳转至所述跳转规则所指向的下一代码段,直至执行完成。
如图9所示,本发明实施例五提供的安卓平台应用程序的保护系统的结构示意图。如图9所示,所述安卓平台应用程序的保护系统包括:安卓平台应用程序的保护装置100和安卓平台被保护应用程序的运行装置200。其中,所述安卓平台应用程序的保护装置包括:获取模块、分段模块、段加密模块、加壳模块及壳加密模块。其中,所述获取模块,用于获取需要保护的应用程序。所述分段模块,用于对所述应用程序进行分段处理,生成两个或两个以上的代码段。所述段加密模块,用于对所述两个或两个以上的代码段中的一个或任意多个进行段加密处理。所述加壳模块,用于构建壳程序,并根据所述壳程序,对段加密处理后的所述两个或两个以上的代码段进行加壳处理。所述壳加密模块,用于对所述加壳处理后生成的被保护应用程序进行壳加密处理。所述安卓平台被保护应用程序的运行装置包括:壳解密模块、脱壳模块和执行模块。其中,所述壳解密模块,用于对被保护应用程序进行壳解密处理。所述脱壳模块,用于对解密后的所述被保护应用程序进行脱壳处理。所述执行模块,用于执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理。其中,所述被保护应用程序中包含有两个或两个以上的代码段,且所述两个或两个以上的代码段中有一个或任意多个进行了段加密处理。
本实施例五中所述的安卓平台应用程序的保护装置可采用上述实施例三提供的所述安卓平台应用程序的保护装置,具体实现结构和原理可参见上述实施三中的相关内容,此处不再赘述。
本实施例五中所述的安卓平台被保护应用程序的运行装置可采用上述实施例四提供的所述安卓平台被保护应用程序的运行装置,具体实现结构和原理可参见上述实施四中的相关内容,此处不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
可以理解的是,上述方法及交换机中的相关特征可以相互参考。另外,上述实施例中的“第一”、“第二”等是用于区分各实施例,而并不代表各实施例的优劣。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的安卓平台应用程序的保护装置或安卓平台被保护应用程序的运行装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
本发明公开了A1、一种安卓平台应用程序的保护方法,包括:
获取需要保护的应用程序;
对所述应用程序进行分段处理,生成两个或两个以上的代码段;
对所述两个或两个以上的代码段中的一个或任意多个进行段加密处理;
构建壳程序;
根据所述壳程序,对段加密处理后的所述两个或两个以上的代码段进行加壳处理;
对所述加壳处理后生成的被保护应用程序进行壳加密处理。
A2、如A1所述的方法,所述应用程序为应用程序安装包中的动态链接库文件。
A3、如A1所述的方法,所述对所述文件进行分段处理之前,还包括:
对所述应用程序进行数据破坏处理,以使所述数据破坏处理后的所述应用程序与所述数据破坏处理前的所述应用程序具有相同的执行行为;相应的
所述对所述应用程序进行分段处理,具体为:
对所述数据破坏处理后的所述应用程序进行分段处理。
A4、如A3所述的方法,所述对所述应用程序进行数据破坏处理,包括:
识别所述应用程序中的有效数据信息和无效数据信息;
对所述有效数据信息进行格式处理,以将所述有效数据编译成预设自定义格式的数据信息;
对所述无效数据信息进行删除处理;
其中,所述有效数据为所述应用程序执行过程中所必须的数据,所述无效数据为所述应用程序执行过程中无需使用的数据。
A5、如A1~A4中任一所述的方法,所述对所述应用程序进行分段处理,生成两个或两个以上的代码段,包括:
根据设定的保护等级参数,确定分段数量;
对所述应用程序进行分段处理,以将所述应用程序划分成所述分段数量的代码段。
A6、如A1~A4中任一所述的方法,所述对所述应用程序进行分段处理之后,还包括:
根据预设的代码混淆策略,对所述两个或两个以上的代码段进行代码混淆处理;
相应的,所述的对所述两个或两个以上的代码段中的一个或任意多个进行段加密处理,具体为:
对所述代码混淆处理后的所述两个或两个以上的代码段中的一个或任意多个进行段加密处理。
A7、如A6所述的方法,所述根据预设的代码混淆策略,对所述两个或两个以上的代码段进行代码混淆处理,包括:
根据所述预设的代码混淆策略,对所述应用程序中的各代码段进行遍历;
在所有代码段中的一个或任意多个种插入无用代码,插入所述无用代码后的所述应用程序的执行行为与源所述应用程序一致;
将所有所述代码段进行连接处理,以使所述连接处理后的所述应用程序的执行顺序与源所述应用程序的执行顺序不同。
本发明还公开了B1、一种安卓平台被保护应用程序的运行方法,包括:
对被保护应用程序进行壳解密处理;
对解密后的所述被保护应用程序进行脱壳处理;
执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理;
其中,所述被保护应用程序中包含有两个或两个以上的代码段,且所述两个或两个以上的代码段中有一个或任意多个进行了段加密处理。
B2、如B1所述的方法,所述被保护应用程序为应用程序安装包中的动态链接库文件,相应的,所述执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理,具体为:
等待所述应用程序安装包中的可执行文件的调用;
在被调用时执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理。
B3、如B1所述的方法,所述执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理之前,还包括:
若所述被保护应用程序进行了数据破坏处理,则根据预设的数据破坏逆规则,将被破坏的应用程序进行还原处理,以将所述应用程序还原至源所述应用程序的代码形式。
B4、如B3所述的方法,所述根据预设的数据破坏逆规则,将被破坏的应用程序进行还原处理,包括:
获取所述被保护应用程序中被删除的无效数据信息;
将所述无效数据信息添加至所述被保护应用程序的相应位置处;
根编译逆规则,将编译成预设自定义格式的数据信息逆变为编译前的格式。
B5、如B1~B4中任一项所述的方法,还包括:
若所述被保护应用程序进行了代码混淆处理,则所述执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理,具体为:
根据预设的代码混淆执行策略,执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理。
B6、如B5所述的方法,若所述被保护的应用程序是通过插入无用代码和连接处理实现代码混淆处理的,则所述根据预设的代码混淆执行策略,执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理,包括:
识别所述被保护应用程序中的所述无用代码;
对所述无用代码进行忽略处理;
在执行所述脱壳处理后的所述被保护应用程序的过程中,根据设定的跳转规则,跳转至所述跳转规则所指向的下一代码段,所述跳转规则中包含有所述应用程序执行过程中的所有跳转指示信息;
判断所述下一代码段是否进行了段加密处理,若是,对所述下一代码段进行段解密处理,并执行所述下一代码段,否则,执行所述下一代码段;
判断所述下一代码段是否为所述应用程序执行顺序中的最后一个执行代码段,若是,则执行完成,否则,继续根据设定的跳转规则,跳转至所述跳转规则所指向的下一代码段,直至执行完成。
本发明还公开了C1、一种安卓平台应用程序的保护装置,包括:
获取模块,用于获取需要保护的应用程序;
分段模块,用于对所述应用程序进行分段处理,生成两个或两个以上的代码段;
段加密模块,用于对所述两个或两个以上的代码段中的一个或任意多个进行段加密处理;
加壳模块,用于构建壳程序,并根据所述壳程序,对段加密处理后的所述两个或两个以上的代码段进行加壳处理;
壳加密模块,用于对所述加壳处理后生成的被保护应用程序进行壳加密处理。
C2、如C1所述的装置,所述应用程序为应用程序安装包中的动态链接库文件。
C3、如C1所述的装置,还包括:
数据破坏模块,用于对所述应用程序进行数据破坏处理,以使所述数据破坏处理后的所述应用程序与所述数据破坏处理前的所述应用程序具有相同的执行行为;相应的
所述分段模块,具体用于对所述数据破坏处理后的所述应用程序进行分段处理,生成两个或两个以上的代码段。
C4、如C3所述的装置,所述数据破坏模块,包括:
识别单元,用于识别所述应用程序中的有效数据信息和无效数据信息;
编译单元,用于对所述有效数据信息进行格式处理,以将所述有效数据编译成预设自定义格式的数据信息;
删除单元,用于对所述无效数据信息进行删除处理;
其中,所述有效数据为所述应用程序执行过程中所必须的数据,所述无效数据为所述应用程序执行过程中无需使用的数据。
C5、如C1~C4中任一所述的装置,所述分段模块,包括:
确定单元,用于根据设定的保护等级参数,确定分段数量;
分段单元,用于对所述应用程序进行分段处理,以将所述应用程序划分成所述分段数量的代码段。
C6、如C1~C4中任一所述的装置,还包括:
代码混淆模块,用于根据预设的代码混淆策略,对所述两个或两个以上的代码段进行代码混淆处理;
相应的,所述段加密模块,具体用于对所述代码混淆处理后的所述两个或两个以上的代码段中的一个或任意多个进行段加密处理。
C7、如C6所述的装置,所述代码混淆模块,包括:
遍历单元,用于根据所述预设的代码混淆策略,对所述应用程序中的各代码段进行遍历;
插入单元,用于在所有代码段中的一个或任意多个种插入无用代码,插入所述无用代码后的所述应用程序的执行行为与源所述应用程序一致;
连接单元,用于将所有所述代码段进行连接处理,以使所述连接处理后的所述应用程序的执行顺序与源所述应用程序的执行顺序不同。
本发明还公开了D1、一种安卓平台被保护应用程序的运行装置,包括:
壳解密模块,用于对被保护应用程序进行壳解密处理;
脱壳模块,用于对解密后的所述被保护应用程序进行脱壳处理;
执行模块,用于执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理;
其中,所述被保护应用程序中包含有两个或两个以上的代码段,且所述两个或两个以上的代码段中有一个或任意多个进行了段加密处理。
D2、如D1所述的装置,所述被保护应用程序为应用程序安装包中的动态链接库文件,相应的,
所述执行模块,具体用于:等待所述应用程序安装包中的可执行文件的调用,在被调用时执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理。
D3、如D1所述的装置,还包括:
数据还原模块,用于当所述被保护应用程序进行了数据破坏处理时,根据预设的数据破坏逆规则,将被破坏的应用程序进行还原处理,以将所述应用程序还原至源所述应用程序的代码形式。
D4、如D3所述的方法,所述数据还原模块,包括:
获取单元,用于获取所述被保护应用程序中被删除的无效数据信息;
添加单元,用于将所述无效数据信息添加至所述被保护应用程序的相应位置处;
逆编译单元,用于根编译逆规则,将编译成预设自定义格式的数据信息逆变为编译前的格式。
D5、如D1~D4中任一项所述的方法,所述执行模块,具体用于当所述被保护应用程序进行了代码混淆处理时,根据预设的代码混淆执行策略,执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理。
D6、如D5所述的方法,所述执行模块,具体用于当所述被保护的应用程序是通过插入无用代码和连接处理实现代码混淆处理时,
识别所述被保护应用程序中的所述无用代码;
对所述无用代码进行忽略处理;
在执行所述脱壳处理后的所述被保护应用程序的过程中,根据设定的跳转规则,跳转至所述跳转规则所指向的下一代码段,所述跳转规则中包含有所述应用程序执行过程中的所有跳转指示信息;
判断所述下一代码段是否进行了段加密处理,若是,对所述下一代码段进行段解密处理,并执行所述下一代码段,否则,执行所述下一代码段;
判断所述下一代码段是否为所述应用程序执行顺序中的最后一个执行代码段,若是,则执行完成,否则,继续根据设定的跳转规则,跳转至所述跳转规则所指向的下一代码段,直至执行完成。
本发明还公开了E1、一种安卓平台应用程序的保护系统,包括:如C1~C7中任一所述的安卓平台应用程序的保护装置,以及如D1~D6中任一所述的安卓平台应用程序的运行装置。

Claims (10)

1.一种安卓平台应用程序的保护方法,其特征在于,包括:
获取需要保护的应用程序;
对所述应用程序进行分段处理,生成两个或两个以上的代码段;
对所述两个或两个以上的代码段中的一个或任意多个进行段加密处理;
构建壳程序;
根据所述壳程序,对段加密处理后的所述两个或两个以上的代码段进行加壳处理;
对所述加壳处理后生成的被保护应用程序进行壳加密处理。
2.根据权利要求1所述的方法,其特征在于,所述对所述文件进行分段处理之前,还包括:
对所述应用程序进行数据破坏处理,以使所述数据破坏处理后的所述应用程序与所述数据破坏处理前的所述应用程序具有相同的执行行为;相应的
所述对所述应用程序进行分段处理,具体为:
对所述数据破坏处理后的所述应用程序进行分段处理。
3.根据权利要求2所述的方法,其特征在于,所述对所述应用程序进行数据破坏处理,包括:
识别所述应用程序中的有效数据信息和无效数据信息;
对所述有效数据信息进行格式处理,以将所述有效数据编译成预设自定义格式的数据信息;
对所述无效数据信息进行删除处理;
其中,所述有效数据为所述应用程序执行过程中所必须的数据,所述无效数据为所述应用程序执行过程中无需使用的数据。
4.一种安卓平台被保护应用程序的运行方法,其特征在于,包括:
对被保护应用程序进行壳解密处理;
对解密后的所述被保护应用程序进行脱壳处理;
执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理;
其中,所述被保护应用程序中包含有两个或两个以上的代码段,且所述两个或两个以上的代码段中有一个或任意多个进行了段加密处理。
5.根据权利要求8所述的方法,其特征在于,所述被保护应用程序为应用程序安装包中的动态链接库文件,相应的,所述执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理,具体为:
等待所述应用程序安装包中的可执行文件的调用;
在被调用时执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理。
6.一种安卓平台应用程序的保护装置,其特征在于,包括:
获取模块,用于获取需要保护的应用程序;
分段模块,用于对所述应用程序进行分段处理,生成两个或两个以上的代码段;
段加密模块,用于对所述两个或两个以上的代码段中的一个或任意多个进行段加密处理;
加壳模块,用于构建壳程序,并根据所述壳程序,对段加密处理后的所述两个或两个以上的代码段进行加壳处理;
壳加密模块,用于对所述加壳处理后生成的被保护应用程序进行壳加密处理。
7.根据权利要求6所述的装置,其特征在于,还包括:
数据破坏模块,用于对所述应用程序进行数据破坏处理,以使所述数据破坏处理后的所述应用程序与所述数据破坏处理前的所述应用程序具有相同的执行行为;相应的
所述分段模块,具体用于对所述数据破坏处理后的所述应用程序进行分段处理,生成两个或两个以上的代码段。
8.根据权利要求7所述的装置,其特征在于,所述数据破坏模块,包括:
识别单元,用于识别所述应用程序中的有效数据信息和无效数据信息;
编译单元,用于对所述有效数据信息进行格式处理,以将所述有效数据编译成预设自定义格式的数据信息;
删除单元,用于对所述无效数据信息进行删除处理;
其中,所述有效数据为所述应用程序执行过程中所必须的数据,所述无效数据为所述应用程序执行过程中无需使用的数据。
9.一种安卓平台被保护应用程序的运行装置,其特征在于,包括:
壳解密模块,用于对被保护应用程序进行壳解密处理;
脱壳模块,用于对解密后的所述被保护应用程序进行脱壳处理;
执行模块,用于执行所述脱壳处理后的所述被保护应用程序,并在执行的过程中顺次对下一个待执行的代码段进行段解密处理;
其中,所述被保护应用程序中包含有两个或两个以上的代码段,且所述两个或两个以上的代码段中有一个或任意多个进行了段加密处理。
10.一种安卓平台应用程序的保护系统,其特征在于,包括:上述权利要求6~8中任一所述的安卓平台应用程序的保护装置,以及上述权利要求9所述的安卓平台应用程序的运行装置。
CN201410392716.0A 2014-08-11 2014-08-11 安卓平台应用程序的保护方法、运行方法、装置及系统 Pending CN104102860A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410392716.0A CN104102860A (zh) 2014-08-11 2014-08-11 安卓平台应用程序的保护方法、运行方法、装置及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410392716.0A CN104102860A (zh) 2014-08-11 2014-08-11 安卓平台应用程序的保护方法、运行方法、装置及系统

Publications (1)

Publication Number Publication Date
CN104102860A true CN104102860A (zh) 2014-10-15

Family

ID=51671004

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410392716.0A Pending CN104102860A (zh) 2014-08-11 2014-08-11 安卓平台应用程序的保护方法、运行方法、装置及系统

Country Status (1)

Country Link
CN (1) CN104102860A (zh)

Cited By (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104392181A (zh) * 2014-11-18 2015-03-04 北京奇虎科技有限公司 So文件的保护方法、装置及安卓安装包的加固方法和系统
CN105227565A (zh) * 2015-10-13 2016-01-06 北京娜迦信息科技发展有限公司 用于安卓系统的防逆向破解共享对象文件的方法和装置
CN105608391A (zh) * 2015-12-17 2016-05-25 北京奇虎科技有限公司 多elf文件保护方法及系统
CN105740708A (zh) * 2016-01-28 2016-07-06 博雅网信(北京)科技有限公司 一种基于Java反射机制的安卓应用自动脱壳方法
CN105825087A (zh) * 2016-03-16 2016-08-03 福建联迪商用设备有限公司 Elf共享库保护方法及其系统
CN106548046A (zh) * 2016-10-25 2017-03-29 北京深思数盾科技股份有限公司 一种保护代码的装置和方法
CN106570354A (zh) * 2016-10-18 2017-04-19 国家电网公司 移动应用的重构方法和装置、运行方法和装置
CN106951744A (zh) * 2017-03-15 2017-07-14 北京深思数盾科技股份有限公司 可执行程序的保护方法及装置
CN107085677A (zh) * 2017-03-29 2017-08-22 武汉斗鱼网络科技有限公司 一种Flash中防止代码被破解的方法及系统
CN107341392A (zh) * 2016-04-29 2017-11-10 腾讯科技(深圳)有限公司 Android系统中的文件脱壳方法及装置
CN107992725A (zh) * 2017-12-29 2018-05-04 北京星河星云信息技术有限公司 一种代码加密、解密方法及装置
CN109299945A (zh) * 2017-07-24 2019-02-01 上海荆虹电子科技有限公司 一种基于生物识别算法的身份验证的方法及装置
CN109889754A (zh) * 2019-03-19 2019-06-14 湖南富盟传媒有限公司 网络视频平台
CN110135129A (zh) * 2019-04-12 2019-08-16 平安科技(深圳)有限公司 代码段保护方法、装置、计算机设备和存储介质
CN110147653A (zh) * 2019-03-28 2019-08-20 江苏通付盾信息安全技术有限公司 应用程序安全加固方法及装置
WO2019184741A1 (zh) * 2018-03-29 2019-10-03 阿里巴巴集团控股有限公司 应用程序信息的存储、处理方法及装置
CN117235740A (zh) * 2023-11-10 2023-12-15 万帮数字能源股份有限公司 固件的启动方法、启动装置

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1836209A (zh) * 2003-02-11 2006-09-20 Vi实验室有限公司 用于调节计算机软件的执行的系统和方法
CN101964040A (zh) * 2010-09-10 2011-02-02 西安理工大学 一种基于PE Loader的软件加壳保护方法
CN101986326A (zh) * 2010-12-01 2011-03-16 浙江核新同花顺网络信息股份有限公司 保护软件安全的方法及装置
CN102118512A (zh) * 2011-03-28 2011-07-06 阮晓迅 一种手机应用程序防破解方法及系统
CN102298534A (zh) * 2011-09-22 2011-12-28 四川长虹电器股份有限公司 软件写入机顶盒的方法
CN102609666A (zh) * 2012-01-20 2012-07-25 飞天诚信科技股份有限公司 一种可执行程序加壳保护方法
CN102831342A (zh) * 2012-07-28 2012-12-19 北京深思洛克软件技术股份有限公司 一种提高安卓系统中应用程序保护强度的方法
CN102930204A (zh) * 2012-09-20 2013-02-13 北京深思洛克软件技术股份有限公司 基于软件保护装置的软件加壳方法、系统及软件保护方法

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1836209A (zh) * 2003-02-11 2006-09-20 Vi实验室有限公司 用于调节计算机软件的执行的系统和方法
CN101964040A (zh) * 2010-09-10 2011-02-02 西安理工大学 一种基于PE Loader的软件加壳保护方法
CN101986326A (zh) * 2010-12-01 2011-03-16 浙江核新同花顺网络信息股份有限公司 保护软件安全的方法及装置
CN102118512A (zh) * 2011-03-28 2011-07-06 阮晓迅 一种手机应用程序防破解方法及系统
CN102298534A (zh) * 2011-09-22 2011-12-28 四川长虹电器股份有限公司 软件写入机顶盒的方法
CN102609666A (zh) * 2012-01-20 2012-07-25 飞天诚信科技股份有限公司 一种可执行程序加壳保护方法
CN102831342A (zh) * 2012-07-28 2012-12-19 北京深思洛克软件技术股份有限公司 一种提高安卓系统中应用程序保护强度的方法
CN102930204A (zh) * 2012-09-20 2013-02-13 北京深思洛克软件技术股份有限公司 基于软件保护装置的软件加壳方法、系统及软件保护方法

Cited By (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104392181A (zh) * 2014-11-18 2015-03-04 北京奇虎科技有限公司 So文件的保护方法、装置及安卓安装包的加固方法和系统
CN105227565A (zh) * 2015-10-13 2016-01-06 北京娜迦信息科技发展有限公司 用于安卓系统的防逆向破解共享对象文件的方法和装置
CN105227565B (zh) * 2015-10-13 2019-02-22 北京娜迦信息科技发展有限公司 用于安卓系统的防逆向破解共享对象文件的方法和装置
CN105608391A (zh) * 2015-12-17 2016-05-25 北京奇虎科技有限公司 多elf文件保护方法及系统
CN105608391B (zh) * 2015-12-17 2019-02-26 北京奇虎科技有限公司 多elf文件保护方法及系统
CN105740708A (zh) * 2016-01-28 2016-07-06 博雅网信(北京)科技有限公司 一种基于Java反射机制的安卓应用自动脱壳方法
WO2017156962A1 (zh) * 2016-03-16 2017-09-21 福建联迪商用设备有限公司 Elf 共享库保护方法及其系统
CN105825087A (zh) * 2016-03-16 2016-08-03 福建联迪商用设备有限公司 Elf共享库保护方法及其系统
CN105825087B (zh) * 2016-03-16 2019-07-26 福建联迪商用设备有限公司 Elf共享库保护方法及其系统
CN107341392B (zh) * 2016-04-29 2019-12-06 腾讯科技(深圳)有限公司 Android系统中的文件脱壳方法及装置
CN107341392A (zh) * 2016-04-29 2017-11-10 腾讯科技(深圳)有限公司 Android系统中的文件脱壳方法及装置
CN106570354A (zh) * 2016-10-18 2017-04-19 国家电网公司 移动应用的重构方法和装置、运行方法和装置
CN106548046A (zh) * 2016-10-25 2017-03-29 北京深思数盾科技股份有限公司 一种保护代码的装置和方法
CN106951744B (zh) * 2017-03-15 2019-12-13 北京深思数盾科技股份有限公司 可执行程序的保护方法及装置
CN106951744A (zh) * 2017-03-15 2017-07-14 北京深思数盾科技股份有限公司 可执行程序的保护方法及装置
CN107085677A (zh) * 2017-03-29 2017-08-22 武汉斗鱼网络科技有限公司 一种Flash中防止代码被破解的方法及系统
CN109299945B (zh) * 2017-07-24 2020-10-09 深圳荆虹科技有限公司 一种基于生物识别算法的身份验证的方法及装置
CN109299945A (zh) * 2017-07-24 2019-02-01 上海荆虹电子科技有限公司 一种基于生物识别算法的身份验证的方法及装置
CN107992725A (zh) * 2017-12-29 2018-05-04 北京星河星云信息技术有限公司 一种代码加密、解密方法及装置
CN110321727A (zh) * 2018-03-29 2019-10-11 阿里巴巴集团控股有限公司 应用程序信息的存储、处理方法及装置
WO2019184741A1 (zh) * 2018-03-29 2019-10-03 阿里巴巴集团控股有限公司 应用程序信息的存储、处理方法及装置
US11934539B2 (en) 2018-03-29 2024-03-19 Alibaba Group Holding Limited Method and apparatus for storing and processing application program information
CN109889754A (zh) * 2019-03-19 2019-06-14 湖南富盟传媒有限公司 网络视频平台
CN110147653A (zh) * 2019-03-28 2019-08-20 江苏通付盾信息安全技术有限公司 应用程序安全加固方法及装置
CN110135129A (zh) * 2019-04-12 2019-08-16 平安科技(深圳)有限公司 代码段保护方法、装置、计算机设备和存储介质
WO2020206905A1 (zh) * 2019-04-12 2020-10-15 平安科技(深圳)有限公司 代码段保护方法、装置、计算机设备和存储介质
CN110135129B (zh) * 2019-04-12 2023-04-07 平安科技(深圳)有限公司 代码段保护方法、装置、计算机设备和存储介质
CN117235740A (zh) * 2023-11-10 2023-12-15 万帮数字能源股份有限公司 固件的启动方法、启动装置
CN117235740B (zh) * 2023-11-10 2024-03-22 万帮数字能源股份有限公司 固件的启动方法、启动装置

Similar Documents

Publication Publication Date Title
CN104102860A (zh) 安卓平台应用程序的保护方法、运行方法、装置及系统
Behera et al. Different obfuscation techniques for code protection
CN105683990B (zh) 用于保护动态库的方法和装置
CN110414261B (zh) 一种数据脱敏方法、装置、设备及可读存储介质
US10599820B2 (en) Control flow flattening for code obfuscation where the next block calculation needs run-time information
US20160321453A1 (en) Method and device for detecting malicious code in an intelligent terminal
US20170214704A1 (en) Method and device for feature extraction
CN107092518A (zh) 一种保护拟态防御系统软件层安全的编译方法
CN103761475A (zh) 检测智能终端中恶意代码的方法及装置
US20150244737A1 (en) Detecting malicious advertisements using source code analysis
US8869286B1 (en) Systems and methods for analyzing client-side storage security for internet applications
US8572747B2 (en) Policy-driven detection and verification of methods such as sanitizers and validators
CN104392151B (zh) 一种软件保护方法及系统
CN105579955A (zh) 应用控制流模型
CN108509772B (zh) 基于执行顺序和单点逻辑的源代码加固方法及装置
CN103761478A (zh) 恶意文件的判断方法及设备
EP3035228B1 (en) Code integrity protection by computing target addresses from checksums
US11119741B2 (en) Compiling device and method
EP2937803B1 (en) Control flow flattening for code obfuscation where the next block calculation needs run-time information
CN108446538B (zh) 基于状态、符号执行和单点逻辑的源代码加固方法及装置
CN108182358B (zh) 文件保护方法、装置、计算设备及计算机存储介质
CN108460253B (zh) 基于顺序、符号执行和单点逻辑的源代码加固方法及装置
CN108733990B (zh) 一种基于区块链的文件保护方法及终端设备
CN103577188A (zh) 防御跨站脚本攻击的方法及装置
CN113449330B (zh) 对Javascript加密文件进行传输的方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication

Application publication date: 20141015

RJ01 Rejection of invention patent application after publication