¿Cómo verifico que un apk de Android esté firmado con un certificado de lanzamiento?

222

¿Cómo puedo verificar que un apk de Android esté firmado con un lanzamiento y no un certificado de depuración?

Vadivelan
fuente
66
Escribí un script que validará un apk contra un almacén de claves.
JohnnyLambada
acepta la respuesta si tienes la tuya.
Rinkal Bhanderi
@JohnnyLambada ¿Cómo puedo ejecutar su script en Mac?
Aaron Azhari
1
@JohnnyLambada ¿Cómo puedo ejecutar su script?
sunil
@sunil Es un script bash que crea una nueva función bash. siga el enlace y péguelo en un archivo entonces source thatfile. Los comentarios en el script explican cómo ejecutarlo.
JohnnyLambada

Respuestas:

372

Utilice este comando, (vaya a java <jdk <ruta del bin en el indicador de cmd)

$ jarsigner -verify -verbose -certs my_application.apk

Si ve "CN = Android Debug", esto significa que .apk se firmó con la clave de depuración generada por el SDK de Android (significa que no está firmado), de lo contrario, encontrará algo para CN. Para obtener más detalles, consulte: http://developer.android.com/guide/publishing/app-signing.html

Anass
fuente
1
Recibí el mensaje como jar verificado al final de la ejecución del comando para 2 archivos apk diff. Así que me confundí. pero como da CN = "depuración de Android" para 1 apk y diferente para otras apk .got a knw que 1 está firmado. Gracias.
iRunner
3
¿Cómo verifica esto la firma? ¿Utilizará las CA de confianza del sistema? ¿O esta es solo una herramienta para verificar la integridad de los archivos jar? Gracias
Mostafa Shahverdy
2
this means the .apk was signed with the debug key generated by the Android SDK (means it is unsigned)- Esto no significa que no esté firmado. Significa lo que acaba de escribir: está firmado con la clave de depuración.
Dmitry Zaytsev
3
¿Cómo podríamos verificar que se firmó con el mismo archivo de certificado exacto, y no solo uno que tenga los mismos valores de organización, ubicación, etc.?
OlivierM
1
Gracias. Entonces, jarsigner -verify -verbose -certs myapp.apk | grep CN= | lessno deberíamos ver "CN = Android Debug".
rpattabi
70

Use el comando de consola:

apksigner verify --print-certs application-development-release.apk

Puede encontrar un apksigner en ../sdk/build-tools/24.0.3/apksigner.bat. Solo para herramientas de compilación v. 24.0.3 y superior.

Lea también documentos de google: https://developer.android.com/studio/command-line/apksigner.html

PavelGP
fuente
Encontré apksigneren `% LOCALAPPDATA% \ Android \ sdk \ build-tools \ 25.0.3` (y en cualquier otra versión de herramientas de compilación que haya instalado)
Jon
2
Tenga en cuenta que apksignerfalta en la versión 26.0.0de herramientas de compilación. Se rastrea en issuetracker.google.com/issues/62696222 y se supone que se arreglará en la próxima versión. La solución hasta entonces es usar apksignerdesde 25.0.3.
friederbluemle
2
Actualización: apksignerse incluye en la versión26.0.1
forresthopkinsa
Actualización: APKSigner también está en 26.0.2, 26.0.3, 27.0.0, 27.0.1, 27.0.2 Creo que lo encontrará en todas las versiones futuras :)
Kirill Vashilo
2
para salida detallada use -v:./apksigner verify --print-certs -v ~/Downloads/MyAppHere.apk
Tilo
59

Use este comando: (Jarsigner está en su carpeta bin de Java goto java-> jdk-> bin path en cmd prompt)

$ jarsigner -verify my_signed.apk

Si el .apk está firmado correctamente, Jarsigner imprime "jar verificado"

Udaykiran
fuente
13
Esto no es lo suficientemente bueno, ya que tanto las aplicaciones de depuración como de lanzamiento están firmadas, darán "jar verificado". Verifique los detalles de la respuesta de @ Anass.
rpattabi
Intenté exactamente este comando y se verificó. Luego, como experimento, entré en el APK y eliminé literalmente todos los archivos excepto los archivos sig y el manifiesto, y aún así se verificó. Entonces algo está muy mal aquí. Sin embargo, todavía tengo que probar la respuesta de @ Anass.
orblivion
39

El más fácil de todos:

keytool -list -printcert -jarfile file.apk

Esto utiliza la aplicación Java Keytool incorporada y no requiere extracción ni instalación de herramientas de construcción.

Randy Sugianto 'Yuku'
fuente
Para cualquiera que no pueda correr de keytoolinmediato, verifique esto y tal vez intente agregar %JAVA_HOME%\binal camino
TT--