前言
記錄逆向的一點一滴
簽名的作用
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修改