Publicamos aplicaciones en Google Play y ganamos millones. Cómo utilizar la función de firma de aplicaciones en Google Play Cómo firmar una apk con una firma original

Entonces, ha trabajado muchos días (y tal vez incluso noches) y ahora su primera aplicación móvil híbrida está lista. Es bastante estable, la mayoría de los errores críticos están solucionados. Quedan pequeños, pero recordando que el perfeccionismo es malo, tomas la decisión decidida de publicar la aplicación.

Un requisito previo para ello es la presencia de un archivo APK firmado. Aprenderá cómo firmar un archivo apk en este artículo.

Un pequeño retiro

Cuando mi proyecto favorito estaba a punto de lanzarse, comencé a buscar información sobre cómo publicar una aplicación de forma rápida y sencilla. Muchas de las instrucciones encontradas parecían sencillas. Elegí las instrucciones de los autores del marco Ionic, sobre el cual se desarrolló la aplicación. No todo salió bien la primera vez, hay varias peculiaridades. El proceso de firma se describe en este artículo, con puntos importantes destacados.

Datos iniciales

Supongo que tienes todo configurado para desarrollar híbridos. aplicaciones móviles usando Apache Cordova. Debe ser instalado:
  • Apache Córdoba
  • Kit de desarrollo Java
  • Herramientas del SDK de Android
El nombre del proyecto y de la aplicación es lcf. Reemplace con el nombre de su proyecto cuando sea necesario.

Ir

Primero necesita crear una versión de lanzamiento de su aplicación. Pero antes de eso, asegurémonos de eliminar todos los complementos innecesarios. Por ejemplo, no necesitamos un complemento que envíe información de depuración a la consola. Borrémoslo:

$ complemento cordova rm consola-plugin-cordova
Para generar una versión de lanzamiento para Android, use el comando construir con una bandera --liberar:

$ cordova build --liberar android
Este comando creará no firmado Archivo APK en el directorio:

Plataformas/android/build/outputs/apk
Por ejemplo, plataformas/android/build/outputs/apk/ Android-lanzamiento-unsigned.apk. Luego necesitaremos firmar este archivo y ejecutar la utilidad. zipalign para optimizar y preparar el archivo para Google Play.

Para firmar un archivo necesita un certificado. Creémoslo usando la utilidad. herramienta clave que está incluido en el JDK:

$ keytool -genkey -v -keystore lcf.keystore -alias lcf -keyalg RSA -keysize 2048 -validity 10000
Importante

El valor del parámetro -alias debe recordarse o, mejor aún, anotarse. En el ejemplo anterior, es igual a lcf (basado en las primeras letras del nombre de la aplicación Loyal Client Free). No daré detalles aquí, si te interesa escribe en los comentarios, te lo cuento con más detalle.

El alias se utiliza cada vez que firmas. * aplicaciones. Para que sea más fácil de recordar, utilice el nombre del archivo del almacén de claves como alias, por ejemplo:


-keystore hola-mundo.keystore -alias hola-mundo -keystore clima-app.keystore -alias clima-aplicación -keystore todo.keystore -alias todo
* Debes firmar la aplicación cada vez que se publican actualizaciones.

Utilidad herramienta clave hace una serie de preguntas. En total serán 8. Para tener una idea de las preguntas y respuestas aproximadas de antemano, se detallan todas a continuación, debajo del spoiler.

Preguntas clave sobre herramientas y ejemplos de respuestas

1. Ingrese la contraseña del almacén de claves:
Aquí debe ingresar una contraseña para el archivo (al menos 6 caracteres). La contraseña ingresada debe anotarse en un lugar seguro; es necesaria cada vez que firma la solicitud.

2. Vuelva a ingresar la nueva contraseña:
Reingresa tu contraseña.

3. ¿Cuál es tu nombre y apellido?
: Iván Petrov
Tu nombre y apellido. Valor en corchetes es el valor predeterminado.

4. ¿Cuál es el nombre de su unidad organizativa?
: ÉL
El nombre de la división de su empresa. Puedes dejarlo en blanco, lo indico.

5. ¿Cuál es el nombre de su organización?
: 2desarrolladores
El nombre de su organización. Por favor indique si alguno.

6. ¿Cómo se llama su Ciudad o Localidad?
: Moscú
Nombre de la ciudad

7. ¿Cómo se llama su Estado o Provincia?
: MES.
Nombre del área

8. ¿Cuál es el código de país de dos letras para esta unidad?
: RU
Código del país. Indico RU.

: y

Confirma si todo está correcto o presiona Enter para ingresar nuevamente.


Al final, aparecerá un mensaje indicando que la clave se generó exitosamente. Se le pedirá que establezca una contraseña para la clave privada (si desea dejarla igual que para el certificado, presione Entrar):

Generación de un par de claves RSA de 2048 bits y un certificado autofirmado (SHA256withRSA) con una validez de 10 000 días para: CN=Ivan Petrov, OU=IT, O=2developers, L=Moscow, ST=MO, C=RU Ingresar clave contraseña para (RETORNO si es la misma que la contraseña del almacén de claves):
Se creará un archivo en el directorio actual. almacén de claves lcf.

Importante

El archivo creado debe guardarse en un lugar seguro. Si está utilizando un repositorio privado, el archivo se puede enviar junto con el código fuente de la aplicación. En general, es mejor almacenar los certificados por separado. Si pierde el certificado, no podrá emitir actualizaciones de la aplicación.

Quedan dos pasos y tendrás un archivo APK listo para su distribución. Pasemos a la firma.

Para firmar su archivo apk, use la utilidad jarsigner, que también está incluido en el JDK.

$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore lcf.keystore android-release-unsigned.apk lcf
El nombre del certificado se indica después del parámetro. -almacén de claves, alias - después del nombre del archivo.

Finalmente, para optimizar el archivo apk, usaremos la utilidad zipalign:

$ zipalign -v 4 android-release-unsigned.apk LoyalClientFree.apk
El último parámetro es el nombre del archivo que subirás a Google Play.

Importante.

Utilidad zipalign Es parte de las herramientas del SDK de Android y se puede encontrar aquí:

/ruta/a/Android/sdk/build-tools/VERSIÓN/zipalign

Conclusión

Ahora tiene un archivo apk listo para distribuir que puede cargar en Google Play. Complete la descripción, determine la calificación de su aplicación y no dude en hacer clic en "Publicar".

Con la función de firma de aplicaciones de Google Play, Google puede administrar la clave de firma de su aplicación, así como proteger esa clave y usarla para firmar sus APK para su distribución. Este método de almacenamiento lo protegerá en caso de que la clave se pierda o sea pirateada.

¡Importante! Para utilizar paquetes de aplicaciones de Android (el formato de publicación de aplicaciones recomendado), debes inscribirte en el programa de firma de aplicaciones de Google Play antes de cargar el paquete de aplicaciones en Play Console.

El registro está abierto a titulares de cuentas y usuarios con permisos de gestión de producción global que hayan aceptado los Términos de servicio. Solo puedes registrar una aplicación a la vez con el Programa de firma de aplicaciones de Google Play.

Principios de trabajo

Cuando utiliza la función de firma de aplicaciones de Google Play, sus claves se almacenan en la misma infraestructura que almacena las claves de Google y están protegidas por un servicio de administración de claves dedicado. Información detallada La infraestructura técnica de Google se puede encontrar en la documentación de Google Cloud Security.

Las aplicaciones de Android están firmadas con una clave privada. Cada una de estas claves está asociada a un certificado público, con el que los dispositivos y servicios pueden verificar la seguridad de las aplicaciones y sus actualizaciones. Solo se instalan en los dispositivos aquellas actualizaciones cuya firma coincida con la firma. aplicación instalada. Permitir que Google administre la clave de firma de su aplicación hará que el proceso sea más seguro.

Nota. El uso de la función de firma de aplicaciones de Google Play es opcional. Puede descargar APK y administrar sus propias claves sin utilizar App Bundles. Sin embargo, si pierde el acceso al almacén de claves o éste se ve comprometido, no podrá actualizar su aplicación y tendrá que volver a publicarla con un nombre de paquete diferente.

Descripciones de llaves, objetos y herramientas.
Condiciones Descripción
Clave de firma de aplicaciones

La clave utilizada por Google Play para firmar archivos APK entregados al dispositivo del usuario. Cuando te registras en el programa de firma de aplicaciones de Google Play, puedes cargar una clave de firma existente o dejar que Google genere una nueva.

Descargar clave

Hay dos formas de generar una clave de descarga:

  • Utilice la clave de firma de la aplicación. Si permitió que Google generara una clave de firma de aplicación cuando se registró en el programa, la clave de carga será la clave que utilizó para firmar la primera versión de la aplicación.
  • Utilice una clave de descarga independiente. Si proporcionó su propia clave de firma de aplicación al registrarse en el programa, puede generar una nueva clave de descarga por seguridad. Si no desea hacer esto, use la clave de firma de la aplicación como clave de descarga para firmar nuevas versiones.
Certificado (.der o .pem)

Un certificado que contiene la clave pública y Información adicional sobre su dueño. Un certificado de clave pública permite que cualquiera sepa quién firmó un App Bundle o un archivo APK. Este certificado se puede compartir porque no incluye una clave privada.

Para registrar sus claves con proveedores de API, puede descargar el certificado público para la clave de firma de su aplicación desde Firma de aplicaciones en Play Console. Un certificado de clave pública se puede compartir con todos porque no incluye una clave privada.

Huella digital del certificado

Un identificador breve y único para el certificado. Los proveedores de API suelen solicitar la huella digital junto con el nombre del paquete para proporcionar acceso a sus servicios.

Las huellas digitales de los certificados de descarga y firma de aplicaciones MD5, SHA-1 y SHA-256 se pueden encontrar en la página Firma de aplicaciones en Play Console. También puede recibir un tipo diferente de huella digital. Para ello descargue el certificado original en formato DER en la misma página.

Almacén de claves de Java (.jks o .keystore) Almacenamiento de certificados de seguridad y claves privadas.
herramienta PEPK

Una herramienta para exportar claves privadas desde el almacenamiento de Java y cifrarlas para transferirlas a Google Play.

Una vez que haya proporcionado a Google la clave de firma de su aplicación, elija exportar y descargar su propia clave (y, opcionalmente, su certificado público), luego siga las instrucciones para descargar y usar la herramienta. También puede descargar, ver y utilizar la herramienta PEPK de código abierto.

Proceso de firma de solicitud

Puede descargar archivos APK firmados con la clave de firma de la aplicación original antes o después de firmar la aplicación en Google Play.

Si está migrando a Android App Bundles, puede probarlos en versiones de prueba y usar APK existentes en versiones de producción. Así es como funciona:

  1. Firmas el App Bundle o APK y lo subes a Play Console.
  2. El proceso de firma de la aplicación depende de lo que estés descargando.
    • Paquete de aplicaciones. Google optimiza los archivos APK del App Bundle y luego los firma con una clave de firma de aplicación.
    • Archivo APK firmado con la clave de descarga. Google verifica su firma, la elimina y vuelve a firmar los archivos APK con la clave de firma de la aplicación.
    • Un archivo APK firmado con la clave de firma de la aplicación. Google verifica la firma.
  3. Google entrega archivos APK firmados a los usuarios.

Cómo registrarse en el programa de firma de aplicaciones de Google Play

Nuevas aplicaciones

Paso 1: crea una clave de descarga

  1. Cree una clave de descarga siguiendo las instrucciones.
  2. Firme el nuevo archivo APK con la clave de descarga.

Paso 2: preparar el lanzamiento

  1. , siguiendo las instrucciones.
  2. Una vez que haya elegido su tipo de versión, configure los ajustes de firma de su aplicación en "Permitir que Google proteja y administre la clave de firma de su aplicación".
  3. Si haces clic Continuar, la clave generada se convertirá en la clave de descarga que se utilizará para firmar versiones futuras. También puedes elegir lo siguiente Ajustes avanzados:
    • Utilice una clave para diferentes aplicaciones en la cuenta de desarrollador (opción 2).
    • Cargue la clave de firma de una aplicación existente (opción 2, 3 y 4), eligiendo el método de exportación y descarga más adecuado. Una vez que descargue la clave de firma de una aplicación y su certificado público, podrá utilizarla como clave de firma de la aplicación.

Nota. Para continuar, debe aceptar los Términos de uso e inscribirse en el Programa de firma de aplicaciones.

Paso 3: registre la clave de firma de su aplicación con sus proveedores de API

Si su aplicación utiliza una API, para autenticarse probablemente necesitará registrar un certificado de clave que Google utiliza para firmar su aplicación. Para buscar un certificado:

  1. Inicia sesión en Play Console.
  2. Seleccione una aplicación.
  3. En el menú de la izquierda, seleccione Gestión de la liberación > Firmas de aplicaciones.
    • Si el proveedor de API requiere un tipo diferente de huella digital, puede descargar el certificado original en formato DER y convertirlo según sea necesario utilizando las herramientas adecuadas.
Aplicaciones publicadas

Paso 1: Regístrese en el programa de firma de aplicaciones de Google Play

  1. Inicia sesión en Play Console.
  2. Seleccione una aplicación.
  3. En el menú de la izquierda, seleccione Gestión de la liberación > Firmas de aplicaciones.
  4. Si es necesario, lea los Términos de uso y haga clic en Aceptar.

Paso 2: envíe la clave original a Google y cree una clave de descarga

  1. Busque la clave de firma de la aplicación original.
  2. Inicia sesión en Play Console.
  3. Seleccione una aplicación.
  4. En el menú de la izquierda, seleccione Gestión de la liberación > Firmas de aplicaciones.
  5. Cargue una clave de firma de aplicación existente con el método que mejor se adapte a su proceso de lanzamiento.
  1. y sube el certificado a Google Play.
    • También puede utilizar la clave de firma de la aplicación como clave de descarga.
  2. Copie las huellas digitales (MD5, SHA-1 y SHA-256) del certificado de firma de la aplicación.
    • Para realizar pruebas, es posible que deba registrar un certificado de clave de inicio con el proveedor de API utilizando la huella digital del certificado y la clave de firma de la aplicación.

Paso 4: firme la próxima actualización de su aplicación con su clave de descarga

Las actualizaciones de aplicaciones publicadas deben firmarse con una clave de descarga.

Cómo crear una clave de descarga y actualizar almacenes de claves

Puedes crear una clave de descarga cuando te registras en el Programa de firma de aplicaciones de Google Play o puedes generar una más adelante en el Gestión de la liberación > Firmas de aplicaciones.

Para crear una clave de descarga, siga estos pasos:

  1. Siga las instrucciones en el sitio de desarrolladores de Android. Guarde la llave en un lugar seguro.
  2. Exporte el certificado de la clave de arranque en formato PEM. Reemplace los siguientes argumentos con un guión bajo:
    • $ keytool -export -rfc -keystore upload-keystore.jks -alias upload -file upload_certificate.pem
  3. Cuando se le solicite durante el proceso de emisión, descargue el certificado para registrarlo en Google.

Si está utilizando una clave de descarga:

  • La clave de descarga se registra en Google únicamente para autenticar la identidad del creador de la aplicación.
  • Su firma se elimina de todas las descargas de APK antes de que lleguen a los usuarios.
Restricciones
  • La clave de descarga debe utilizar cifrado RSA y debe tener un tamaño mínimo de 2048 bits.
  • No se admiten claves DSA y EC, ni claves RSA de menos de 2048 bits.
Actualización de almacenes de claves

Una vez que haya creado su clave de descarga, verifique y actualice las siguientes ubicaciones si es necesario:

  • sistema local;
  • protegido servidor local(con diferentes listas de control de acceso);
  • sistema en la nube (con varias listas de control de acceso);
  • servicios especiales de gestión de claves;
  • Repositorios de Git.

Cómo actualizar la clave de firma para instalaciones de nuevas aplicaciones

En algunos casos, es posible que pueda solicitar una actualización de la clave de firma de la aplicación. La nueva clave se utilizará para firmar nuevas instalaciones y actualizaciones de la aplicación, y la desactualizada se utilizará para actualizar las versiones firmadas que ya estén instaladas por los usuarios.

La clave de firma solo se puede actualizar una vez para cada aplicación. En el improbable caso de que utilice la misma clave de firma para que varias aplicaciones las ejecuten en el mismo proceso, la clave no se podrá actualizar.

Debe solicitar una actualización de la clave de firma de la aplicación en los siguientes casos:

  • Necesitas una clave más segura.
  • La clave de firma de la aplicación se ha visto comprometida.

Nota. La solicitud para actualizar la clave de firma de aplicaciones en Play Console no está relacionada con el reemplazo de claves en Android P y versiones posteriores. Actualmente, Google Play no admite este reemplazo de clave.

Notas importantes sobre la actualización de claves

Antes de solicitar una actualización clave, es importante comprender qué cambios implicará.

  • Si usa la misma clave de firma para que varias aplicaciones usen el mismo código o datos, deberá actualizar las aplicaciones para que reconozcan tanto las claves nuevas como las heredadas.
  • Si su aplicación utiliza una API, asegúrese de registrar los certificados para las claves de firma de aplicaciones nuevas y heredadas con el proveedor de API antes de actualizar su aplicación. Los certificados están disponibles en la página. Firma de aplicaciones Juega a la consola.
  • Si muchos usuarios de su aplicación instalan actualizaciones a través de redes de intercambio de archivos, solo podrán instalar actualizaciones firmadas con la misma clave que la aplicación instalada en sus dispositivos. Si las aplicaciones no se pueden actualizar porque versión instalada firmado con una clave diferente, los usuarios pueden desinstalarlo y reinstalarlo para recibir actualizaciones.
Solicite una actualización clave para nuevas instalaciones. Para hacer esto, siga estos pasos:
  1. Inicia sesión en Play Console.
  2. Seleccione una aplicación.
  3. En el menú de la izquierda, seleccione Gestión de la liberación > Firmas de aplicaciones.
  4. En la tarjeta "Actualizar clave de firma para instalaciones de nuevas aplicaciones", seleccione Solicitar una actualización clave.
  5. Elige qué hacer con el dispositivo.
    • Dependiendo de la opción que elija, es posible que deba comunicarse con el soporte para completar su solicitud.
  6. Permita que Google Play genere una nueva clave de firma de aplicación (recomendado) o descargue una.
    • Después de actualizar la clave de firma de su aplicación, si la clave coincide con su clave de descarga, puede continuar usando la clave de firma de aplicación anterior como clave de descarga o crear una nueva.
  • Si también publicó su aplicación fuera de Google Play o planea hacerlo, puede generar una clave de firma de aplicación compartida y cargarla en Google cuando se registre en el Programa de firma de aplicaciones de Google Play.
  • Para proteger su cuenta, habilitar la verificación en dos pasos para todas las cuentas que tienen acceso a Play Console.
  • Después de que el App Bundle se publique en la prueba o versión de trabajo Puede abrir el navegador de paquetes de aplicaciones y descargar un archivo ZIP que contiene todos los archivos APK para un dispositivo específico. Estos archivos APK ya están firmados con la clave de firma de la aplicación. Puede instalarlos en su dispositivo desde un archivo ZIP usando la utilidad línea de comando herramienta de paquete.
  • Para mayor seguridad, genere una nueva clave de descarga que sea diferente a la clave de firma de la aplicación.
  • Si desea probar un APK firmado con una clave de carga, registre la clave con un servicio o API que utilice la firma de la aplicación para la autenticación (como API mapas de Google o paquete de desarrollador de Facebook).
  • Si está utilizando la API de Google, puede registrar su certificado de carga en Google Cloud Console.

Qué hacer si la clave se pierde o es pirateada

Si ha perdido el acceso a su clave de descarga privada o ha sido pirateada, pregúntele al propietario de su cuenta. Al comunicarse con el soporte, el propietario de la cuenta debe adjuntar el archivo upload_certificate.pem.

Cuando el equipo de soporte registre una nueva clave de descarga, recibirá un correo electrónico y luego podrá actualizar sus almacenes de claves y registrar la clave con los proveedores de API.

¡Importante! Restablecer la clave de descarga no afecta la clave de firma de la aplicación, que Google Play utiliza para firmar archivos APK antes de enviarlos a los usuarios.

¿Fue útil esta información?

¿Cómo se puede mejorar este artículo?

A veces, algunas aplicaciones en Android no se adaptan de alguna manera al usuario. Un ejemplo es la publicidad intrusiva. Y también sucede que el programa es bueno para todos, pero la traducción es torcida o está completamente ausente. O, por ejemplo, el programa es una versión de prueba, pero no hay forma de obtener la versión completa. ¿Cómo cambiar la situación?

Introducción

En este artículo hablaremos de cómo desensamblar un paquete APK con una aplicación, mirar su estructura interna, desensamblar y descompilar el bytecode, y también intentaremos realizar varios cambios en las aplicaciones que pueden traernos un beneficio u otro.

Para hacer todo esto usted mismo, necesitará al menos conocimientos básicos del lenguaje Java, en el que están escritas las aplicaciones de Android, y del lenguaje XML, que se utiliza en todas partes en Android, desde la descripción de la aplicación en sí y sus derechos de acceso hasta el almacenamiento de cadenas que se mostrará en la pantalla. También necesitará la capacidad de utilizar software de consola especializado.

Entonces, ¿qué es un paquete APK en el que se distribuye absolutamente todo el software de Android?

Descompilación de aplicaciones

En este artículo, solo trabajamos con código de aplicación desensamblado, pero si se realizan cambios más serios en aplicaciones grandes, comprender el código pequeño será mucho más difícil. Afortunadamente, podemos descompilar el código dex en código Java, que, aunque no es original ni está compilado, es mucho más fácil de leer y comprender la lógica de la aplicación. Para ello necesitaremos dos herramientas:

  • dex2jar es un traductor del código de bytes de Dalvik al código de bytes de JVM, a partir del cual podemos obtener código en el lenguaje Java;
  • jd-gui es un descompilador que le permite obtener código Java legible a partir del código de bytes JVM. Como alternativa, puedes utilizar Jad (www.varaneckas.com/jad); Aunque es bastante antiguo, en algunos casos genera código más legible que Jd-gui.

Así es como se deben utilizar. Primero, ejecutamos dex2jar, especificando la ruta al paquete apk como argumento:

% dex2jar.sh correo.apk

Como resultado, el paquete Java mail.jar aparecerá en el directorio actual, que ya se puede abrir en jd-gui para ver el código Java.

Disposición de paquetes APK y recepción de ellos.

Bolsa de plastico aplicaciones de Android, de hecho, es un archivo ZIP normal, no se requieren herramientas especiales para ver el contenido y extraerlo. Basta con tener un archivador: 7zip para Windows o descomprimir la consola en Linux. Pero eso es todo sobre el envoltorio. ¿Qué hay adentro? En general, tenemos la siguiente estructura en su interior:

  • META-INF/- contiene un certificado digital de la aplicación que identifica a su creador y sumas de verificación de los archivos del paquete;
  • res/ - varios recursos que la aplicación utiliza en su trabajo, como imágenes, descripción declarativa de la interfaz, así como otros datos;
  • AndroidManifest.xml- descripción de la aplicación. Esto incluye, por ejemplo, una lista de permisos requeridos, la versión de Android requerida y la resolución de pantalla requerida;
  • clases.dex- código de bytes de aplicación compilado para máquina virtual Dalvík;
  • recursos.arsc- también recursos, pero de otro tipo - en particular, cadenas (sí, ¡este archivo se puede utilizar para la rusificación!).

Los archivos y directorios enumerados se encuentran, si no en todos, quizás en la gran mayoría de los APK. Sin embargo, hay algunos archivos/directorios no tan comunes que vale la pena mencionar:

  • activos- análogo de recursos. La principal diferencia es que para acceder a un recurso es necesario conocer su identificador, pero la lista de activos se puede obtener dinámicamente utilizando el método AssetManager.list() en el código de la aplicación;
  • biblioteca- Bibliotecas nativas de Linux escritas con NDK (Native Development Kit).

Este directorio lo utilizan los fabricantes de juegos, que colocan allí el motor del juego escrito en C/C++, así como los creadores de aplicaciones de alto rendimiento (por ejemplo, Google Chrome). Descubrimos el dispositivo. Pero, ¿cómo se obtiene el archivo del paquete de la aplicación que le interesa? Dado que no es posible recuperar archivos APK del dispositivo sin root (se encuentran en el directorio /data/app), y no siempre es recomendable rootear, existen al menos tres formas de obtener el archivo de la aplicación en su computadora:

  • Extensión de descarga de APK para Chrome;
  • Aplicación Leecher APK real;
  • varios alojamiento de archivos y Varezniks.

Cuál usar es cuestión de gustos; preferimos usar aplicaciones separadas, por lo que describiremos el uso de Real APK Leecher, especialmente porque está escrito en Java y, en consecuencia, funcionará en Windows o Nix.

Después de iniciar el programa, debe completar tres campos: correo electrónico, contraseña e ID del dispositivo, y seleccionar un idioma. Los dos primeros son el correo electrónico y la contraseña de tu cuenta de Google que utilizas en el dispositivo. El tercero es el identificador del dispositivo y se puede obtener escribiendo el código en el marcador. # #8255## y luego encontrar la línea de ID del dispositivo. Al completar, solo necesita ingresar la identificación sin el prefijo de Android.

Después de completar y guardar, a menudo aparece el mensaje "Error al conectarse al servidor". No tiene nada que ver con Google Play, así que no dudes en ignorarlo y buscar paquetes que te interesen.

Ver y modificar

Digamos que encontraste un paquete que te interesa, lo descargaste, lo descomprimiste... y cuando intentaste ver algún archivo XML, te sorprendiste al descubrir que el archivo no era texto. ¿Cómo descompilarlo y cómo trabajar con paquetes en general? ¿Es realmente necesario instalar el SDK? No, no es necesario instalar el SDK en absoluto. De hecho, todos los pasos para extraer, modificar y empaquetar paquetes APK requieren las siguientes herramientas:

  • Archivador ZIP para desempacar y empacar;
  • pequeño- Ensamblador/desensamblador de código de bytes de la máquina virtual Dalvik (code.google.com/p/smali);
  • apto- una herramienta para empaquetar recursos (de forma predeterminada, los recursos se almacenan en formato binario para optimizar el rendimiento de la aplicación). Incluido en el SDK de Android, pero se puede obtener por separado;
  • firmante- una herramienta para firmar digitalmente un paquete modificado (bit.ly/Rmrv4M).

Puede utilizar todas estas herramientas por separado, pero esto es un inconveniente, por lo que es mejor utilizar software de nivel superior creado sobre su base. Si trabaja en Linux o Mac OS X, existe una herramienta llamada apktool. Le permite descomprimir recursos en su forma original (incluidos archivos binarios XML y arsc), reconstruir un paquete con recursos modificados, pero no sabe cómo firmar paquetes, por lo que tendrá que ejecutar la utilidad de firma manualmente. A pesar de que la utilidad está escrita en Java, su instalación no es estándar. Primero necesitas obtener el archivo jar:

$ cd /tmp $ wget http://bit.ly/WC3OCz $ tar -xjf apktool1.5.1.tar.bz2

$ wget http://bit.ly/WRjEc7 $ tar -xjf apktool-install-linux-r05-ibot.tar.bz2

$ mv apktool.jar ~/bin $ mv apktool-install-linux-r05-ibot/* ~/bin $ export PATH=~/bin:$PATH

Si trabaja en Windows, existe una herramienta excelente llamada Virtuous Ten Studio, que también acumula todas estas herramientas (incluida la propia apktool), pero en lugar de una interfaz CLI proporciona al usuario una interfaz intuitiva. GUI, con el que podrás realizar operaciones de descompresión, desmontaje y descompilación en unos pocos clics. Esta herramienta es Donation-ware, es decir, a veces aparecen ventanas pidiéndote que consigas una licencia, pero al final esto se puede tolerar. No tiene sentido describirlo, porque puedes entender la interfaz en unos minutos. Pero apktool, debido a su naturaleza de consola, debería analizarse con más detalle.


Veamos las opciones de apktool. En resumen, hay tres comandos básicos: d (decodificar), b (compilar) y if (instalar marco). Si todo está claro con los dos primeros comandos, ¿qué hace la tercera declaración condicional? Descomprime el marco de interfaz de usuario especificado, que es necesario en los casos en los que se analiza cualquier paquete del sistema.

Veamos las opciones más interesantes del primer comando:

  • -s- no desmonte archivos dex;
  • -r- no descomprimir recursos;
  • -b- no insertar información de depuración en los resultados del desmontaje del archivo dex;
  • --ruta-marco- utilice el marco de interfaz de usuario especificado en lugar del integrado en apktool. Ahora veamos un par de opciones para el comando b:
  • -F- montaje forzado sin comprobar los cambios;
  • -a- indique la ruta a aapt (una herramienta para crear un archivo APK), si por alguna razón desea utilizarlo desde otra fuente.

Usar apktool es muy sencillo, para ello basta con especificar uno de los comandos y la ruta al APK, por ejemplo:

$ apktool d correo.apk

Después de esto, todos los archivos extraídos y desensamblados del paquete aparecerán en el directorio de correo.

Preparación. Deshabilitar la publicidad

La teoría es, por supuesto, buena, pero ¿para qué es necesaria si no sabemos qué hacer con el paquete desempaquetado? Intentemos aplicar la teoría a nuestro favor, es decir, modificar algún software para que no nos muestre publicidad. Por ejemplo, que sea Virtual Torch, una antorcha virtual. Este software es ideal para nosotros porque está repleto de publicidad molesta y, además, es lo suficientemente sencillo como para no perderse en la jungla del código.


Entonces, utilizando uno de los métodos anteriores, descargue la aplicación del mercado. Si decide utilizar Virtuous Ten Studio, simplemente abra el archivo APK en la aplicación y descomprímalo, cree un proyecto (Archivo -> Nuevo proyecto), luego seleccione Importar archivo en el menú contextual del proyecto. Si su elección recayó en apktool, simplemente ejecute un comando:

$ apktool d com.kauf.particle.virtualtorch.apk

Después de esto, aparecerá un árbol de archivos similar al descrito en la sección anterior en el directorio com.kauf.particle.virtualtorch, pero con un directorio pequeño adicional en lugar de archivos dex y un archivo apktool.yml. El primero contiene el código desensamblado del archivo ejecutable dex de la aplicación, el segundo contiene la información de servicio necesaria para que apktool vuelva a ensamblar el paquete.

El primer lugar donde debemos buscar es, por supuesto, AndroidManifest.xml. Y aquí nos encontramos inmediatamente con la siguiente línea:

No es difícil adivinar que es el responsable de otorgar permisos a la aplicación para utilizar la conexión a Internet. De hecho, si sólo queremos deshacernos de la publicidad, lo más probable es que simplemente necesitemos bloquear la aplicación de Internet. Intentemos hacer esto. Eliminamos la línea especificada e intentamos compilar el software usando apktool:

$ apktool b com.kauf.particle.virtualtorch

El archivo APK resultante aparecerá en el directorio com.kauf.particle.virtualtorch/build/. Sin embargo, no será posible instalarlo, ya que no tiene firma digital ni sumas de verificación de archivos (simplemente no tiene un directorio META-INF/). Debemos firmar el paquete usando la utilidad apk-signer. Lanzado. La interfaz consta de dos pestañas: en la primera (generador de claves) creamos claves, en la segunda (firmante de APK) firmamos. Para crear nuestra clave privada, complete los siguientes campos:

  • Archivo de destino- archivo de salida del almacén de claves; normalmente almacena un par de claves;
  • Contraseña Y Confirmar- contraseña para el almacenamiento;
  • Alias- nombre de la clave almacenada;
  • Contraseña de alias Y Confirmar- contraseña de clave secreta;
  • Validez- período de validez (en años). El valor predeterminado es óptimo.

Los campos restantes son, en general, opcionales, pero se debe completar al menos uno.


ADVERTENCIA

Para firmar una aplicación usando apk-signer, debe instalar el SDK de Android y especificar la ruta completa en la configuración de la aplicación.

Toda la información se proporciona únicamente con fines informativos. Ni los editores ni el autor son responsables de ningún posible daño causado por los materiales de este artículo.

Ahora puedes firmar el APK con esta clave. En la pestaña Firmante de APK, seleccione el archivo recién generado, ingrese la contraseña, el alias de clave y la contraseña, luego busque el archivo APK y haga clic audazmente en el botón "Firmar". Si todo va bien, se firmará el paquete.

INFORMACIÓN

Como firmamos el paquete con nuestra propia clave, entrará en conflicto con la aplicación original, lo que significa que cuando intentemos actualizar el software a través del mercado, recibiremos un error.

Sólo se requiere una firma digital para software de terceros, por lo que si está modificando aplicaciones del sistema, que se instalan copiándolos en el directorio /system/app/, no es necesario firmarlos.

Después de eso, descargue el paquete a su teléfono inteligente, instálelo y ejecútelo. ¡Listo, el anuncio desapareció! Sin embargo, en su lugar apareció un mensaje de que no tenemos Internet o no tenemos los permisos adecuados. En teoría, esto podría ser suficiente, pero el mensaje parece molesto y, para ser honesto, tuvimos suerte con una aplicación estúpida. Lo más probable es que el software escrito normalmente aclare sus credenciales o compruebe la conexión a Internet y, de lo contrario, simplemente se niegue a iniciarse. ¿Cómo ser en este caso? Por supuesto, edite el código.

Normalmente, los autores de aplicaciones crean clases especiales para mostrar anuncios y llaman a los métodos de estas clases cuando se inicia la aplicación o una de sus "actividades" (en términos simples, pantallas de aplicaciones). Intentemos encontrar estas clases. Vamos al directorio pequeño, luego a com (org contiene solo la biblioteca gráfica abierta cocos2d), luego a kauf (aquí está, porque este es el nombre del desarrollador y todo su código está ahí), y aquí está, el directorio de marketing. En su interior encontramos un montón de archivos con la extensión smali. Estas son clases, y la más notable de ellas es la clase Ad.smali, por cuyo nombre es fácil adivinar que es la que muestra publicidad.

Podríamos cambiar la lógica de su funcionamiento, pero sería mucho más fácil simplemente eliminar las llamadas a cualquiera de sus métodos desde la propia aplicación. Por tanto, salimos del directorio de marketing y nos dirigimos al directorio de partículas adyacente, y luego a virtualtorch. El archivo MainActivity.smali merece especial atención aquí. Esta es una clase estándar de Android creada por el SDK de Android y instalada como punto de entrada a la aplicación (análoga a la función principal en C). Abra el archivo para editarlo.

En el interior hay un código pequeño (ensamblador local). Es bastante confuso y difícil de leer debido a su naturaleza de bajo nivel, por lo que no lo estudiaremos, simplemente encontraremos todas las referencias a la clase Ad en el código y las comentaremos. Ingresamos la línea “Anuncio” en la búsqueda y llegamos a la línea 25:

Campo de anuncio privado:Lcom/kauf/marketing/Ad;

Aquí se crea un campo de anuncio para almacenar un objeto de clase de anuncio. Comentamos colocando un cartel ### delante de la fila. Seguimos la búsqueda. Línea 423:

Nueva instancia v3, Lcom/kauf/marketing/Ad;

Aquí es donde ocurre la creación del objeto. Comentemos. Continuamos la búsqueda y encontramos en las líneas 433, 435, 466, 468, 738, 740, 800 y 802 llamadas a métodos de la clase Ad. Comentemos. Parece que eso es todo. Ahorrar. Ahora es necesario volver a armar el paquete y verificar su funcionalidad y la presencia de publicidad. Para garantizar la pureza del experimento, devolvemos la línea eliminada de AndroidManifest.xml, ensamblamos el paquete, firmamos e instalamos.

Nuestro conejillo de indias. Publicidad visible

¡Ups! La publicidad desapareció sólo mientras la aplicación se estaba ejecutando, pero permaneció en el menú principal, que vemos cuando iniciamos el software. Entonces, espere, pero el punto de entrada es la clase MainActivity y el anuncio desapareció mientras la aplicación se estaba ejecutando, pero permaneció en el menú principal, entonces, ¿el punto de entrada es diferente? Para identificar el verdadero punto de entrada, vuelva a abrir el archivo AndroidManifest.xml. Y sí, contiene las siguientes líneas:

Nos dicen (y, lo que es más importante, a Android) que se debe iniciar una actividad denominada Inicio en respuesta a la generación de una intención (evento) android.intent.action.MAIN de la categoría android.intent.category.LAUNCHER. Este evento se genera cuando toca el ícono de la aplicación en el iniciador, por lo que determina el punto de entrada, es decir, la clase Inicio. Lo más probable es que el programador primero haya escrito una aplicación sin un menú principal, cuyo punto de entrada era la clase estándar MainActivity, y luego agregó una nueva ventana (actividad) que contiene el menú y se describe en la clase Inicio, y la convirtió manualmente en la entrada. punto.

Abra el archivo Start.smali y busque nuevamente la línea “Ad”, encontramos en las líneas 153 y 155 una mención de la clase FirstAd. También está en el código fuente y, a juzgar por su nombre, se encarga de mostrar anuncios en la pantalla principal. Miremos más allá, está la creación de una instancia de la clase FirstAd y una intención que, según el contexto, está relacionada con esta instancia, y luego la etiqueta cond_10, cuya transición condicional se realiza exactamente antes de crear una instancia. de la clase:

If-ne p1, v0, :cond_10 .line 74 nueva instancia v0, Landroid/content/Intent; ... :cond_10

Lo más probable es que el programa calcule de alguna manera aleatoriamente si se debe mostrar publicidad en la pantalla principal y, en caso contrario, salte directamente a cond_10. Bien, simplifiquemos su tarea y reemplacemos la transición condicional por una incondicional:

#si-ne p1, v0, :cond_10 ir a:cond_10

No hay más menciones de FirstAd en el código, por lo que cerramos el archivo y volvemos a ensamblar nuestra antorcha virtual usando apktool. Cópialo en tu teléfono inteligente, instálalo y ejecútalo. Voila, toda la publicidad ha desaparecido, por lo que nos felicitamos a todos.

Resultados

Este artículo es sólo una breve introducción a los métodos para piratear y modificar aplicaciones de Android. Muchos problemas quedaron detrás de escena, como la eliminación de protección, el análisis de código ofuscado, la traducción y reemplazo de recursos de aplicaciones, así como la modificación de aplicaciones escritas con el NDK de Android. Sin embargo, teniendo conocimientos básicos, es sólo cuestión de tiempo descubrirlo todo.

Vistas de publicaciones: 5,618

Estudio Android Proporciona amplias oportunidades tanto para el desarrollo de aplicaciones como para aumentar la automatización y la comodidad en la programación.

Si está utilizando un sistema de compilación Gradle Para crear sus aplicaciones, también puede configurar varias opciones para crear firmas para sus aplicaciones.

Probablemente no desee publicar sus claves de firma, contraseñas y nombres de usuario en un repositorio público (o incluso privado). Por lo tanto, puede definir la clave, la contraseña y el nombre de usuario como propiedades en un archivo separado.

Antes de comenzar a firmar su aplicación, debe crear una nueva propiedad en su archivo gradle.properties. llamémoslo Claves.repo y, como valor, especifique la ruta a la carpeta donde posteriormente se ubicará el almacén de claves y el archivo con propiedades (por ejemplo, C:/Usuarios/Nombre de usuario/.signing).

Keys.repo=C:/Users/Nombre de usuario/.signing

Luego debe crear esta carpeta o, si especificó una existente, abrirla. Necesitas crear un archivo en él. SuNombreProyecto.properties, dentro del cual la ruta al almacén de claves, el alias de clave y la contraseña se escribirán como propiedades en el siguiente formulario.

RELEASE_STORE_FILE=/SuNombreProyecto/KeyStoreName.jks RELEASE_STORE_PASS=****** RELEASE_ALIAS=KeyAlias ​​​​RELEASE_KEY_PASS=******

¿Cómo crear un almacén de claves?

Si no tiene un almacén de claves, puede crear uno fácilmente con usando Android Estudio. Para hacer esto, seleccione el elemento del menú. Construir -> Generar APK firmado.

En la ventana que aparece, debe hacer clic Crear nuevo... Como resultado, se abrirá una ventana en la que puede especificar dónde se ubicará el almacenamiento de claves (para esta lección, es mejor seleccionar inmediatamente la ruta que especificó en SuNombreProyecto.properties en propiedad RELEASE_STORE_FILE), así como información clave.

Entonces necesitas crear una carpeta. Su nombre de proyecto y muévelo allí archivo requerido tiendas de llaves.

Ahora puede proceder directamente al proceso de firma. Para hacer esto, necesita abrir el archivo en su proyecto. construir.gradle(ubicado en la carpeta de la aplicación). Dentro del bloque androide necesitas agregar el siguiente código.

SigningConfigs ( depuración ( /* no hay cambios aquí */ ) lanzamiento ( if (project.hasProperty("Keys.repo")) ( def projectPropsFile = file(project.property("Keys.repo") + "/YourProjectName.properties " ) if (projectPropsFile.exists()) (Propiedades props = new Properties() props.load(new FileInputStream(projectPropsFile)) storeFile file(file(project.property("Keys.repo") + props["RELEASE_STORE_FILE"]) ) storePassword props["RELEASE_STORE_PASS"] keyAlias ​​​​props["RELEASE_ALIAS"] keyPassword props["RELEASE_KEY_PASS"] ) ) else ( println "===================== = ====================================" println " - Configure el entorno de compilación de lanzamiento, por ejemplo, en ~/.directorio de firma" println "============================================ ================== ==========" ) ) )

¿Cuáles son los diferentes esquemas para obtener una firma?

Existen dos esquemas para obtener una firma APK: tarro v1 Y v2 APK completo.

En el primer caso está firmado. FRASCO-archivo, que es manera tradicional firma. La firma v1 no protege algunas partes del APK, como los metadatos ZIP. El verificador de APK debe manejar una gran cantidad de estructuras de datos que no son de confianza (aún no verificadas) y luego descartar datos que no están firmados, lo que deja una gran superficie de ataque. Además, el verificador de APK debe descomprimir todas las entradas comprimidas, lo que desperdicia mucho tiempo y memoria. Para solucionar estos problemas, se ha desarrollado el segundo esquema v2 Full APK.

El esquema v2 se presentó en Android 7.0 Turrón (API 25) y funciona a partir de la versión Estudio Android 2.2 Y Complemento de Android Gradle 2.2. Este esquema proporciona una instalación de aplicaciones más rápida y una buena protección contra cambios no autorizados en el APK. El contenido del APK se procesa y firma, luego el resultado Bloque de firma APK insertado en el APK.

Durante la verificación, el esquema v2 trata el APK como un blob y realiza la verificación de la firma en todo el archivo. Cualquier modificación del APK, incluidas las modificaciones de los metadatos ZIP, invalida la firma. Esta forma de verificación es mucho más rápida y puede detectar más modificaciones no autorizadas.

El nuevo formato es compatible con versiones anteriores, por lo que los APK firmados con el nuevo esquema se pueden instalar en dispositivos más antiguos (que simplemente ignorarán la nueva firma) siempre que esos APK también estén firmados con el esquema v1.

De forma predeterminada, la firma utiliza ambos esquemas para que las aplicaciones se puedan instalar en cualquier dispositivo. Sin embargo, si es necesario, puede desactivar la firma v1 o v2. Para hacer esto, en el código anterior en el bloque liberar Basta añadir las siguientes líneas.

V1SigningEnabled falso

V2SigningEnabled falso

También es importante tener en cuenta que debe firmar con el esquema v1 antes de firmar con el esquema v2, ya que el APK no pasará la verificación bajo el esquema v2 si se firma con certificados adicionales después de firmar con el esquema v2.

Una vez agregado el código, incluya este código en un bloque. tipos de construcción adentro liberar. Por ejemplo:

BuildTypes (lanzamiento (minifyEnabled true squeezeResources true proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" signingConfig signingConfigs.release))

Ahora puedes hacerlo de forma segura en el elemento del menú. Construir elegir Construir APK, habiendo cambiado previamente el tipo de montaje de depurar en liberar. Como puede ver, este método es conveniente porque es automático, solo necesita configurarlo una vez y sus almacenamientos de claves pueden estar seguros.


Arriba