Android应用安全防护的基本策略(2)--签名保护

前言

记录逆向的一点一滴

签名的作用

Android中的每个应用都有一个唯一的签名,如果一个应用没有被签名是不允许安装到设备中的。

保护策略

在app的入口判断签名是否正确,如果不正确则退出。

public static String getSignature(Context context) {
        try {
            Signature[] signatures;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
                PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNING_CERTIFICATES);
                SigningInfo signingInfo = packageInfo.signingInfo;
                signatures = signingInfo.getApkContentsSigners();
            } else {
                PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);
                signatures = packageInfo.signatures;
            }

            StringBuilder builder = new StringBuilder();
            for (Signature signature : signatures) {
                builder.append(signature.toCharsString());
            }

            return builder.toString();
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }

        return "";
    }

在Application中判断是否一致

		String signature = getSignature(getApplicationContext());
        if (!SIGNATURES.equals(signature)) {
            Toast.makeText(this, "签名被更改", Toast.LENGTH_SHORT).show();
            Process.killProcess(Process.myUid());
            finish();
            return;
        }

其中,SIGNATURES 常量通过getSignature(getApplicationContext())方法获取。

备注

此种方法也不是安全的,可通过smali修改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值