2012-03-30 6 views
4

Ich möchte programmgesteuert eine Überprüfung der APK-Signatur zur Laufzeit durchführen. Ich besitze einen Keystore auf meiner Entwicklungs-Workstation, damit ich den öffentlichen Schlüssel, mit dem ich eine APK signiere, kennen kann (weiß ich nicht).Selbstüberprüfung einer APK-Signatur

Sobald ich weiß, was der öffentliche Schlüssel nach der Beschilderung sein wird, möchte ich den Quellcode eingeben und überprüfen, ob die aktuell laufende Anwendung den Schlüssel entspricht.

Ist es möglich? Wenn ja, wie erhalte ich den öffentlichen Schlüssel von einem von Eclipse generierten Keystore?

Danke.

+0

Betrachten Sie [Android-Lizenz-Check-Service] (http://developer.android.com/guide/market/licensing/index.html). –

+1

Entschuldigung, dieses ** muss ** offline arbeiten und ist für Preview-Versionen einer App. Ich hatte eine verwandte Frage –

+1

Self-checking macht wenig Sinn aus Sicherheitsgesichtspunkten, da der Angreifer den Code so ändern kann, dass er alles akzeptiert. –

Antwort

4

Man könnte dies versuchen, sollte es

Signature[] sigs = getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures; 
    for (Signature sig : sigs) 
    { 
     // log the sig here 
    } 
0

arbeiten Ich glaube, ich die gleiche Situation haben wie Sie haben. Hier ist meine original solution.

Sie können es versuchen.

Signature sig = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures[0]; 
Signature releaseSig = context.getPackageManager().getPackageAchiveInfo("/mnt/sdcard/myReleaseApk.apk", PackageManager.GET_SIGNATURES).signatures[0]; 
return sig.hashCode() == releaseSig.hashCode;