2011-12-31 55 views
1

我試圖爲基於服務器的應用實現版本失效系統。使用以下型號:根據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真正的簽名。

所以我的問題是,如果有某種信息(簽名相關或相似),但不容易從外部應用程序訪問,這種方式如果代碼重新編譯與另一個簽名,價值改變,不能這樣很容易猜測

感謝

回答

2

我覺得你運氣不好,因爲什麼東西在你的.apk裏都可以被幾乎所有人閱讀,特別是,在根源設備上。

您絕對應該考慮對您的應用程序進行模糊處理,例如使用ProGuard。