Menú
Está libre
Registro
hogar  /  Multimedia/ Cómo construir un archivo apk. Matices de los APK del sistema de edición

Cómo construir un archivo apk. Matices de los APK del sistema de edición

Mencioné la aplicación SmartAPKTool. Puede descomprimir, empaquetar y firmar archivos apk modificados. Su ventaja es la presencia de una interfaz gráfica. Sin embargo, también hay un serio inconveniente. SmartAPKTool no se ha actualizado durante mucho tiempo y el programa no desempaqueta y empaqueta correctamente las aplicaciones para las últimas versiones de Android. Por ello, aquí intentaré explicar cómo utilizar la aplicación para estos fines. herramienta apk.

Observación 1.
El programa SmartAPKTool sigue siendo cómodo de usar para firmar los archivos apk recopilados.
Observación 2.
Los enlaces a los programas mencionados en el artículo son ↓

Programa herramienta apk no tiene una interfaz gráfica. Esto es una desventaja para aquellos que no están acostumbrados a trabajar con la línea de comandos. Pero hay una ventaja: a diferencia de SmartAPKTool, veremos todos los errores, lo que significa que sabremos qué corregir.

Descarguemos dos archivos: uno común para todos los sistemas, el otro para nuestro sistema (en el ejemplo, Windows):

Descomprimamos ambos archivos en la misma carpeta vacía (en nuestro ejemplo C:\apktool\ ). Su contenido debería verse así:

A partir de ahora podemos utilizar el programa herramienta apk.

Observación 3.
Los usuarios de versiones de Linux de 64 bits deberán instalar el paquete ia32-libs:

sudo apt-get install ia32-libs

En la misma carpeta ponemos el archivo que necesitamos descomprimir. Por ejemplo, que se llame orig.apk
Presionando la tecla Shift y manteniéndola presionada, haga clic derecho en cualquier espacio vacío en la carpeta (¡no haga clic en los archivos!). Luego seleccione "Abrir ventana de comandos". En la consola que aparece, escribe:

apktool decodificar orig.apk

El archivo se descomprimirá:

Ahora tenemos una carpeta con la aplicación desempaquetada en el directorio C:\apktool\. Tiene el mismo nombre que el archivo original, menos la extensión: C:\apktool\orig\ . Podemos cambiar los archivos fuente como se describe en el artículo Android: cómo instalar dos aplicaciones idénticas en un teléfono. Una vez que hayamos realizado los cambios, crearemos una copia de la aplicación empaquetando los archivos de origen en apk:

apktool compilar resultado original.apk

Aquí result.apk es el nombre de archivo que se nos ocurrió para la creación de la copia. Si no hay errores, entonces se construirá el archivo:

El resto está fuera del alcance del artículo:

  1. Si hay errores durante el ensamblaje, debe encontrar su causa y solucionarlo.
  2. Queda por firmar el archivo resultante result.apk. Esto se puede hacer usando SmartAPKTool, como se mencionó anteriormente; todo al respecto es intuitivo. También hay otras formas de firmar un archivo apk.
  3. Al instalar una copia, cuando se inicia o se ejecuta, también pueden ocurrir errores. Deben detectarse con la utilidad adb, que forma parte del SDK de Android.

Es necesario firmar la aplicación, de lo contrario no se instalará. Los errores no son tan comunes, y los problemas más comunes que los causan se describen en el artículo.

En este artículo aprenderás en qué consiste una aplicación de Android, cómo abrir un archivo APK y con qué programas.

¿Qué es un archivo APK?

APK es el formato del sistema operativo Android que se usa para archivar archivos de aplicaciones ejecutables, y el nombre del archivo en sí puede ser cualquier cosa, pero la extensión solo debe verse como .apk. Los análogos de APK en otros sistemas operativos son .msi en Windows, .sis en Symbian, .rpm o .deb en Linux.

vamos a ver que hay dentro
De hecho, .apk es un archivo ZIP, por lo que puede consultar el dispositivo interno utilizando cualquier administrador de archivos o archivador, como WinRAR o la aplicación móvil X-plore.




Al mismo tiempo, vale la pena recordar que solo obtiene acceso visual a los recursos internos, las opciones de edición son extremadamente limitadas.

Considere la estructura
Dentro del .apk vemos una serie de archivos y carpetas, averigüemos para qué sirven:

  • AndroidManifest.xml es una especie de "pasaporte" de la aplicación desde el que puedes conocer todos los puntos principales, requisitos, versión, permisos y más.
  • META-INF este archivo contiene metadatos, es decir, datos sobre datos, sumas de verificación, rutas de datos, rutas de recursos y sumas de verificación, certificados. Puede abrir este archivo con cualquier editor de texto, pero se recomienda Notepad++.
  • La carpeta res contiene todos los recursos del programa, recursos gráficos como iconos, imágenes, texto, elementos GUI. También puede acceder fácilmente a la carpeta.
  • classes.dex: el código de programa directo de la aplicación ejecutada por la máquina virtual Dalvik VM, puede ver lo que hay dentro de este archivo solo descompilando el .apk, hablaremos de esto en otros artículos. resources.arsc - archivo XML compilado, este archivo contiene datos sobre todos los recursos involucrados en el programa.
  • lib: una carpeta con bibliotecas nativas, a cuyos recursos solo se puede acceder cuando se usan programas especializados. También en el APK, puede haber archivos y carpetas como com, org, udk, pero no siempre.

Ahora veamos la estructura interna con más detalle, para ello necesitamos un programa descompilador, Java y un archivo APK. La herramienta principal para desensamblar .apk es Apktool, pero este programa solo funciona desde la línea, lo cual no es muy conveniente. Para un análisis más rápido y conveniente, puede usar APKing, sigue siendo el mismo Apktool, pero con la capacidad de trabajar desde el menú contextual.


Y así instalamos APKing como cualquier aplicación para Windows y al seleccionar .apk le damos clic con el botón derecho del mouse y al mismo tiempo Shift, luego de lo cual veremos lo siguiente:



Y seleccionamos la acción necesaria, por ejemplo, descompilar por completo, luego el programa completará la operación y creará una carpeta con el mismo nombre.



Al abrir la carpeta, tendremos acceso a todos los recursos del archivo APK.



Ahora todos los archivos de texto se pueden editar, mientras observa las reglas básicas, puede usar el popular programa Notepad ++, por ejemplo, considere AndroidManifest.xml

En el proceso de uso de varios firmware para dispositivos Android, a veces es necesario cambiar de alguna manera las aplicaciones del sistema integradas en el sistema operativo. En este artículo, consideraremos este tema en detalle.

Naturalmente, debe desensamblar y volver a ensamblar el archivo APK del sistema para que funcione de manera adecuada y estable. Veamos paso a paso lo que hay que hacer para esto.

Primero, necesita deodexar los archivos APK del sistema. Le diremos cómo hacer esto en.

Entonces, el archivo .apk ha sido descodificado y descompilado. Analizamos la aplicación que nos interesa, llámese, para mayor claridad del ejemplo, estructura- resolución. apk. En la cabecera lo recordamos como la aplicación original.

Supongamos que hemos realizado todos los cambios necesarios en la aplicación. Hablaremos más sobre todos los aspectos de los archivos APK en . Ahora tenemos que empaquetarlo de nuevo. Recordemos la aplicación empaquetada terminada en nuestras mentes como una aplicación modificada 2.

Ahora explicaremos por qué fue necesario recordar mentalmente las aplicaciones como originales y modificadas 2. Una aplicación compilada por ApkTool (o usando una extensión de interfaz gráfica de usuario como SmartApkTool) no funcionará, pero esto no es un problema. Realizamos las siguientes acciones:

A veces, algunas aplicaciones en Android no se adaptan al usuario por alguna razón. Un ejemplo son los anuncios molestos. Y sucede de esa manera: todos son buenos en el programa, pero solo la traducción está torcida o completamente ausente. O, por ejemplo, el programa es 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 sobre cómo desmontar un APK con una aplicación, mirar su estructura interna, desmontar y descompilar el bytecode, y también intentaremos hacer varios cambios en las aplicaciones que nos pueden traer tal o cual beneficio.

Para hacer todo esto usted mismo, necesitará al menos un conocimiento básico del lenguaje Java, en el que se escriben las aplicaciones de Android, y del lenguaje XML, que se usa 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 manejar software de consola especializado.

Entonces, ¿cuál es el paquete APK en el que se distribuye absolutamente todo el software para Android?

Descompilación de aplicaciones

En el artículo, solo trabajamos con código de aplicación desensamblado, sin embargo, si realiza cambios más serios en aplicaciones grandes, será mucho más difícil entender el código pequeño. Afortunadamente, podemos descompilar el código dex en código Java, que, aunque no es original ni compilable, es mucho más fácil de leer y comprender la lógica de la aplicación. Para hacer esto, necesitamos dos herramientas:

  • dex2jar: traductor del código de bytes de Dalvik al código de bytes de JVM, en función del cual podemos obtener el código de Java;
  • jd-gui es un descompilador en sí mismo que le permite obtener código Java legible a partir del código de bytes de JVM. Alternativamente, puede usar Jad (www.varanecas.com/jad); aunque es bastante antiguo, en algunos casos genera código más legible que Jd-gui.

Deberían usarse así. Primero, lanzamos 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.

Organizar paquetes APK y obtenerlos

Un paquete de aplicación de Android es esencialmente un archivo ZIP normal que no requiere ninguna herramienta especial para ver el contenido y descomprimir. Es suficiente tener un archivador: 7zip para Windows o descompresión de consola en Linux. Pero eso es sobre el envoltorio. ¿Qué hay adentro? En el interior, generalmente tenemos la siguiente estructura:

  • META-INF/- contiene un certificado digital de la aplicación, que certifica 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, una descripción declarativa de la interfaz y otros datos;
  • AndroidManifest.xml- descripción de la aplicación. Esto incluye, por ejemplo, la lista de permisos requeridos, la versión requerida de Android y la resolución de pantalla requerida;
  • clases.dex- código de bytes de aplicación compilado para la máquina virtual Dalvik;
  • recursos.arsc- también recursos, pero de un tipo diferente - en particular, cadenas (¡sí, este archivo se puede usar para la rusificación!).

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

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

Este directorio lo utilizan los fabricantes de juegos, donde colocan su motor de juego escrito en C/C++, así como los creadores de aplicaciones de alto rendimiento (por ejemplo, Google Chrome). Entendí el dispositivo. Pero, ¿cómo obtener el archivo del paquete de la aplicación de interés? Dado que no es posible obtener archivos APK del dispositivo sin rootear (están en el directorio / data / app), y no siempre es recomendable rootear, hay al menos tres formas de obtener el archivo de la aplicación en la computadora:

  • Extensión APK Downloader para Chrome;
  • Aplicación Real APK Leecher;
  • varios alojamiento de archivos y warezniki.

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á incluso en Windows, incluso en 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 su cuenta de Google que utiliza en el dispositivo. El tercero es el ID del dispositivo, y puede obtenerlo marcando el código en el marcador. # #8255## y luego encontrar la línea ID del dispositivo. Al completar, debe ingresar solo la ID 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.

Revisión y modificación

Digamos que encontró un paquete que le interesa, lo descargó, lo descomprimió... y cuando trató de ver un archivo XML, se sorprendió al descubrir que el archivo no es un archivo de texto. ¿Cómo descompilarlo y cómo trabajar con paquetes en general? ¿Es realmente necesario instalar el SDK? No, no necesita instalar el SDK. De hecho, para todos los pasos para descomprimir, modificar y empaquetar paquetes APK, se necesitan las siguientes herramientas:

  • archivador ZIP para desembalar y embalar;
  • pequeño- ensamblador/desensamblador del bytecode 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 forma binaria para optimizar el rendimiento de la aplicación). Incluido con el SDK de Android, pero se puede obtener por separado;
  • Firmante- una herramienta para firmar digitalmente un paquete modificado (bit.ly/Rmrv4M).

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

$ 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 trabajas en Windows, entonces existe una excelente herramienta para ello llamada Virtual 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 gráfica intuitiva con la que realice operaciones de desempaquetado, desensamblado y descompilado con unos pocos clics. Esta herramienta es Donation-ware, es decir, a veces aparecen ventanas con una propuesta para obtener una licencia, pero esto, al final, se puede tolerar. No tiene sentido describirlo, porque puedes entender la interfaz en unos minutos. Pero apktool, debido a su naturaleza de consola, debe analizarse con más detalle.


Considere las opciones de apktool. En resumen, hay tres comandos principales: d (decodificar), b (construir) y if (instalar marco). Si todo está claro con los dos primeros comandos, ¿qué hace el tercero, el operador condicional? Desempaqueta el marco de la interfaz de usuario especificado, que es necesario cuando disecciona un paquete del sistema.

Considere las opciones más interesantes del primer comando:

  • -s- no desmonte los archivos dex;
  • -r- no descomprima los recursos;
  • -b- no inserte información de depuración en los resultados del desmontaje del archivo dex;
  • --frame-path- use el marco de interfaz de usuario especificado en lugar de la herramienta apk incorporada. Ahora considere un par de opciones para el comando b:
  • -F- montaje forzado sin control de cambios;
  • -a- especifique la ruta a aapt (la herramienta para construir el archivo APK) si por alguna razón desea utilizarlo desde otra fuente.

Usar apktool es muy simple, todo lo que necesita hacer es especificar uno de los comandos y la ruta al APK, por ejemplo:

$ apktool d mail.apk

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

Preparación. Desactivar los anuncios

La teoría es, por supuesto, buena, pero ¿por qué es necesaria si no sabemos qué hacer con el paquete desempaquetado? Intentemos aplicar la teoría en nuestro propio beneficio, es decir, modificamos algún software para que no nos muestre anuncios. Por ejemplo, que sea Virtual Torch, una antorcha virtual. Para nosotros, este software es perfecto, porque está lleno de anuncios molestos y es lo suficientemente simple como para no perderse en la naturaleza 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, para lo cual cree un proyecto (Archivo -> Nuevo proyecto), luego seleccione Importar archivo en el menú contextual del proyecto. Si su elección recayó en apktool, basta con ejecutar un comando:

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

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

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

Es fácil adivinar que ella es la encargada de otorgar a la aplicación los permisos para utilizar la conexión a Internet. De hecho, si solo queremos deshacernos de los anuncios, lo más probable es que nos baste con prohibir la aplicación en Internet. Tratemos de hacerlo. Elimine la línea especificada e intente 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 se puede instalar porque no tiene una firma digital y sumas de verificación de archivos (simplemente no tiene un directorio META-INF/). Tenemos que firmar el paquete con 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, rellene los siguientes campos:

  • Archivo de destino- archivo de salida del almacén de claves; generalmente almacena un par de llaves;
  • Clave y Confirmar- contraseña para el almacenamiento;
  • Alias- nombre de la clave en el repositorio;
  • 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, en general, son opcionales, pero debe completar al menos uno.


ADVERTENCIA

Para firmar una aplicación con 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 los posibles daños causados ​​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 con valentía en el botón "Firmar". Si todo va bien, el paquete será firmado.

INFORMACIÓN

Dado que 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, obtendremos un error.

Solo el software de terceros necesita una firma digital, por lo que si está modificando las aplicaciones del sistema que están instaladas copiándolas en el directorio /system/app/, entonces no necesita firmarlas.

Después de eso, colocamos el paquete en el teléfono inteligente, lo instalamos y lo ejecutamos. Voila, el anuncio se ha ido! En cambio, sin embargo, apareció un mensaje de que no tenemos Internet o no tenemos los permisos apropiados. 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 un software bien escrito aclare sus credenciales o verifique si hay una conexión a Internet y, de lo contrario, simplemente se negará a iniciar. ¿Cómo ser en este caso? Por supuesto, edite el código.

Por lo general, los autores de aplicaciones crean clases especiales para mostrar anuncios y llamar a métodos de estas clases durante el inicio de la aplicación o una de sus "actividades" (en términos simples, pantallas de aplicación). Tratemos de encontrar estas clases. Vamos al directorio smali, luego com (en org solo está la biblioteca gráfica abierta cocos2d), luego kauf (exactamente allí, porque este es el nombre del desarrollador y todo su código está allí) - y aquí está, el directorio de comercialización. Dentro 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 muestra anuncios.

Podríamos cambiar la lógica de su trabajo, pero sería mucho más fácil eliminar estúpidamente las llamadas a cualquiera de sus métodos desde la propia aplicación. Por lo tanto, salimos del directorio de marketing y vamos al directorio de partículas vecinas, y luego a virtualtorch. El archivo MainActivity.smali merece especial atención aquí. Esta es una clase estándar de Android que genera el SDK de Android y se establece como el punto de entrada a la aplicación (análogo a la función principal en C). Abra el archivo para editarlo.

Dentro está el código smali (ensamblador local). Es bastante confuso y difícil de leer debido a su naturaleza de bajo nivel, por lo que no lo estudiaremos, sino que simplemente encontraremos todas las menciones de la clase Ad en el código y las comentaremos. Conducimos en la cadena "Ad" en la búsqueda y llegamos a la línea 25:

Anuncio privado de campo: Lcom/kauf/marketing/Ad;

Aquí, se crea un anuncio de campo para almacenar un objeto de clase Anuncio. Comentamos colocando el signo ### delante de la línea. Continuamos la búsqueda. Línea 423:

Instancia nueva v3, Lcom/kauf/marketing/Ad;

Aquí es donde se crea el objeto. comentamos. Continuamos la búsqueda y encontramos en las líneas 433, 435, 466, 468, 738, 740, 800 y 802 llamadas a los métodos de la clase Ad. comentamos. Parece que eso es todo. Nosotros salvamos. Ahora el paquete debe volver a ensamblarse y verificar su rendimiento y la presencia de publicidad. Para la pureza del experimento, devolvemos la línea eliminada de AndroidManifest.xml, recopilamos el paquete, lo firmamos y lo instalamos.

Nuestro conejillo de Indias. publicidad visible

Op-pa! La publicidad desaparecía solo mientras se ejecutaba la aplicación, pero permanecía 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 se ejecutaba la aplicación, pero permaneció en el menú principal, ¿entonces el punto de entrada es diferente? Para revelar el verdadero punto de entrada, volvemos 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 la actividad denominada Inicio debe iniciarse en respuesta a la generación de la intención (evento) android.intent.action.MAIN de la categoría android.intent.category.LAUNCHER. Este evento se genera cuando toca el icono de la aplicación en el iniciador, por lo que define el punto de entrada, es decir, la clase de inicio. Lo más probable es que el programador primero escribió una aplicación sin un menú principal, cuyo punto de entrada era la clase MainActivity estándar, y luego agregó una nueva ventana (actividad) que contenía un menú y se describió en la clase Inicio, y la convirtió manualmente en una entrada. punto.

Abrimos el archivo Start.smali y nuevamente buscamos la línea "Ad", encontramos en las líneas 153 y 155 la mención de la clase FirstAd. También está en el código fuente y, a juzgar por el nombre, es responsable de mostrar anuncios en la pantalla principal. Miramos más allá, hay una creación de una instancia de la clase FirstAd y una intención, de acuerdo con el contexto relacionado 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 aleatoriamente de alguna manera si es necesario mostrar anuncios en la pantalla principal y, si no, salta directamente a cond_10. Bien, simplifiquemos su tarea y reemplacemos la transición condicional por una incondicional:

#if-ne p1, v0, :cond_10 goto:cond_10

No hay más menciones de FirstAd en el código, así que cerramos el archivo y volvemos a ensamblar nuestra antorcha virtual usando apktool. Copie al teléfono inteligente, instale, ejecute. Voila, todos los anuncios se han ido, felicidades a todos nosotros.

Resultados

Este artículo es solo una breve introducción a los métodos para abrir y modificar aplicaciones de Android. Muchos problemas quedaron tras bambalinas, como la eliminación de la protección, el análisis del código ofuscado, la traducción y el reemplazo de los recursos de la aplicación, así como la modificación de las aplicaciones escritas con el NDK de Android. Sin embargo, tener conocimientos básicos, entender todo esto es solo cuestión de tiempo.

Recopilar dichos archivos en un APK es bastante simple. Para hacer esto, debe ejecutar apktool con el indicador de compilación apropiado y pasarle la ruta a la carpeta que contiene la aplicación descompilada. Por ejemplo, si tenemos una carpeta de aplicaciones que se encuentra en el mismo directorio que apktool, el comando se verá así:

Caparazón

java -jar apktool.jar b aplicación

java - jar apktool .jar b aplicación

Después del ensamblaje, el archivo APK terminado estará en el directorio aplicación/compilación. El siguiente paso es firmar el APK. Esto se hace para que la aplicación funcione en dispositivos donde está prohibida la depuración. Es decir, está prohibido el lanzamiento de aplicaciones no firmadas en dichos dispositivos. Puede leer más sobre los certificados digitales y el procedimiento para firmar archivos aquí.

Firmar un archivo es muy simple: hay una utilidad especial para esto llamada signapk. Se debe ejecutar pasando certificados como argumentos, luego la ruta a la aplicación, y finalmente la ruta a la aplicación firmada (el resultado donde guardar). Se ve algo como esto:

Caparazón

java -jar signapk.jar testkey.x509.pem testkey.pk8 *.apk apk_signed.apk

java - jar signapk .jar testkey .x509 .pem testkey .pk8 * .apk apk_signed .apk

¿Dónde puedo obtener tal certificado, te preguntarás? Los certificados se pueden encontrar en Internet. O generarlo usted mismo. Se pueden encontrar instrucciones detalladas sobre cómo configurar y generar todos los archivos necesarios, por ejemplo.

Conclusión

Como ves, descompilar y construir archivos APK es un proceso bastante sencillo, que además se puede automatizar, facilitándolo al investigador. La máquina virtual Dalvik en sí también es fácil de aprender y abrir, lo que, por un lado, reduce el umbral de entrada para los desarrolladores y, por otro lado, es la razón principal de un porcentaje tan alto de piratería en la plataforma Android. Esta es en parte la razón por la que los desarrolladores, por ejemplo, de juegos, generalmente no están interesados ​​en lanzar juegos interesantes con una historia. Es mucho más rentable con la actitud actual de los usuarios remachar granjas asombrosamente similares con donaciones. Por lo tanto, compramos aplicaciones, apoyamos a los desarrolladores y, como resultado, obtenemos contenido interesante. ¡Pero no hay absolutamente ninguna necesidad de donar!

Gracias a todos, nos vemos de nuevo.