赞
踩
随着应用的发展,应用的安全也变的越来越重要,有些不法分子开始反编译或者劫持一些app源码。甚至有人通过截图然后做识别,获取别人内容。我们在处理时应该如何去保护我们的应用呢?接下来我们可以分析一下,一些场景,的用途
在系统中,已提供防止截屏的标识,我们只需要加进去即可
这个只能防止一个页面被截屏,如果需要所有页面,可以放在基类(父类)中,子类可以通过参数来配置
通过IDE的截屏也会报错。
录屏也是黑屏。
SharedPreferences这个类,在Android中用的比较多,是用来存储临时数据的,但是这个类存储的数据以xml文件落在文件夹里。所有,只要root设备后,找到该文件夹下的文件,就可以以明文的方式展示。有些开发者也把登录密码或者token值直接存储,这样就会导致这些数据有可能会被盗取。
所以在SharedPreferences存储一些重要数据可以进行加密。
加密分为对称加密和非对称加密。
对称加密:所谓对称,就是采用这种加密方法的双方,使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规定如何进行加密和解密。
非对称加密:非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法
在APP中,应用和服务器请求需要网络,常见的是http或者https。裸奔的网络一般会被抓包工具抓去,这样,我们的数据就会被被人劫持或者修改。
证书的绑定可以很好的解决这个问题,通过证书验证,来拒绝非法拦截等
在启用https和证书时,我们可以通过https的证书来进行证书校验,如果证书验证不过,会直接拒绝,目前证书在app的网络中被广泛投入使用。关于证书的绑定可以参考不同的网络框架。
每个应用都有自己的独立签名,我们可以获取app当前的签名MD5或者SHA1值,和原签名的进行校验,如果对不上,基本判断是非法签名。原签名信息如果泄露应及时更换签名文件,否则可能导致签名信息被恶意盗用。
public String getSingleAlgorithm(Context context) { try { PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES); byte[] cert = info.signatures[0].toByteArray(); MessageDigest md = MessageDigest.getInstance("SHA1"); byte[] publicKey = md.digest(cert); StringBuilder builder = new StringBuilder(); for (int i = 0; i < publicKey.length; i++) { String appendString = Integer.toHexString(0xFF & publicKey[i]) .toUpperCase(Locale.US); if (appendString.length() == 1) builder.append("0"); builder.append(appendString); builder.append(":"); } return builder.toString(); } catch (Exception e) { e.printStackTrace(); } return null; }
代码混淆,是一种安全措施。在应用中被广泛使用。将代码混淆后,提高了代码的阅读难度,即使apk被破解,混淆后的代码阅读难度更大。
混淆目前来说,对应用算是比较小的投入。在混淆开启,需要注意的是会产生一个mapping.txt文件,这个文件对应的包,且该文件最好保存起来,如果在后期出现崩溃或者异常,可以通过trace追踪还原源代码所在行。有助于bug修复和定位
加固已成为防脱壳的一种常见的手段,目前市场上有好多种加固方案,我们自己可以选择一种,但是在进入应用市场,第三方也会对我们的应用进行加固。加固的目的就是提高apk的安全性,提高被破解的难度
可以参考三方
如果封闭起来,对应的组件只在内部使用,无法和外部通讯,外部也无法去获取你应用的通信。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。