我試圖爲基於服務器的應用實現版本失效系統。使用以下型號:根據apk簽名檢索一些信息
在某些向服務器請求的情況下,客戶端添加關鍵字,如果該密碼不在白名單中,服務器會響應一個錯誤,並且應用程序會顯示一條消息,警告市場更新是(通常是因爲它的黑客版本,或者是用於合法版本的密碼,但因爲破解版本使用相同的代碼而被列入黑名單)。 爲了生成該密碼,我希望在運行時恢復一個能夠識別編譯版本的密鑰(這樣,如果apk被重新編譯,它將無法工作)
最初我考慮使用通過代碼檢索的apk簽名像這樣:
public static int getSignature() {
try {
Signature sigs[] = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES).signatures;
return sigs[0].hashCode();
} catch (NameNotFoundException ignore) {
}
return 0;
}
但是實在是非常愚蠢的,因爲黑客可以找回我的apk的簽名(在設備中安裝並使用代碼運行的程序上面(使用my.apk.package名稱,而不是getPackageName ())
然後修改getSignature()方法返回僞造的代碼而不是th真正的簽名。
所以我的問題是,如果有某種信息(簽名相關或相似),但不容易從外部應用程序訪問,這種方式如果代碼重新編譯與另一個簽名,價值改變,不能這樣很容易猜測
感謝