No Code SaaS Seguridad para Apps Móviles. 

Pida Demo

[TECH] Firma con apksigner y APK Signature Scheme v2

Esta es una guía explicativa sobre cómo firmar manualmente un archivo APK de Android para el sistema de firma APK Signature Scheme v2 usando apksigner y zipalign.

[TECH] Firma con apksigner y APK Signature Scheme v2


En la publicación anterior (FIRMA DE APLICACIONES ANDROID Y ZIPALIGN) discutimos cómo firmar con jarsigner en archivos apk y aab usando APK Signature Scheme v1.
En esta publicación, discutiremos sobre la firma de archivos apk usando apksigner.

Quizás te preguntes por qué necesitamos saber sobre la firma usando apksigner cuando podemos usar jarsigner.

APK Signature Scheme v2 se introdujo en Android 7.0 para proteger los archivos apk de manera más vital.
Después de eso, APK Signature Scheme v3 se introdujo en Android 9.0 y APK Signature Scheme v4 se introdujo en Android 11.0.

 

Proceso de verificación de firma por parte de Google
 
 

Antes de APK Signature Scheme v2, la firma se basaba en JAR firmados mediante jarsigner, y desde v2 se empezó a basar en apksigner.

Entonces, ¿en qué casos firmamos utilizando apksigner?


1) En caso de que se haya seleccionado la opción Signature Versions v2 al crear una aplicación. (APK Signature Scheme v2)
2) En caso de que targetSdkVersion se haya establecido en un valor superior a 30 al crear una aplicación

En los casos anteriores, la firma debe realizarse mediante apksigner.
No existen problemas importantes para que una aplicación se instale y ejecute al firmar con jarsigner, pero puede producirse un error al cargar la aplicación en Google Play Console.
 
 

Cómo comprobar la versión del esquema de firma de una aplicación

 
1. Compruébelo desde Android Studio
 
Es la versión V2 en caso de que esté marcada la opción "V2 (firma APK completa)" en "Generar paquete firmado o APK"
 
Seleccione la versión de la firma en Android Studio
 
 
2. Compruébelo desde el comando
 
java -jar [apksigner.jar Path] verify -v --print-certs [Apk’s Path before applying LIAPP]
 
Ex) C:\>java -jar D:\android\sdk\build-tools\28.0.0\lib\apksigner.jar verify -v --print-certs C:\app-release.apk

Si Verificado usando el esquema v2 (Esquema de firma APK v2) es verdadero, entonces es V2; si es falso, entonces es V1.
 
 

zipalign

 
Un punto importante es que, si usa apksigner, zipalign solo debe realizarse antes de que se haya firmado el archivo APK. Si firma su APK con apksigner y realiza más cambios en el APK, su firma se invalidará.
Por lo tanto, solo debe realizar la alineación zip antes de firmar el APK.

zipalign -f -v 4 "Ruta del archivo apk que necesita la alineación zip" "Ruta del archivo apk que se guardará después de la alineación zip"
 
Comando zipalign en Windows CMD
 
 

Firma con apksigner

 
Es sencillo firmar con apksigner en un archivo zipalign completo como se muestra a continuación.

[ Windows ]
java -jar [APKSIGNER_PATH] sign -v --out [SAVED_APK_PATH] --ks [KEYSTORE_PATH] --ks-key-alias [ALIAS_NAME] [APK_FILE_PATH]
[ MAC ]
[APKSIGNER_PATH] sign -v --out [SAVED_APK_PATH] --ks [KEYSTORE_PATH] --ks-key-alias [ALIAS_NAME] [APK_FILE_PATH]
 
[APKSIGNER_PATH] es el lugar donde se encuentra apksigner.
La herramienta apksigner, disponible en la revisión 24.0.3 y posteriores de las herramientas de compilación del SDK de Android, puede consultarla como se muestra a continuación.
1) Verifique la ruta del SDK en Android Studio
Menú de herramientas => Administrador de SDK => Verificar la ruta de ubicación del SDK de Android
2) Verifique el archivo Apksigner en el directorio del SDK
Directorio del SDK => directorio build-tools => directorio buildToolsVersion => directorio lib => verifique el archivo apksigner.jar
En el caso de MAC, verifique el archivo apksigner en el directorio buildToolsVersion
 
Aparecerá un mensaje para ingresar la contraseña del almacén de claves una vez que proceda con un comando.

Contraseña del almacén de claves para el firmante n.° 1:

Al escribir la contraseña del almacén de claves, los caracteres de la contraseña no se mostrarán en la pantalla, pero se ingresarán.
Una vez que se haya ingresado la contraseña correcta del almacén de claves, puede continuar con el siguiente paso.
Si la contraseña del almacén de claves y la contraseña de la clave son idénticas, la firma se realizará de inmediato.
Si la contraseña del almacén de claves y la contraseña de la clave son diferentes, se le solicitará que ingrese la contraseña de la clave.

Contraseña de la clave "KEY_NAME" para el firmante n.° 1:

Una vez que se haya ingresado la contraseña de la clave correcta, se procederá a la firma y se mostrará "Firmado" cuando se complete la firma.
 
Comando apksigner en Windows cmd
 
 
Si usa la opción –ks-pass pass: y –key-pass:pass en la línea de comandos, puede establecer la contraseña de antemano y el comando.
Si usa esta opción, no se mostrará el mensaje para ingresar la contraseña, solo se ingresará automáticamente.

[ Windows ]
java -jar [APKSIGNER_PATH] sign -v --out [SAVED_APK_PATH] --ks [KEYSTORE_PATH] --ks-pass pass:"keystore_password" --key-pass pass:"key_password" --ks-key-alias [ALIAS_NAME] [APP_FILE_PATH]
[ MAC ]
[APKSIGNER_PATH] sign -v --out [SAVED_APK_PATH] --ks [KEYSTORE_PATH] --ks-pass pass:"keystore_password" --key-pass pass:"key_password" --ks-key-alias [ALIAS_NAME] [APP_FILE_PATH]
 

Verificar firma

 
Para verificar si la firma con apksigner se aplicó correctamente, puede usar el siguiente comando.

[ Windows ]
java -jar [APKSIGNER_PATH] verify -v --print-certs [APP_FILE_PATH]
[ MAC ]
[APKSIGNER_PATH] verify -v --print-certs [APP_FILE_PATH]

Si la firma funciona correctamente, puede marcar "Verificado usando v2
esquema (Esquema de firma APK v2): verdadero" como se muestra a continuación.
 
Verificar el comando de firma en el cmd de Windows
 
 
 

zipalign y firma con archivo de script

Hemos visto cómo firmar con apksigner.
Para continuar con este proceso fácilmente, compartimos el archivo de script.

[ Archivo Bat para usuarios de Windows ]

[ [Archivo Sh para usuarios de MAC ]

Después de descargar el archivo, ábralo con el bloc de notas o un editor de texto. Guárdelo después de editar el contenido a continuación.

KeyStorePath="Ruta del almacén de claves"
ALIAS_NAME="Nombre de alias"
STORE_PASS="Contraseña del almacén de claves"
KEY_PASS="Contraseña de clave"
ZIP_ALIGN="ruta del archivo zipalign"
APKSIGNER_PATH="ruta del archivo apksigner"

Los archivos zipalign y apksigner se encuentran en build-tools en la ruta donde está instalado Android SDK.
Si desea ingresar su propia contraseña sin guardarla, se deben eliminar las opciones relacionadas con --ks-pass y --key-pass.

Los usuarios de Windows pueden arrastrar la aplicación archivo que se firmará en el archivo LIAPP_sign_window.bat y se ejecutará inmediatamente.
Los usuarios de MAC pueden ejecutar un programa de terminal arrastrando los archivos de script y de aplicación en orden o ingresando las rutas como se muestra a continuación.

Por ejemplo, /Users/username/Downloads/LIAPP_apksign_mac.sh /Users/username/AndroidStudioProjects/MyApplication/app/release/app-release.apk
 
Cuando vea el mensaje "Permiso denegado" en Mac, puede otorgar un permiso para ejecutar como se muestra a continuación.

Por ejemplo, chmod +x /Users/username/Downloads/LIAPP_apksign_mac.sh

Una vez que se ejecute correctamente, primero se realizará zipalign y luego se realizará la firma.
Si se confirmó el mensaje "Firmado" sin ningún problema durante el proceso de firma, presione cualquier tecla para continuar con la firma.
El archivo completo se guarda con _signed después del nombre del archivo.

Para obtener más información sobre la firma con apksigner y el esquema de firma APK, consulte la siguiente URL.


apksigner : https://developer.android.com/studio/command-line/apksigner
app-signing : https://developer.android.com/studio/publish/app-signing
APK Signature Scheme : https://source.android.com/security/apksigning

LIAPP, ofrecemos el mejor servicio posible.

 

#seguridad_de_aplicaciones_android #seguridad_de_aplicaciones_ios #seguridad_de_aplicaciones_ios #reforzamiento_del_código_fuente #paquete_de_aplicaciones_android #AAB #APK #Paquete_de_aplicaciones_Android #seguridad_de_aplicaciones_móviles #seguridad_de_juegos_móviles #seguridad_del_código_fuente #Antimanipulación #anti_volcado_de_memoria #anti_malware #detección_de_herramientas_de_piratería #anti_reempaquetado