Firmar un apk como sistema usando las claves encontradas en source / build / target / product / security /

Así como los estados del título, estoy tratando de firmar mi aplicación utilizando el platform.x509.pem y platform.pk8. El problema es que tengo errores al usar keytool-importkeypairs para agregar estos como esto:

keytool-importkeypair -k ~/.android/debug.keystore -p android -pk8 platform.pk8 -cert platform.x509.pem -alias platform 

Y también consigo un error al intentar firmar directamente el APK usando SignApk.jar como esto:

 java -jar SignApk.jar platform.x509.pem platform.pk8 test-app.apk test-app-signed.apk 

Keytool-importkeypairs error:

 Error decrypting key 3074042056:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1319: 3074042056:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:381:Type=PKCS8_PRIV_KEY_INFO unable to load private key 3074091208:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:696:Expecting: ANY PRIVATE KEY Importing "platform" with unable to load certificate 3073755336:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:696:Expecting: TRUSTED CERTIFICATE keytool error: java.lang.Exception: Source keystore file exists, but is empty: /tmp/keytool-importkeypair.vDOP/p12 

Fuentes utilizadas: Apk con privilegios del sistema , ¿Cómo firmar la aplicación de Android con la firma del sistema? (SO) , y Cómo actualizar el teléfono Android dev 2 de 1,6 a 2,1
Ninguno de los métodos descritos en los enlaces anteriores funcionan ahora, como se puede ver. Gracias por adelantado.

Compruebe primero el formato de los archivos (con cat , etc.), el error sugiere que no están en el formato esperado (ASN.1 / PEM).

Más importante aún, el uso de esas claves rara vez tiene sentido. Esas son sólo ejemplos de claves, y cualquier ROM personalizada que se precie usará sus propias claves privadas . De lo contrario casi cualquier persona puede firmar su APK con las claves públicas en AOSP y obtener el privilegio que quieran. Cuál es, innecesario decir, una cosa muy mala . Si necesita desarrollar una aplicación que utilice los privilegios del sistema y desee que funcione en todos los teléfonos con raíces (o la mayoría) y en las ROM personalizadas, la forma correcta de hacerlo es solicitar acceso root con su y ejecutar lo que necesite hacer en un Shell de raíz Si el usuario le concede el permiso, por supuesto.

EDITAR:

Para depurar el error de importación, ejecute este paso a paso. Funciona con las claves AOSP predeterminadas.

 $ openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem $ openssl pkcs12 -export -in platform.x509.pem -inkey platform.pem -out platform.p12 -password pass:android -name platform $ keytool -importkeystore -deststorepass android -destkeystore test.keystore -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass android $ keytool -list -v -keystore test.keystore 

Que hace:

  1. Convierte la clave binaria de formato PKCS # 8 en PEM ( openssl pkcs8 )
  2. Crea un archivo PKCS # 12 que incluye tanto la clave privada como el certificado ( openssl pkcs12 )
  3. Dado que el keytool de Java puede leer archivos PKCS # 12 como almacén de claves, importa su archivo PKCS # 12 para convertirlo de forma efectiva al formato nativo (BKS o JKS) ( keytool -importkeystore )
  4. (Bonus) Utiliza keytool para listar el contenido para asegurarse de que todo funcionó. ( keytool -list )
  • SSLHandshakeException: Ancla de confianza para la ruta de certificación no encontrada. Solo en la API de Android <19
  • KeyStore y Alias ​​clave
  • Detección de depuración de almacén de claves o liberación de almacén de claves programáticamente
  • Versión incorrecta de keystore en la llamada android
  • Diferentes almacenes de claves de depuración en Eclipse en una base por proyecto?
  • ¿Qué es el archivo de keystore de Android, y para qué se utiliza?
  • Keystore SHA1 diferente de cert.rsa SHA1 de APK
  • Java Keystore contraseña sin sentido?
  • Android Studio no puede recuperar la clave de Keystore
  • "Flujo no representa una tienda de claves PKCS12" después de almacenar con una nueva contraseña en el dispositivo Android
  • Buenas prácticas: ¿Cómo manejar las contraseñas del keystore en android / java?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.