浅谈:Android应用安全风险防范问题

目前Android应用开发发展的非常火爆,但在其开发的过程中依然会出现各种各样的安全性问题,作为一名合格的开发者,虽然不能保证所有的Android系统绝对的安全,但基本应该从宏观上了解应用开发中可能存在的各种安全隐患,积极采取适当的控制策略,与此同时,在实现过程中从细节上采取具体的安全措施,增强系统的防御功能。




一、代码混淆

代码混淆是最为基本的做法,至少能够让Androidapp在反编译之后不那么顺畅的阅读源码。除此之外,还可以借助ProGuard,它分为免费和收费两种,若你资金充足,不放心免费的ProGuard,可考虑使用付费的混淆方案DexGuard,除了拥有ProGuard的功能外,还包含资源混淆,字符串加密,类加密和dex文件分割等。

二、应用程序认证

认证是防范恶意程序最有效的手段之一,在理想的状态下,一个应用程序在认真之前必须要经过完整的测试与代码审查,确认其权限使用的合理性,这对于恶意软件起到了非常有利的防范作用。但不得不说的是,认证的费用有点高,程序相对也比较的负责,目前暂时还不具备广泛的实用性。

三、签名校验

Android开发里面,有一个叫二次打包,也称之为重打包,即通过反编译正版应用后,可以获得smali源码,往其中注入代码或修改相应业务逻辑后,再利用新的签名进行重新打包,并发布到应用市场去。很多无良的开发者就是通过这种方式去破解一些付费应用,往其中注入广告代码来获利,下面,天津app开发帮大家简单梳理一下重打包的基本流程:

1、正版应用使用apktool类逆向工具进行解包;

2、在其中的某一处注入smali代码;

3、利用IDE生成签名文件,再通过jarsigner进行签名;

上传应用市场;

二次打包发布到应用市场是,在应用内的关键功能入口增强校验签名的检测,若发现应用签名非正版,则强制关闭应用或者限制用户使用。加签名校验代码时,可以考虑:

1、在JNI层中加校验代码,相比在Java层的代码,JNI层的逆向难度更大;

2、如果要在Java层加校验代码,不要在一个地方暴露一段长串字符串,可以考虑将字符串打散存放在各处,这样会增加破解分析的难度;

四、防火墙

防火墙能有效的保护用户私有信息被泄露,通常,对网络连接传输的内容使用无状态或有状态的分析,可以发现是否有私密信息正被泄露,因此可以切断传输线路。由于防火墙工作在操作系统内核中,所以无法直接为外部攻击所侵害,同时防火墙可以与SE Android提供的访问控制机制协同工作,提供更高级别的保护。

五、加壳

加壳的原理是通过加密原应用的安装包中的dex文件,其主要操作方式大致如下:

1、准备要进行加壳的原应用安装包、用于做壳的安装包;

2、对原应用安装包进行拆解获取各个部分,并将dex文件进行算法加密;

3、将加密原dex和壳Apk中的dex进行组合,合并成为新的dex文件;

4、利用特制的打包工具合并生成加密后的apk;

六、外部动态加载DEX文件安全建议

1、将所需要动态加载的DEX/APK文件放置在APK内部或应用私有目录中。为了所加载的DEX/APK不被恶意代码注入,天津app开发建议将要动态加载的DEX/APK放置在APK内部;

2.、使用加密网络协议进行下载加载的DEX/APK文件并将其放置在应用私有目录。文率科技使用加密网络协议进行下载并将下载的DEX或APK放置在应用的私有目录;

3、对不可信的加载来源进行完整性校验。如果应用必须将所加载的DEX或APK放置在能被其他应用人意读写的目录中或使用没有加密的网络协议进行下载加载源,天津app开发建议对这些不可信的加载源进行完整性校验和白名单处理,以保证不被恶意代码注入。

总结:应用安全的功放本就是一个相爱相杀又相辅相成的过程,对于客户端能做到安全防范也是有限的,更多的还是要结合后台业务分析来实现相应的对抗机制。

声明:文章"浅谈:Android应用安全风险防范问题"为文率科技APP开发公司原创文章,转载请注明出处,谢谢合作!

Android APP开发资讯文章推荐阅读