一种基于代码碎片化的Android应用程序加壳保护方法及装置的制造方法

文档序号:9432938阅读:211来源:国知局
一种基于代码碎片化的Android应用程序加壳保护方法及装置的制造方法
【技术领域】
[0001] 本发明属于计算机软件安全领域,具体涉及一种基于代码碎片化的Android应用 程序加壳保护方法。
【背景技术】
[0002] 近年来,随着Android智能设备的流行和普及,市面上出现了各种各样的Android 应用程序以满足用户的需要。然而,由于该平台自身的开放性、应用市场的低门槛以及其应 用程序自身的结构特性,Android应用程序所面临的安全问题日益增加,应用程序被破解、 逆向、盗版、二次打包等问题屡见不鲜,其中二次打包的问题尤为严重。研究表明,大部分的 恶意应用都是通过将合法的应用进行二次打包的而产生的。
[0003] 为了解决Android应用程序所面临的这些问题,不少研究者提出了各种各样的应 对措施,包括:①二次打包及恶意应用检测技术,目前很多二次打包检测都是基于应用程序 相似度来进行的,包括通过模糊哈希技术,生成功能视图关系图、程序依赖关系图,嵌入水 印等方法来检测二次打包应用。DroidRanger通过结合基于权限的行为指纹以及基于启发 式的过滤框架来检测恶意应用。Drebin通过结合静态分析和机器学习的技术在智能设备上 直接检测恶意应用,提供了一种轻量级的恶意应用检测方法。虽然这些检测技术大都能够 有效地检测出二次打包应用或恶意应用,但是检测技术作为一种事后响应措施,不能够第 一时间为应用提供主动的防护。②代码混淆技术,Google和一些其他商家提出了 Proguard 和Dexguard的混淆方法。但是,混淆只能够在一定程度上增加逆向攻击、破解的难度,不能 够有效地阻止有经验的攻击者通过人工分析的方式达到他的目的。③加壳保护技术,壳作 为一种有效的软件保护技术,近几年来,也被用于Android应用程序的保护,如梆梆加固, 360加固保等都是目前国内Android加壳系统的典型代表。但是,同早期的x86平台上的加 壳系统一样,目前的Android加壳系统也都是将应用程序的可执行文件以完整的形式进行 加壳的,导致了易被从内存中窃取的威胁,一旦窃取到完整的可执行文件,攻击者就可以继 续执行他所希望的任何攻击。

【发明内容】

[0004] 针对上述现有应用程序保护技术存在的缺陷和不足,本发明的目的在于,提供一 种新的基于代码碎片化的可执行文件加壳保护方法。该方法根据将Android应用程序的可 执行文件以完整形式进行加壳所导致的易被从内存中窃取的威胁的特点,提出了基于代码 碎片化的加壳保护方法来增加攻击难度与成本,保护强度高,普遍性好。
[0005] 为了实现上述目标,本发明采取如下的技术解决方案:
[0006] -种基于代码碎片化的Android应用程序加壳保护方法,包括以下步骤:
[0007] 步骤1,从待保护的Android应用程序中提取可执行文件;
[0008] 步骤2,从待保护的Android应用程序中提取共享库文件、资源文件以及配置信 息;
[0009] 步骤3,根据步骤1提取出的可执行文件的结构,对可执行文件进行代码分片,然 后将各代码片分别进行加密;
[0010] 步骤4,为待保护的应用程序建立新的应用程序包,作为最终保护后应用的程序 包;将加密后的各代码片以及步骤2中提取的共享库文件、资源文件导入到该新的应用程 序包中,并在其配置文件中添加提取的配置信息;
[0011] 步骤5,对加密后的各代码片进行解密并分别映射到相互独立的内存空间中;
[0012] 步骤6,对解密映射到内存区域中的各代码片进行修复,使这些代码片重组为可执 行文件;
[0013] 步骤7,对修复后的可执行文件进行运行环境的准备;
[0014] 步骤8,重构Android应用程序安装包。
[0015] 进一步地,所述的步骤3的具体内容包括:
[0016] 步骤3. 1,根据待保护可执行文件的结构,确定代码分片方案;
[0017] 步骤3. 2,确定要分离的各部分代码片的文件偏移;
[0018] 步骤3. 3,将各部分的代码片内容分别读取到独立的文件中;
[0019] 步骤3. 4,依据低性能消耗原则,使用对称加密算法对各代码片内容进行加密。
[0020] 进一步地,所述的步骤4的具体内容包括:
[0021] 步骤4. 1,为待保护的应用程序建立新的应用程序包,将加密后的各代码段拷贝到 新的应用程序包中的assets目录下;若应用程序中包含本地库,则将库文件拷贝到新的应 用程序包中的libs/armeabi目录下;
[0022] 步骤4. 2,将步骤2中提取的资源文件合并至新的应用程序包中;
[0023] 步骤4. 3,将步骤2提取出的配置信息,包括待保护应用程序的App I i cat ion 类名、各组件的配置信息、权限声明在保护后应用程序的配置文件中进行添加,其中, Application类名以Meta-data的形式进行保存;各组件的配置信息以及权限声明作为保 护后应用的组件以及权限直接在保护后应用的配置文件中进行配置和声明。
[0024] 进一步地,所述的步骤5的具体过程包括:
[0025] 步骤5. 1,根据加密后各代码片对应的文件大小确定出各代码片所需的空间大 小;
[0026] 步骤5. 2,为各代码片分配内存空间;
[0027] 步骤5. 3,解密各代码片,并将解密后的数据分别直接映射到所述的内存空间中。
[0028] 进一步地,所述的步骤6的具体过程包括:
[0029] 步骤6. 1,根据可执行文件的文件格式,确定可执行文件中有哪些部分记录了偏移 值,这些偏移值就是需要修复的内容;
[0030] 步骤6. 2,根据每一个偏移值所指的结构所在的代码片确定该偏移值的增量;
[0031] 步骤6. 3,为每一处所记录的偏移值增加对应的增量,并回填到相应位置。
[0032] -种实现如上述方法的装置,包括依次连接的可执行文件提取模块、信息提取模 块、代码分片加密模块、应用程序包建立模块、代码片解密映射模块、代码片修复模块、环境 准备模块和重构程序模块,其中各模块分别实现前述步骤1至步骤8中所述的内容。
[0033] 本发明与现有技术相比,其优点如下:
[0034] 1.保护强度高,被保护应用程序的可执行文件在其整个生命周期中,始终以碎片 化形式存在于进程内存中,大大降低了完整的可执行文件被攻击者窃取到的可能性,也就 极大地增加了应用程序被逆向、破解、二次打包等的难度;
[0035] 2.考虑到移动设备自身的资源限制以及对性能的高要求,本方案提出的代码碎片 化加壳的方法不涉及到动态加壳以及解壳的技术,但是达到了和x86平台上的动态加解壳 技术基本相同的保护效果;
[0036] 3.通过分片多少的动态调节可以平衡保护强度和性能开销。
【附图说明】
[0037] 图1是本发明方法的整体流程图;
[0038] 图2是可执行文件的文件组成结构的一种示例;
[0039] 图3是一个应用程序经过本发明保护前后的包结构对比图;
[0040] 图4是各代码片的解密及映射过程;
[0041] 图5是本发明装置的结构连接示意图;
【具体实施方式】
[0042] 如图1所示,本发明的基于代码碎片化的Android应用程序加壳保护方法,包括以 下步骤:
[0043] 步骤1,从待保护的Android应用程序中提取可执行文件;
[0044] Android应用程序是一个ZIP格式的压缩包,
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1