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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章