前言
记录逆向的一点一滴
签名的作用
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修改