¿Hay alguna manera de recuperar la firma de la clave utilizada para firmar un APK? Firmé mi APK con mi clave de mi almacén de claves. ¿Cómo puedo recuperarlo programáticamente?¿Cómo obtener la firma de firma de APK?
Respuesta
Se puede acceder a la firma la firma del APK como esto utilizando la clase PackageManager http://developer.android.com/reference/android/content/pm/PackageManager.html
Signature[] sigs = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures;
for (Signature sig : sigs)
{
Trace.i("MyApp", "Signature hashcode : " + sig.hashCode());
}
He utilizado este para comparar con el código hash de la llave de depuración, como una manera de identificar si el archivo APK es un APK de depuración o un APK de lanzamiento.
¿cómo se sabe si está firmado con la clave de depuración o liberación? me sale: 08-08 08: 24: 36.668: E/Plataforma (19131): Firma código hash: -1907392821 yo no sé ni cómo verificar si se trata de mi paquete o no ... (I necesita verificar si com.mypackage.myapp me pertenece o no) – Zennichimaro
http://stackoverflow.com/questions/6122401/android-compare-signature-of-current-package-with-debug-keystore?rq=1 me permite diferenciar entre depuración o versión apk, pero ¿hay alguna manera de validar mi firma contra mi clave pública para verificar que la apk en realidad proviene de mí? ¡Gracias! – Zennichimaro
¿hay alguna manera de obtener una firma de una aplicación no instalada? Por ejemplo, si tengo un archivo .apk – Ruzard
El administrador de paquetes le dará el certificado de firma de cualquier paquete instalado. Luego puede imprimir los detalles de la clave de firma, p.
final PackageManager packageManager = context.getPackageManager();
final List<PackageInfo> packageList = packageManager.getInstalledPackages(PackageManager.GET_SIGNATURES);
for (PackageInfo p : packageList) {
final String strName = p.applicationInfo.loadLabel(packageManager).toString();
final String strVendor = p.packageName;
sb.append("<br>" + strName + "/" + strVendor + "<br>");
final Signature[] arrSignatures = p.signatures;
for (final Signature sig : arrSignatures) {
/*
* Get the X.509 certificate.
*/
final byte[] rawCert = sig.toByteArray();
InputStream certStream = new ByteArrayInputStream(rawCert);
try {
CertificateFactory certFactory = CertificateFactory.getInstance("X509");
X509Certificate x509Cert = (X509Certificate) certFactory.generateCertificate(certStream);
sb.append("Certificate subject: " + x509Cert.getSubjectDN() + "<br>");
sb.append("Certificate issuer: " + x509Cert.getIssuerDN() + "<br>");
sb.append("Certificate serial number: " + x509Cert.getSerialNumber() + "<br>");
sb.append("<br>");
}
catch (CertificateException e) {
// e.printStackTrace();
}
}
}
¿Cuál es el comando para validar el archivo con el serialNumber correspondiente?: Descomprimir -p [ruta_a_aplicar] META-INF/CERT.RSA | keytool -printcert – JY2k
Mi situación es que tengo una aplicación preinstalada que utiliza un almacén de claves incorrecto. Entonces la instalación directa dará un error debido a la firma inconsistente. Necesito verificar primero la firma para asegurarme de que pueda instalarse sin problemas.
Aquí está mi solución .
Como dice this code, puede obtener la firma de una aplicación instalada.
detalles:
Signature sig = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures[0];
En segundo lugar: obtener la releaseApk hashCode para comparar. En mi caso, descargué este apk de mi servidor y lo puse en la tarjeta sd.
Signature releaseSig = context.getPackageManager().getPackageArchiveInfo("/mnt/sdcard/myReleaseApk.apk", PackageManager.GET_SIGNATURES).signatures[0];
Finalmente, compare el hashCode.
return sig.hashCode() == releaseSig.hashCode;
He intentado con el código anterior, funciona muy bien. Si hashCode es diferente, debe simplemente uninstall la aplicación anterior o si es una aplicación del sistema y el dispositivo está rooteado, puede simplemente usar el tiempo de ejecución como remove it, y luego instalar la nueva firma apk.
getPackageArchiveInfo, no getPackageAchiveInfo – frogoscar
- 1. Recuperar la firma apk en tiempo de ejecución para Android
- 2. Cómo obtener la firma de una expresión de enlace C++ (...)
- 3. Cómo capturar la firma humana
- 4. strcmp() y caracteres con firma/sin firma
- 5. la Firma en C#
- 6. Firma de .NET Assemblies
- 7. ¿Qué tipo de obstáculos existen para la firma de la APK de Android?
- 8. Firma de tipo numérico
- 9. Cómo obtener una solicitud de firma de certificado
- 10. ¿Cómo obtener el algoritmo de firma de un certificado?
- 11. ¿Cómo funciona la verificación de la aplicación/firma de Android?
- 12. ¿Cómo obtener la firma del método con ObjectWeb ASM?
- 13. LinkedHashMap firma
- 14. Tamaño de firma RSA?
- 15. Certificado de firma de código
- 16. Advertencia de C++ C4018: '<': discrepancia entre firma/no firma
- 17. firma no válida para solicitudes de firma a la API de Flickr (simulación en la consola)
- 18. ¿Cuál es la firma de printf?
- 19. Firma en UIView
- 20. ¿Cómo generar la firma del método?
- 21. ¿Cómo renovar una firma jar?
- 22. tipo de firma de la función uncurry
- 23. Verificación manual de la firma XML
- 24. Obtener construido en la firma del método - Python
- 25. Hashing vs binarios de firma
- 26. firma automática de código "seguro"
- 27. Create PKCS # 7 firma separada
- 28. La firma de un documento XML utilizando RSA-SHA256 tema método de firma
- 29. Dónde puedo obtener el certificado de firma de documento
- 30. Firma de código (Microsoft Authenticode)
puede usar un script ant para firmarlo. pero requerirá que almacene sus contraseñas en algún lugar que no sea seguro. – clamp
Solo necesito obtener la firma de mi aplicación dentro de ella, p. en mi primera actividad de alguna manera obtengo la firma de mi aplicación. Hasta ahora no sé cómo – Waypoint
ah lo entiendo ahora. No estoy seguro si esto es posible. – clamp