当前位置:   article > 正文

Android 安全与防护策略_android的so文件如何防止泄露

android的so文件如何防止泄露

背景:

随着应用的发展,应用的安全也变的越来越重要,有些不法分子开始反编译或者劫持一些app源码。甚至有人通过截图然后做识别,获取别人内容。我们在处理时应该如何去保护我们的应用呢?接下来我们可以分析一下,一些场景,的用途

1.防止截屏:

在系统中,已提供防止截屏的标识,我们只需要加进去即可

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);

 这个只能防止一个页面被截屏,如果需要所有页面,可以放在基类(父类)中,子类可以通过参数来配置

通过IDE的截屏也会报错。

录屏也是黑屏。 

2.数据加密

2.1SharedPreferences

SharedPreferences这个类,在Android中用的比较多,是用来存储临时数据的,但是这个类存储的数据以xml文件落在文件夹里。所有,只要root设备后,找到该文件夹下的文件,就可以以明文的方式展示。有些开发者也把登录密码或者token值直接存储,这样就会导致这些数据有可能会被盗取。

所以在SharedPreferences存储一些重要数据可以进行加密。

2.2加密算法

加密分为对称加密和非对称加密。

对称加密:所谓对称,就是采用这种加密方法的双方,使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规定如何进行加密和解密。

非对称加密:非对称加密算法需要两个密钥公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法

3.网络请求的证书

在APP中,应用和服务器请求需要网络,常见的是http或者https。裸奔的网络一般会被抓包工具抓去,这样,我们的数据就会被被人劫持或者修改。

证书的绑定可以很好的解决这个问题,通过证书验证,来拒绝非法拦截等

在启用https和证书时,我们可以通过https的证书来进行证书校验,如果证书验证不过,会直接拒绝,目前证书在app的网络中被广泛投入使用。关于证书的绑定可以参考不同的网络框架。

4.签名验证

每个应用都有自己的独立签名,我们可以获取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;
}

5.代码的混淆

代码混淆,是一种安全措施。在应用中被广泛使用。将代码混淆后,提高了代码的阅读难度,即使apk被破解,混淆后的代码阅读难度更大。

如何混淆代码?请看混淆详解

混淆目前来说,对应用算是比较小的投入。在混淆开启,需要注意的是会产生一个mapping.txt文件,这个文件对应的包,且该文件最好保存起来,如果在后期出现崩溃或者异常,可以通过trace追踪还原源代码所在行。有助于bug修复和定位

6.加固

加固已成为防脱壳的一种常见的手段,目前市场上有好多种加固方案,我们自己可以选择一种,但是在进入应用市场,第三方也会对我们的应用进行加固。加固的目的就是提高apk的安全性,提高被破解的难度

7.dex加密

可以参考三方

8.android:exported="" 开闭

如果封闭起来,对应的组件只在内部使用,无法和外部通讯,外部也无法去获取你应用的通信。

9.其他会不定期补充进来

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/684706
推荐阅读
相关标签
  

闽ICP备14008679号