Android应用安全防护实践一自身是否被修改校验(三)

这个炒鸡简单

demo撸上

	//获取你重新自身的安装包位置 一般在/data/app/包名/xxx.apk
    public static String getApkPath(Context context) {
        try {
            PackageInfo packageInfo = context.getPackageManager().getPackageInfo(BuildConfig.APPLICATION_ID, PackageManager.GET_META_DATA);
            ApplicationInfo applicationInfo = packageInfo.applicationInfo;
            return applicationInfo.publicSourceDir; // 获取当前apk包的绝对路径
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return "";
    }

	//获取hash值 整个apk的 注意 这里代码不太严谨 demo随便敲的 跑通就行了
    public static String getHash(Context context) {
        MessageDigest msgDigest;
        String apkPath = getApkPath(context);

        FileInputStream fis = null;
        try {
            msgDigest = MessageDigest.getInstance("SHA-1");
            byte[] bytes = new byte[1024];
            int byteCount;
            fis = new FileInputStream(new File(apkPath));
            while ((byteCount = fis.read(bytes)) > 0) {
                msgDigest.update(bytes, 0, byteCount);
            }
            BigInteger bi = new BigInteger(1, msgDigest.digest());
            return bi.toString(16).toUpperCase();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (fis != null) {
                    fis.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return "";
    }

代码就这些了 每次发布软件 签名后 获取apk的hash保存到服务器 然后
app通过getHash方法获取hash和服务器保存的比对 如果不正确就自动退出什么的 爱咋地咋地

这个校验可以放到ndk里面写 免得被反编译删除校验就没用了
注意 获取hash之后不要动apk文件了 不要做任何修改(一键打渠道包工具什么的) 否则会导致apk文件hash改变

如果需要渠道包 可以后台存多个hash 对应不同的渠道包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值