驗證應用程式簽名 - 篡改檢測
此技術詳細說明了如何確保你的 .apk 已使用開發人員證書進行簽名,並利用證書保持一致且只有你可以訪問它的事實。我們可以將這種技術分解為 3 個簡單的步驟:
- 找到你的開發者證書籤名。
- 將你的簽名嵌入到應用程式中的 String 常量中。
- 檢查執行時的簽名是否與嵌入式開發人員簽名匹配。
這是程式碼片段:
private static final int VALID = 0;
private static final int INVALID = 1;
public static int checkAppSignature(Context context) {
try {
PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);
for (Signature signature : packageInfo.signatures) {
byte[] signatureBytes = signature.toByteArray();
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
final String currentSignature = Base64.encodeToString(md.digest(), Base64.DEFAULT);
Log.d("REMOVE_ME", "Include this string as a value for SIGNATURE:" + currentSignature);
//compare signatures
if (SIGNATURE.equals(currentSignature)){
return VALID;
};
}
} catch (Exception e) {
//assumes an issue in checking signature., but we let the caller decide on what to do.
}
return INVALID;
}