基于第三方应用平台的应用安全保护机制设计

2016-03-13 14:36河北工程大学曲双学
电子世界 2016年9期
关键词:安全保护功能设计

河北工程大学 曲双学



基于第三方应用平台的应用安全保护机制设计

河北工程大学 曲双学

【摘要】入侵者会通过破解安全保护机制为第三发应用带来很大的安全风险,使得第三方应用存在着很大的漏洞,设计一种应用安全保护机制非常必要。本文从基于第三方应用平台的应用安全保护机制的功能出发,对其功能和设计进行阐述,旨在弥补当前安全保护机制的不足。

【关键词】第三方应用平台;安全保护;功能;设计

1 应用保护的基本功能

一般而言,基于当前存在着诸多应用破解的威胁,将功能实现目标按照功能实现方式差异进行分离,制定如下功能模块类型:

1.1 安装包加固及下载限制

安装包加工工作在开发者将应用上传至第三方平台后进行,该功能性模块用于实现最为核心的密钥处理和应用加固替换工作。在应用获取方面,用户仅能够获取加固后的安装包,无法获取源应用包。

1.2 注册验证管理

采用注册保护手段进行付费功能的基本保护,注册的认证与管理模块封包在加固后的so库中,其负责软件安装功能请求验证以及注册证书验证。

1.3 交互数据管理

交互数据管理主要防范用户通过数据截取改变内购等形式功能的反馈信息,通过双向验证功能规避交互数据的篡改。

1.4 基于用户系统层面的检验

考虑到应用的破解需要进行相应的权限获取及特殊运行环境,因此在应用运行管理中加入对运行权限以及系统信息的调查,主要检验root权限以及模拟器运行两种状态,扰乱破解者的破解环境构建并对破解后应用的运行环境进行限制。

2 功能设计与实现

2.1 应用加固与下载限制管理模块

应用加固与下载限制是本设计的核心部分,当应用开发者上传应用后,加固与下载限制模块将APK文件包中的密钥信息进行提取,同时生成appid和签名证书,保存在应用平台服务器数据库中,此密钥证书的保存主要用于备份和后期检测所用。随后对应用文件进行解包-加固-重封包处理,将开发者上传的应用包解压后,提取classex.dex文件,计算HMAC值,用于对应用appid以及密钥信息的加固,加固后写入so中并重新保存,保存后完成新的的apk包并使用制定签名证书打包应用,至此完成应用的平台端加固工作。

开发者提供的原始应用的密钥提取与备份。所有APK文件的的密钥信息都是储存在assest目录下的,在平台系统对应用进行安全加固时,解包并提取安装包中的assets目录下的密钥文件,读取密钥信息后采用随机生成的方式产生appid和签名证书,以上所有信息在读取和生成后录入到服务器端的对应数据库,完成原始密钥信息的备份工作。

完成原始密钥信息备份后对so进行加固替换。进行文件加固时,首先删除原有的密钥信息文件,并平台安全管理系统生成随机Hmac密钥,计算并生成摘要,将两者和密钥信息进行保护处理,最终将结果数据以及appid写入到target.so中。至此,完成apk的第一步加固,加固内容为安装包内部安全性文件的加固型替换。

so的替换主要借助linux bash脚本和二进制工具实现。具体的加固功能和实现方法需要借助target.so特有的JNI调用组件和内置的反逆向工程技术。JNI调用C(++)动态链接库,实现代码间的交互,被上层调用的JNI接口函数主要有三个:getappid()用于提取so中的appid,getEncryptedKey()用于解密so中的密钥信息以获取原始密钥,checkRegStatus()用于检测软件注册验证,检测目标为register文件,该函数解密register数据并于本机和应用信息进行对比,由此检验是否注册。

so替换完成后对target.so进行二次加固。这里采用加壳方式对so进行二次处理,再次提升应用包内部文件的安全性。至此,apk加固工作全部完成。

2.2 注册码验证与管理模块

当应用软件运行时,需要通过调用开发者内置的getEncryptedKey()方法来获得密钥,对程序运行所需的关键信息解密。而此函数在执行过程中会对应用的认证状态进行检查,如果在应用目录下未发现注册文件(名为register.dat)或注册文件认证失败,则提示用户进行注册。在应用端完成注册认证的功能由提供给开发者调用的register()方法实现。

由手机端应用向认证服务器发起注册申请:注册申请信息中包括应用的appid(在软件加固阶段写入target.so中)、应用签名信息和应用所在终端设备的信息,如imsi、手机配置信息、应用签名信息等。注册申请信息的格式为“appid+由密钥加密后的应用签名信息+由密钥加密后的手机或平板设备信息”其中应用签名信息和终端设备信息均使用从target.so获得的key加密。当认证服务器接收到认证申请后,针对人情信息进行验证:一首先根据该aPPid查询其对应的密钥(key)信息,该密钥信息在软件加固阶段被保存到服务器上。然后利用kcy信息对认证申请消息的加密部分进行解密,提取出解密后的应用签名信息和终端设备信息。最后验证该应用签名信息是否有效。最后,当申请验证通过后,认证服务器和手机端应用进行支付过程的相关操作,在支付操作完成以后,认证服务器记录该手机终端的相关注册信息,并生成一个注册文件(register.dat),该文件内容为使用密钥信息加密的相关注册信息。并将该注册文件发送到手机端。这样,target.so可以通过对此注册文件的验证来检查软件是否已完成注册。由于此注册文件中绑定了手机端的硬件信息并己加密处理,可以避免攻击者通过拷贝合法用户的注册文件来破解应用。

2.3 交互数据验证与管理模块

交互数据的修改经常发生在有内购功能的应用中,此类应用为了保证应用的收入,同时要保证较为基本的自身安全性,因此会提供内购渠道。从国内应用来看,内购渠道无非短信付费、第三方付费两类。

以内购渠道为例,一般内购完成后在客户端的体现分为两种,一种是通过软件内代币充值和使用后的增减变化,另一种是通过充值后权限开放为主。后者本身的实现方法与试用版软件技术类似,在通过应用加固处理后能够一定程度上规避这一问题。前者则还区分为两种情况:其一,应用本身需要保持与服务器的实时连接,客户端与用户功能相关的数据都是存储在应用服务器中的。其二,应用本身无需与应用服务器实时连接,该情况下应用的付费一般由第三方渠道进行,这类付费渠道本身的安全性相对较高。

只有加强交互数据的检验与管理才能更好的规避联网内购的破解,而交互数据的校验和管理主要在于上传数据的管理方面,上传管理模块功能相对简单,当应用开发者将应用开发完毕,通过使用开发者账号登录软件保护系统上传其开发的应用,在上传应用时,需填写应用本身信息,如应用是否收费应用简介等。并不是所有上传的应用都直接可以被加固和供用户下载,这需要经过软件保护系统管理人员的审核通过后才可以进行。

2.4 应用运行环境检验模块

应用运行环境检验模块的设计思路为检验应用运行的系统环境是否为正常环境,并能够调用系统系统参数和日志,进行相应的分析保护。应用环境的保护针对两个方面:

其一是模拟器环境,在这一环境下运行应用的行为很有可能为破解行为,因此环境检测在此方面的作用就在于规避破解者的非法行为。

其二是root权限检测。即在模块中实现对应用访问权限的检验控制,但应用的访问权限除了自身认证控制,就只有系统自身提供的root权限可以辨别。

通过该方法,可以首先检测系统的root权限是否已被破解,在此基础上进行相应的运行控制,当获取root权限时应用立即停止运行,以此实现对应用环境的监控。

3 总结

该设计以应用组件和平台服务协作的形式进行,应用加固时将原始应用信息封装到so中,加固后的应用通过调用动态链接库运行相应功能,从而起到反逆向工程的效果。另外将功能调用封装于so中也可以提升反编译代码阅读、修改的难度,同时密钥和验证信息的加固封装也会让破解者最后的修改封包难以实现,由此,防篡改技术也得到了较好的实现。

参考文献

[1]曾健平,邵艳洁.Android系统架构及应用程序丌发研究[J].微计算机信息,2011(09)﹕23-25.

[2]廖明华;郑力明;Android安全机制分析与解决方案初探[J].科学技术与工程,2011(26)﹕ 28-32.

猜你喜欢
安全保护功能设计
也谈诗的“功能”
瞒天过海——仿生设计萌到家
设计秀
关于非首都功能疏解的几点思考
有种设计叫而专
网络环境下公众信息安全保护对策
智能电网中通信网络安全保护和扩展策略研究
网络传输计算机证据有效保护的解决方案
刍议煤矿机械的绿色设计和制造
中西医结合治疗甲状腺功能亢进症31例