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修改

猜你喜欢

转载自blog.csdn.net/fengyulinde/article/details/103705042
今日推荐