一种基于so文件加壳的Android平台应用软件保护方法技术

技术编号:16428165 阅读:93 留言:0更新日期:2017-10-21 23:24
本发明专利技术提出了一种基于so文件加壳的Android平台应用软件保护方法,在该方法中,对dex文件的解密和动态加载操作都放在受保护so文件里,首先对受保护so文件中的函数进行非对称加密后,再对整个受保护so文件进行非对称加密,其两个密钥都存放在服务器中,结合了服务器验证技术保证了源代码的安全性。其次对so壳文件中与section相关的字段置为随机数,加大了静态反编译的难度,同时对受保护so文件的加载期间相关校验字段置0,加大了内存dump攻击的难度。最后so壳文件作为自定义Linker对受保护so文件进行加载,加载完成后,对自身和受保护so文件的Program Header全部置0以防止内存dump攻击和修改系统Linker的攻击。

A Android platform application software protection method based on so paper

The invention provides a Android platform application software protection method based on so paper, in this method, decryption and dynamic loading operations on the DEX file on the protected so file, first of all to the protected function in the so file for non symmetric encryption, then the entire protected so file non symmetric encryption, the two keys are stored in the server, with the server authentication technology to ensure the safety of the source code. The field is associated with the section so file in the shell for the random number, increase the static decompilation difficulty, at the same time during the loading of the protected so file related check field is set to 0, increased the difficulty of the attack of dump memory. The so shell file as the custom Linker loaded on protected so files loaded on their own, and protected so files Program Header all set 0 to prevent memory dump attacks and Linker attacks to modify the system.

【技术实现步骤摘要】
一种基于so文件加壳的Android平台应用软件保护方法
本专利技术涉及软件信息安全研究领域,特别涉及一种基于so文件加壳的Android平台应用软件保护方法。
技术介绍
Android系统是Google于2007年11月推出的基于Linux、开放源码的智能手机操作系统。该系统自推出以来,以其开源的特性席卷了全球的移动智能终端市场,得到大批开发者以及许多厂商的支持,已经逐步成为了移动终端最普及的操作系统。虽然Android平台采用了多层次的安全保护机制,但由于Android平台自身的缺陷,使用易于反编译的Java语言,其软件仍然受到来自各方面的威胁,其中最重要的威胁便是逆向攻击。即通过逆向工程破解软件的关键部位,从而获取软件信息或实施一系列恶意攻击。逆向Android软件的一般步骤是:首先是对其进行反编译,然后阅读反汇编代码,如果有必要还会对其进行动态调试,找到突破口后注入或直接修改反汇编代码,最后重新编译软件进行测试。处于Java层的apk应用极容易被逆向从而得到Java源代码,而Native层的原生程序具有较高的安全性,同时直接和CPU打交道,不仅逆向难度大,而且程序的性能得到提高。由于Native层的so文件难被静态反编译,所以针对so文件的攻击大多是动态调试和内存dump分析,甚至可以通过修改系统Linker来实现对so文件的自动化攻击从而获得解密的数据。
技术实现思路
为了解决上述存在的问题,本专利技术提出了一种基于so文件加壳的Android平台应用软件保护方法,该方法修改so壳文件和对受保护so文件的关键函数进行加密,同时so壳文件作为自定义Linker加载受保护so文件,不仅能够抵抗so壳文件的静态反编译,而且加大了受保护so文件的动态分析难度,另外结合远程服务器验证保证了源代码不被篡改,从而达到了保护Android应用程序的目的。本专利技术使用的一种基于so文件加壳的Android平台应用软件保护方法主要分为加壳和解壳两个过程,具体包括下面的步骤:(1)找到受保护so文件中的函数使用密钥进行非对称加密,密钥放在服务器;(2)对受保护so文件修改后,使用密钥对受保护so文件进行非对称加密,密钥保存在服务器;(3)把经过上述加密后的受保护so文件嵌入到so壳文件的尾部;(4)对so壳文件进行修改;(5)程序运行时,由系统Linker加载so壳文件后,把控制权移交给so壳文件;(6)服务器返回密钥,so壳文件对受保护so文件进行解密;(7)so壳文件模仿系统Linker对受保护so文件进行加载,从服务器返回密钥对受保护so文件的函数进行解密,加载完成后,修改so壳文件和受保护so文件;(8)受保护so文件执行解密与动态加载dex文件的函数,将控制权移交给源程序。在步骤(1)中,受保护so文件中先实现了动态加载与解密dex文件的逻辑,对其函数加密的算法是AES;在步骤(2)中,先对加载受保护so文件期间的相关检验字段置为0后再进行加密,对其加密的算法是AES;在步骤(3)中,so壳文件实现Linker操作和解密so文件的逻辑;在步骤(4)中,主要操作是对so壳文件中与section相关的字段置为随机数;在步骤(5)中,程序运行时保证系统Linker最先加载的是so壳文件;在步骤(6)中,由so壳文件剥离出加密的受保护so文件,再对其进行解密和函数解密;在步骤(7)中,将so壳文件作为自定义Linker加载解密后的受保护so文件时跳过验证文件操作,同时加载完成后对so壳文件和受保护so文件的Programheader全部置为0;在步骤(8)中,受保护so文件解密后先获得了liddvm.so库中的openDexFile、getClassNameList和defineClass(defineClassNative)的函数指针实现动态加载功能。本专利技术与现有技术相比,具有如下优点和有益效果:现有的Android应用程序保护技术存在so文件容易被动态分析或加密算法过于简单等问题,本专利技术具有下面的优点:1.传统的加密方法是受保护so文件嵌入壳文件中,由系统Linker进行加载链接,攻击者甚至能通过修改的系统Linker实现自动化脱壳。由so壳文件模仿系统Linker对受保护so文件进行加载,能有效地防止修改系统Linker攻击的方式。2.由于so文件难被静态反编译,所以对so文件的主要攻击方式是动态分析,其最常见的攻击手段是在内存中dump出so文件。本专利技术设计的方法中,对so壳文件进行文件结构修改防止静态反编译,在so壳文件加载受保护so文件前后,对so壳文件和so文件进行修改,从而使攻击者无法通过关键字在内存中获取so文件的地址和使动态调试工具无法解析so文件。3.对受保护so文件的关键函数和整个受保护so文件进行AES加密,两个密钥放在服务器中,攻击者很难通过服务器获取密钥,保证了so文件的源代码安全。附图说明图1为对Android应用程序中的so文件进行加壳的流程图。图2为本专利技术的取得liddvm.so的函数指针流程图。图3为当Android应用程序运行时so文件进行解壳的流程图。图4为加载so文件过程示意图。具体实施方式下面结合实施例及附图对本专利技术作进一步详细的描述,但本专利技术的实施方式不限于此。本专利技术提供了基于so文件加壳的Android平台应用软件保护方法,其中加壳过程主要在计算机端进行,图1是加壳的流程图,具体步骤如下:(1)先实现受保护so文件中的函数,主要包括实现动态加载的三个自定义函数和解密dex文件,其中实现动态加载的三个自定义函数主要是取得对应liddvm.so库中的openDexFile、getClassNameList和defineClass(defineClassNative)的函数指针,图2是取得函数指针的流程图。通过哈希符号表找到这四个函数名后,对函数的区域使用AES算法加密,其AES密钥放在服务器中。(2)在系统Linker对so文件的加载期间,会对so文件进行校验,使用so壳文件代替系统Linker,并不会对so文件进行校验,而是直接进行装载工作。若是攻击者使用系统Linker加载已经经过加固的so文件,必然会使校验ELF文件失败从而导致无法进行装载。同时,攻击者在对so文件进行动态分析的时候,会在内存中搜索相关so文件的相关字段确定so文件的位置,从而dump下完整的so文件。在经过(1)的函数加密后。本文把e_ident[16](文件标识)、e_type(文件类型)、e_machine(体系结构类型)、e_version(文件版本)、e_flag(文件相关属性)检验相关字段全部置为0,之后使用AES算法加密受保护so文件的二进制流,其AES密钥上传到服务器。(3)从so文件的链接和执行视图来看,so文件被装载时,使用的是执行视图,与链接视图无关,故与section相关的字段e_shoff、e_shentsize、e_shnum和e_shstrndx是可以修改的,同时由于so文件被加载的时候,设定的跳转地址是动态链接器的地址,所以e_entry也是可以修改的。为了使so壳文件达到静态反编译的目的,将so壳文件中的e_entry、e_shoff、e_shentsize、本文档来自技高网...
一种基于so文件加壳的Android平台应用软件保护方法

【技术保护点】
一种基于so文件加壳的Android平台应用软件保护方法,其特征在于,所述方法包括以下步骤:A、加密过程(1)对受保护so文件动态加载dex文件;(2)对受保护so文件及其函数进行非对称加密,并将密钥上传到服务器;(3)对受保护so文件和so壳文件进行修改;(4)受保护so文件加密后,将其密文嵌入到so壳文件尾部,然后将so壳文件作为自定义Linker替代系统Linker对受保护so文件进行加载;B、解密过程(5)程序运行时,so壳文件首先对受保护so文件使用从服务器返回的密钥进行解密,接着作为Linker运行和对受保护so文件中的函数使用服务器返回的密钥进行解密,加载完成后,对自身和受保护so文件进行修改;(6)受保护so文件对dex文件进行解密后在Native层动态加载其dex文件。

【技术特征摘要】
1.一种基于so文件加壳的Android平台应用软件保护方法,其特征在于,所述方法包括以下步骤:A、加密过程(1)对受保护so文件动态加载dex文件;(2)对受保护so文件及其函数进行非对称加密,并将密钥上传到服务器;(3)对受保护so文件和so壳文件进行修改;(4)受保护so文件加密后,将其密文嵌入到so壳文件尾部,然后将so壳文件作为自定义Linker替代系统Linker对受保护so文件进行加载;B、解密过程(5)程序运行时,so壳文件首先对受保护so文件使用从服务器返回的密钥进行解密,接着作为Linker运行和对受保护so文件中的函数使用服务器返回的密钥进行解密,加载完成后,对自身和受保护so文件进行修改;(6)受保护so文件对dex文件进行解密后在Native层动态加载其dex文件。2.如权利要求1所述的方法,其特征在于,在步骤(2)中,先对加载受保护so文件期间的相关检验字段置为0后再进行加密,对其加密的算法是AES算法。3.如权利要求2所述的方法,其特征在于,在...

【专利技术属性】
技术研发人员:凌捷林擎宇谢锐周喨罗玉龚怡
申请(专利权)人:广东工业大学
类型:发明
国别省市:广东,44

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

1