Programme pour changer d'apk. Bases de l'édition des applications système Android (apk). Disposition des packages APK et réception de ceux-ci

APK est un format utilisé dans le système d'exploitation Android pour les fichiers d'application exécutables archivés. L'analogue, par exemple, sous Windows est .msi, sous Symbian - .sis, sous Linux - .rpm ou .deb. Dans cet article, nous comprendrons de manière aussi détaillée que possible tous les problèmes concernant ce format de fichier.

Le processus de démontage, d’édition et d’assemblage « correctement » est appelé rétro-ingénierie. Que faut-il pour cela ? Les outils suivants sont requis :

Apktool. Il est plus pratique à utiliser avec le shell SmartApktool ; vous pouvez également utiliser des fichiers batch prêts à l'emploi, par exemple ApktoolBAT.

Notepad++ - non requis, mais fortement recommandé.

7zip ou WinRar, ou tout autre programme d'archivage, mais l'un d'entre eux est recommandé.

Firmware désodexé.

Il existe plusieurs façons d'installer des applications sur le système d'exploitation Android. Le premier, et également le principal, passe directement par jeu de Google(Android Market), c'est-à-dire provenant d'une source officielle, qui nécessite un compte Google. De nombreuses applications sont payantes, si vous ne souhaitez pas chercher une version hackée sur des sites piratés, il faudra payer l'achat. Mais nous parlerons de la façon de procéder. La seconde provient de sources non officielles autres que Google Play, pour laquelle vous devrez activer l'option « Autoriser l'installation d'applications à partir de sources non officielles » dans les paramètres de votre smartphone ou tablette, après quoi le fichier d'installation de l'APK devra être écrit dans la mémoire. carte.

Il est également possible d’installer des applications APK en masse. Pour ce faire, vous aurez besoin d'Astro File Manager - un gestionnaire de fichiers spécial. Après l'avoir installé, déplacez les applications :

Depuis un smartphone/tablette : dans mntsdcardackupsapp(en d'autres termes, carte mémoire, puis dossier de sauvegardes, dossier d'application)

Depuis un ordinateur personnel (n'oubliez pas d'activer la connexion de l'appareil Android en mode clé USB simple) : carte SDsauvegardesapplication

Ouvrez ensuite l'application souhaitée, dans menu contextuel sélectionnez « Gestionnaire d'applications » et accédez à l'onglet « Sauvegardes », où nous sélectionnons « Clic long ou cochez l'application à installer ». Cliquez sur le bouton « Installer » - toutes les applications seront installées sur votre appareil.

Il est assez facile de voir quelle est la structure d’un fichier APK. Ouvrez l'APK souhaité à l'aide d'un programme d'archivage, par exemple WinRar. Voici ce que nous voyons à l'intérieur :

AndroidManifest.xml est une sorte de « passeport » qui décrit le contenu de la demande, notamment : Configuration requiseà l'application, sa structure et sa version.

MÉTA-INF– dossier contenant le fichier MANIFEST.MF(il peut être ouvert par presque n'importe quel éditeur de texte, il est recommandé d'utiliser Notepad++), ouverture dans laquelle vous pouvez voir les sommes de contrôle et les chemins de données SHA-1, la version du standard Manifest-Version, les fichiers de certificat RSA ou DSA, le fichier SF contient les chemins vers diverses ressources et leurs sommes de contrôle. En général, les META-INF sont des fichiers de métadonnées, c'est-à-dire des données sur des données.

rés– un dossier qui contient toutes les ressources de « soft stuffing », classées en sous-dossiers. Par exemple, dans le dossier ~drawable~ il y a des éléments graphiques d'applications (divers statuts, icônes, etc.), dans le répertoire de mise en page il y a des fichiers XML qui indiquent l'emplacement des éléments graphiques interface utilisateur(interface graphique).

classes.dex– code de programme exécuté par la machine virtuelle Dalvik VM. Rappelons que le système d'exploitation Android est un mélange du noyau Linux et de la machine virtuelle Java.

ressources.arsc– fichier XML compilé. Il contient des données sur toutes les ressources utilisées par le programme.

actifs– un dossier qui contient également diverses ressources ; il se peut qu'il ne soit pas du tout dans l'APK.

lib– un dossier qui contient des « libs » ou, plus simplement, des bibliothèques natives, si le programme est écrit en utilisant le NDK, par exemple avec des éléments en C++. Ce répertoire n'est peut-être pas dans l'APK.

com– peut ne pas être dans l’APK.

org– peut ne pas être dans l’APK.

ouais– peut ne pas être dans l’APK.

Nous avons traité du contenu de l’application APK, passons maintenant à son démontage détaillé. Pour la décompilation, vous aurez besoin d'Apktool et de Java, ainsi que du fichier APK lui-même. Il est recommandé de décompresser Apktool dans un répertoire C :LES FENÊTRES(ce n’est pas nécessaire, mais ce sera plus pratique. Pourquoi – lisez un peu plus bas).

Pour lancer Apktool, vous devez entrer dans le menu « Exécuter » de votre ordinateur. Sous Windows XP, cliquez sur Démarrer -> Exécuter, sous Windows 7 : Gestionnaire des tâches ( Ctrl+Alt+Del), en haut dans le menu déroulant Fichier -> Nouvelle tâche (Exécuter...), ou appelez-le simplement avec un raccourci clavier Gagner+R.

Appel ligne de commande- nous écrivons cmd, après quoi nous lançons Apktool - écrivez outil apk(pour cela il fallait le placer dans dossier WINDOWS). De plus, tout contrôle s'effectue via la ligne de commande à l'aide de paramètres.

Si vous ne voulez pas vous embêter à saisir constamment des commandes de texte, vous pouvez utiliser Interface graphique– par exemple, le SmartApkTool mentionné. Lancez SmartApkTool.exe, puis sélectionnez l'application APK souhaitée dans l'onglet Décompresser/Packer (il est important que le nom du fichier ne contienne pas d'espaces, de cyrillique, de caractères spéciaux et de signes de ponctuation).

Après le déballage, le programme créera un dossier portant le même nom que le fichier APK. À l’intérieur, il y aura tout le contenu de l’application.

L'APK peut également être localisé. Avant de commencer cela, nous lançons le Notepad++ préinstallé et le configurons comme suit. Ouverture Paramètres -> Configuration -> Nouveau document.

Après ces étapes, ouvrez l'application décompressée (décompilée), le dossier rés/valeurs.

Toutes les localisations se trouvent souvent dans le fichier cordes.XML, mais parfois certains d'entre eux peuvent être contenus dans tableaux.XML. Copiez ces fichiers et créez-les dans un dossier rés dossier valeurs-ru et insérez-les dedans.

Maintenant tu peux ouvrir cordes.XMLà l'aide de Notepad++, effectuez la traduction et enregistrez le fichier modifié.

Dans le fichier Manifeste Android.XML Vous pouvez spécifier où installer les applications APK. Attention, cela ne concerne que la version Android 2.2 et ultérieure. Alors, ouvrez le fichier spécifié en utilisant Notepad++. Presque au tout début, vous pouvez voir le paramètre :

Ici, vous pouvez spécifier les options suivantes (après le symbole « = ») :

interne uniquement– l’application ne sera installée que dans mémoire interne dispositifs

auto– offre à l’utilisateur le choix d’installer l’application en mémoire interne ou sur une carte mémoire

préférerExterne– le programme sera installé sur la carte mémoire. Il convient de garder à l'esprit que toutes les applications ne fonctionneront pas correctement si elles sont installées sur un disque externe, voire ne fonctionneront pas du tout. Ceux-ci inclus:

Prestations de service- c'est-à-dire les services

Services d'alarme– les services qui utilisent du temps, comme les réveils

Moteurs de méthode de saisie– applications de saisie, y compris différents claviers

Fonds d'écran animés– fond d'écran animé « en direct »

En directDossiers– respectivement, des répertoires animés

ApplicationWidgets– divers « widgets »

CompteGestionnaires– gestionnaires de comptes divers, dont les clients ICQ, les clients pour réseaux sociaux et ainsi de suite

Adaptateurs de synchronisation– les programmes qui nécessitent une synchronisation constante

AppareilAdministrateurs– les applications utilisées pour l’administration

Protection contre la copie– les applications protégées contre la copie.

Dans l'application, vous pouvez modifier et remplacer diverses icônes et éléments graphiques de l'interface utilisateur par les vôtres. Pour ce faire, ouvrez le dossier rés dans le dossier contenant l'application APK décompilée, vous pouvez voir ici les dossiers :

dessinable-hdpi

drawable-ldpi

Ces dossiers contiennent toutes les icônes et autres éléments graphiques du programme. La lettre précédant « dpi » désigne respectivement la taille des éléments graphiques :

hdpi - points par pouce haute densité, taille 72x72 pixels

mdpi - densité moyenne de points par pouce, taille 48x48 pixels

jeppp - faible densité de points par pouce, taille 36x36 pixels

Pour modifier par exemple l'icône de l'application, ouvrez le fichier Manifeste Android.XMLà l'aide du programme Notepad++, recherchez la ligne dans laquelle l'icône est indiquée, regardez son nom exact (notez que l'extension du fichier n'est pas écrite, seulement le nom du fichier).

Ouvrez le dossier correspondant dessinable-*dpi, collez celui édité ou nouvelle icône, n'oubliez pas de revérifier le titre original dans Manifeste Android.XML. L'image doit être au format .png et avoir exactement la même densité de pixels que le fichier source, par exemple pour hdpi c'est 72x72 pixels.

Si vous souhaitez remplacer le nom de l'icône par le vôtre, enregistrez l'image avec le nom de fichier souhaité dans dessinable-*ppp, après quoi nous indiquons exactement le même nom dans Manifeste Android.XML(Par exemple android:icon="@drawable/test"). De la même manière, vous pouvez modifier n'importe quel autre élément graphique, mais les exigences sont les mêmes : l'extension doit être .png et la densité en points par pouce est la même que celle du fichier source.

Dans l’application décompressée, vous pouvez vérifier de quels droits elle dispose. Ceci est utile si l'APK a été installé à partir d'une source inconnue et pour éviter une situation où une lampe de poche ou un joli calendrier commence soudainement à envoyer des messages SMS payants à numéro inconnu. Ouverture Manifeste Android.XML Programme Notepad++ et recherchez les lignes correspondantes. Pour envoyer des messages texte, par exemple, le paramètre répond ENVOYER UN SMS. Vous pouvez en savoir plus sur tous les droits qui peuvent être disponibles pour une application.

Les applications APK installées peuvent être extraites du système. Cela peut être fait de plusieurs manières. Tout d’abord, vous pouvez installer Astro File Manager. Ouvrez l'application, puis sélectionnez « Gestionnaire d'applications » dans le menu contextuel. Sont en train de chercher demande requise, cochez-le et effectuez une copie de sauvegarde. Après traitement, la candidature sélectionnée se situera le long du chemin :

mntsdcardackupsapp

sdcardackupsapp

Ensuite, vous pouvez utiliser Programme racine Désinstallateur. Après avoir lancé l'application, elle déterminera automatiquement tout APK installés et les sauvegardera automatiquement tous. Ainsi, vous pouvez, si vous le souhaitez, copier ces copies de sauvegarde pour une décompilation ultérieure ; elles se trouvent le long du chemin :

mntsdcardRootUnistallerautobackups(lorsqu'il est visualisé directement depuis un appareil Android)

sdcardRootUnistallerautobackups(lorsqu'il est visualisé via un ordinateur, tandis que l'appareil Android est connecté en tant que clé USB).

Une autre façon consiste à utiliser Root Browser Lite, bien sûr, vous aurez besoin des droits Root pour cela. Ouverture cette application, nous suivons le chemin :

systèmeapplication(si vous êtes intéressé par les applications système).

Nous copions les applications nécessaires sur la carte mémoire, après quoi vous pouvez effectuer toutes les manipulations avec elles.

Vous pouvez également télécharger les applications APK qui vous intéressent depuis Google Play (Android Market) directement sur Ordinateur personnel. Vous aurez besoin d'un navigateur pour cela Google Chrome(version pas inférieure à 17), et le plugin correspondant est Téléchargeur d'APK. Après avoir téléchargé et installé le plugin spécifié, créez une copie du raccourci Navigateur Google Chrome, où l'on écrit la ligne suivante après un espace :

-ignorer les erreurs de certificat

Avec le chemin d'installation standard du navigateur, la ligne devrait ressembler à ceci :

"C: Program FilesGoogleChromeApplicationchrome.exe" - ignorer les erreurs de certificat

Après cela, entrez dans le numéroteur du smartphone :

*#*#8255#*#*

Nous réécrivons l'ID de l'appareil, qui se compose de 16 caractères. Ouvrez Google Chrome à l'aide du raccourci créé avec le paramètre spécifié -ignorer les erreurs de certificat, allons à Outils -> Extensions(vous pouvez également saisir « chrome://settings/extensions » dans la barre d'adresse), ouvrez les paramètres du plugin APK Downloader. Dans les options, entrez votre adresse email et votre mot de passe compte Google, ainsi que l'ID de l'appareil reçu. Allez maintenant sur Google Play (Android Market), ouvrez la page avec l'application souhaitée, nous attendons qu'il soit complètement chargé. L'icône APK Downloader apparaîtra - après avoir cliqué dessus, l'application sera téléchargée sur votre ordinateur.

Apk editor pro, que vous pouvez télécharger pour Android sur notre site Web, vous permettra de pirater/modifier le contenu des fichiers de n'importe quelle application pour appareils mobiles et personnalisez-le à votre guise.

Particularités

Le programme est un utilitaire professionnel qui, entre les mains d'utilisateurs avancés, peut devenir un outil puissant pour éditer des applications pour Android. La fonctionnalité n'est pratiquement pas différente de celle similaire logiciel pour les ordinateurs personnels.

Que peut faire cet utilitaire ?

  1. Changez (traduisez) les noms d’autres applications.
  2. Modifiez les dispositions de l'architecture, les couleurs et les modèles de paramètres graphiques (par exemple, la taille des icônes).
  3. Changer la conception sonore, les fichiers multimédias.
  4. Supprimez les publicités.
  5. Contournez le blocage du contenu payant.
  6. Transférez une application de la mémoire interne de l’appareil vers une carte SD.
  7. Changez la résolution et bien plus encore.

Pour comprendre comment utiliser l'utilitaire, vous devez télécharger apk editor pro et accéder au menu. Choisissez ensuite soit application installée sur Android, ou son fichier apk. Après cela, les données par défaut s'ouvriront, que l'utilisateur pourra modifier :

  • ressources d'édition ;
  • remplacement de fichiers ;
  • édition générale;
  • édition des données.

Le programme proposera d'installer la version modifiée. Cela ne fonctionne pas dans tous les cas, donc ancienne version doit être supprimé manuellement et un nouveau installé. Après la suppression, vous devez sélectionner le dossier de l'éditeur apk (pour plus de commodité, vous pouvez utiliser ES Explorer) parmi les programmes sur Android, rechercher le fichier d'application modifié et l'installer sur l'appareil.

Le programme a une interface conviviale. La navigation est assez simple, mais l'utilisateur doit avoir des connaissances de base en anglais pour le comprendre.

Avantages et inconvénients

  1. Le programme ouvre à l'utilisateur un large éventail d'options pour personnaliser les applications.
  2. Le menu contient une section Aide, qui décrit simplement et en détail un grand nombre de fonctionnalités du programme éditeur. Par conséquent, les utilisateurs éloignés de la programmation n'auront pas à rechercher des exemples et des instructions d'édition sur des ressources tierces.
  3. Vous pouvez télécharger le programme gratuitement sur notre site Web.

L'utilisation de cet utilitaire nécessite certaines compétences et connaissances. Entre les mains d'un utilisateur inexpérimenté, l'édition peut entraîner des violations de l'intégrité du système de fichiers, ce qui entraînera finalement des pannes d'applications. Dans le menu de l'élément d'aide, vous trouverez des exemples de conversion avec des images et des conseils sur la façon d'utiliser correctement apk editor pro sur Android. Par conséquent, si vous souhaitez comprendre ce programme, suivez simplement les instructions.

Editeur - ça suffit outil utile pour ceux qui sont confrontés à une interface d'application peu pratique (manque de langue russe, publicité constante, bannières, etc.). Si vous avez déjà utilisé ce programme, partagez vos impressions ci-dessous dans les commentaires.

À partir de cet article, vous apprendrez en quoi consiste l'application Android, comment ouvrir un fichier APK et avec quels programmes.

Qu'est-ce qu'un fichier APK ?

APK - format de fonctionnement Systèmes Android, utilisé pour les fichiers d'application exécutables archivés, et le nom du fichier lui-même peut être n'importe quoi, mais l'extension ne doit ressembler qu'à ceci.apk. Les analogues de l'APK dans d'autres systèmes d'exploitation sont .msi sous Windows, .sis sous Symbian, .rpm ou .deb sous Linux.

Voyons ce qu'il y a à l'intérieur
En fait, .apk est une archive ZIP, vous pouvez donc consulter la structure interne en utilisant n'importe quel gestionnaire de fichiers ou un archiveur tel que WinRAR ou l'application mobile X-plore.





Il convient de rappeler que vous n'avez qu'un accès visuel aux ressources internes ; les capacités d'édition sont extrêmement limitées.
Regardons la structure
À l’intérieur du .apk, nous voyons un certain nombre de fichiers et de dossiers, découvrons à quoi ils servent :
  • AndroidManifest.xml est une sorte de « passeport » de l'application à partir duquel vous pouvez connaître tous les points principaux, les exigences, la version, les autorisations, etc.
  • META-INF ce fichier contient des métadonnées, c'est-à-dire des données sur les données, des sommes de contrôle, des chemins d'accès aux données, des chemins et des sommes de contrôle des ressources, des certificats. Vous pouvez ouvrir ce fichier avec n'importe quel éditeur de texte, mais il est recommandé d'utiliser Notepad++.
  • Le dossier res contient toutes les ressources du programme, graphiques, telles que les icônes, les images, le texte et les éléments de l'interface graphique. Vous pouvez également accéder facilement au dossier.
  • classes.dex est le code du programme d'application direct exécuté par la machine virtuelle Dalvik VM ; vous pouvez voir le contenu de ce fichier uniquement en décompilant le .apk, nous en parlerons dans d'autres articles. resources.arsc - fichier XML compilé, ce fichier contient des données sur toutes les ressources impliquées dans le programme.
  • lib - un dossier contenant des bibliothèques natives dont les ressources ne sont accessibles qu'en utilisant des programmes spécialisés. L'APK peut également contenir des fichiers et des dossiers tels que com, org, udk, mais pas toujours.

Examinons maintenant plus en détail la structure interne ; pour cela, nous avons besoin d'un programme de décompilation, de Java et d'un fichier APK. L'outil principal pour désassembler .apk est Apktool, mais ce programme Cela ne fonctionne qu'à partir d'une ligne, ce qui n'est pas très pratique. Pour une analyse plus rapide et plus pratique, vous pouvez utiliser APKing, c'est toujours le même Apktool, mais avec la possibilité de travailler à partir du menu contextuel.
Et donc nous installons APKing comme n'importe quelle application pour Windows et, après avoir sélectionné .apk, cliquez dessus avec le bouton droit de la souris et Shift en même temps, après quoi nous verrons ce qui suit :


Et choisissez les mesures nécessaires, par exemple, décompilez complètement, le programme terminera l'opération et créera un dossier du même nom.


En ouvrant le dossier, nous aurons accès à toutes les ressources du fichier APK.


C'est ça fichiers texte peut être modifié, tout en respectant les règles de base, vous pouvez utiliser le programme populaire Notepad++, par exemple, considérez AndroidManifest.xml

C'est encore moi et mes instructions pour les théières et cafetières avec photos.

Cette fois, je parlerai en détail du remplacement des composants système du système d'exploitation Android en utilisant l'exemple de l'installation d'une modification de la barre d'état.

Android est un peu Linux. Il est nécessaire de suivre un certain nombre de règles lors du remplacement de fichiers afin que le téléphone ne se transforme pas en une brique, qui ne peut être réanimée que par un flashage complet avec perte de toutes les données de la mémoire interne de l'appareil. Les partitions internes sont formatées en système de fichiers différent de FAT32 sur les lecteurs flash. Entre autres choses, les propriétés des fichiers stockent les autorisations pour différents groupes d'utilisateurs (propriétaire du fichier, groupe de propriétaires de fichiers, autres utilisateurs). Lorsque vous travaillez avec fichiers système ils doivent être enregistrés, car lors du chargement, le système risque tout simplement de ne pas pouvoir y accéder et de ne pas démarrer normalement.
Commençons par les outils.

Nous aurons besoin:

  • Un gestionnaire de fichiers qui peut fonctionner avec les droits root et les autorisations de fichiers. Root Explorer est le meilleur (vous l’avez acheté, n’est-ce pas ?)
  • Le fichier modifié lui-même, que nous souhaitons mettre à la place de celui du système (lien en fin d'article).

Nous utilisons maintenant l'une des fonctions pratiques de Root Explorer. Appuyons longuement sur le fichier souhaité pour faire apparaître le menu contextuel

Et cliquez sur l'élément " Zippez ce fichier" pour enregistrer le fichier dans une archive zip sur la carte SD. Après l'archivage, nous recevrons le message suivant :

Appuie sur le bouton " Rester" pour rester dans le dossier et faire encore une chose.

Tout est maintenant prêt pour remplacer le fichier.
J'ai déjà parlé des droits d'accès de chaque fichier. Pour les recréer sur un nouveau fichier, il faut d'abord les regarder depuis l'ancien. Ils sont représentés par une série de symboles « rwxrwxrwx ». 1ère triade - droits du propriétaire, 2ème - groupes de propriétaires, 3ème - tous les autres utilisateurs. Notre fichier a les autorisations "rw-r--r--".

Allez maintenant sur la carte SD, recherchez-y le fichier modifié et dans son menu contextuel, sélectionnez l'élément " Copie", mais ne vous précipitez pas pour sélectionner tout de suite le dossier "/system/app", car nous endommagerions immédiatement le système. Au lieu de cela, copiez le fichier dans un dossier spécial pour les fichiers temporaires "/data/local/tmp" pour amener le fichier dans un formulaire qui prendra le système.
Tout d'abord, appelez le menu contextuel du fichier et sélectionnez " Renommer" et entrez le nom du fichier "SystemUI.apk". C'est vrai, car sous Linux, la casse des lettres dans le nom est importante, c'est-à-dire que "systemui.apk" et "SystemUI.apk" sont des fichiers différents.
Ensuite, vous devez modifier les autorisations des fichiers, car elles sont désormais presque certainement mal définies. Pour ce faire, appelez à nouveau le menu contextuel du fichier avec un appui long et sélectionnez l'élément " Autorisations". Pour notre valeur "rw-r--r--", les cases à cocher doivent être placées comme ceci :

Cliquez sur " D'ACCORD" et appelez à nouveau le menu contextuel. Vous devez maintenant changer le propriétaire et le groupe de cette application. Pour ce faire, sélectionnez l'élément " Changer de propriétaire". Une fenêtre apparaîtra avec des informations sur le propriétaire actuel du fichier.
Ici, nous devons faire une petite digression.
Dans le dossier "/system/app", tous les fichiers appartiennent à l'utilisateur "root" (uid=0) et au groupe "root" (gid=0), et dans le dossier "/system/framework" l'utilisateur " system" (gid=1000) est détenu. et le groupe "system" (gid=1000).
Sur la base de ce qui précède, définissez les valeurs requises et cliquez sur " D'ACCORD".
Et pour la troisième fois, appelez le menu contextuel du fichier et sélectionnez l'élément " Copie" et dans la boîte de dialogue de copie, allez dans le dossier "/system/app". N'hésitez pas maintenant à cliquer sur " Pâte" et lisez attentivement la suite.
Presque immédiatement, le système vous informera que le processus de la barre d'état s'est soudainement terminé et vous proposera de le démarrer. Toutes les tentatives seront vaines. Entre l'apparition des fenêtres, il faut avoir le temps d'effectuer un certain nombre d'actions. Avant d'appuyer sur le bouton, vous devez appeler le menu pour éteindre l'appareil ; il apparaîtra sous un avertissement. Vous devez maintenant placer votre doigt approximativement sur le côté gauche du bouton. Vous devez maintenant cliquer trois fois très rapidement avec votre doigt pour avoir le temps de fermer l'avertissement, de sélectionner l'option d'arrêt et de confirmer vos intentions.
Maintenant, nous attendons que le téléphone s'éteigne, le redémarrons et profitons du résultat, ou ne l'apprécions pas et recherchons les erreurs.

Parfois, certaines applications sur Android ne conviennent pas à l'utilisateur d'une manière ou d'une autre. Un exemple est la publicité intrusive. Et il arrive aussi que le programme soit bon pour tout le monde, mais que la traduction soit tordue, soit complètement absente. Ou, par exemple, le programme est un essai, mais il n'y a aucun moyen d'obtenir la version complète. Comment changer la donne ?

Introduction

Dans cet article, nous expliquerons comment désassembler un package APK avec une application, examiner sa structure interne, désassembler et décompiler le bytecode, et également essayer d'apporter plusieurs modifications aux applications qui peuvent nous apporter un avantage ou un autre.

Pour faire tout cela vous-même, vous aurez besoin d'au moins des connaissances de base du langage Java, dans lequel les applications Android sont écrites, et du langage XML, qui est utilisé partout dans Android - de la description de l'application elle-même et de ses droits d'accès au stockage des chaînes qui sera affiché à l’écran. Vous aurez également besoin de pouvoir utiliser un logiciel de console spécialisé.

Alors, qu’est-ce qu’un package APK dans lequel absolument tous les logiciels Android sont distribués ?

Décompilation d'application

Dans cet article, nous n'avons travaillé qu'avec du code d'application désassemblé, mais si des modifications plus sérieuses sont apportées aux applications volumineuses, il sera beaucoup plus difficile de comprendre le petit code. Heureusement, nous pouvons décompiler le code dex en code Java, qui, bien que non original et non compilé, est beaucoup plus facile à lire et à comprendre la logique de l'application. Pour ce faire, nous aurons besoin de deux outils :

  • dex2jar est un traducteur du bytecode Dalvik en bytecode JVM, sur la base duquel nous pouvons obtenir du code en langage Java ;
  • jd-gui est un décompilateur lui-même qui vous permet d'obtenir du code Java lisible à partir du bytecode JVM. Comme alternative, vous pouvez utiliser Jad (www.varaneckas.com/jad) ; Bien qu'il soit assez ancien, il génère dans certains cas un code plus lisible que Jd-gui.

C'est ainsi qu'ils doivent être utilisés. Tout d'abord, nous lançons dex2jar, en spécifiant le chemin d'accès au package apk comme argument :

% dex2jar.sh mail.apk

En conséquence, le package Java mail.jar apparaîtra dans le répertoire courant, qui peut déjà être ouvert dans jd-gui pour afficher le code Java.

Disposition des packages APK et réception de ceux-ci

Sac plastique Applications Android, en fait, est un fichier ZIP standard, aucun outil spécial n'est requis pour afficher le contenu et l'extraire. Il suffit d'avoir un archiveur - 7zip pour Windows ou une console décompressée sous Linux. Mais c'est à propos de l'emballage. Qu'est-ce qu'il y a à l'intérieur? En général, nous avons la structure suivante à l’intérieur :

  • META-INF/- contient un certificat numérique de l'application, identifiant son créateur, et les sommes de contrôle des fichiers du package ;
  • res/ - diverses ressources que l'application utilise dans son travail, telles que des images, une description déclarative de l'interface, ainsi que d'autres données ;
  • AndroidManifest.xml- description de la demande. Cela inclut, par exemple, une liste des autorisations requises, requises Version Android Et autorisation requiseécran;
  • classes.dex- bytecode d'application compilé pour machine virtuelle Dalvík ;
  • ressources.arsc- aussi des ressources, mais d'un autre genre - notamment des chaînes (oui, ce fichier peut être utilisé pour la russification !).

Les fichiers et répertoires répertoriés se trouvent, sinon dans la totalité, du moins peut-être dans la grande majorité des APK. Cependant, il existe quelques autres fichiers/répertoires moins courants qui méritent d'être mentionnés :

  • actifs- analogue des ressources. La principale différence est que pour accéder à une ressource, il faut connaître son identifiant, mais la liste des actifs peut être obtenue dynamiquement à l'aide de la méthode AssetManager.list() dans le code de l'application ;
  • lib- des bibliothèques Linux natives écrites en utilisant NDK (Native Development Kit).

Ce répertoire est utilisé par les producteurs de jeux qui y placent leurs moteurs de jeux écrits en C/C++, ainsi que par les créateurs d'applications performantes (par exemple Google Chrome). Nous avons compris l'appareil. Mais comment obtenir le fichier package de l’application qui vous intéresse ? Puisqu'il n'est pas possible de récupérer les fichiers APK de l'appareil sans root (ils se trouvent dans le répertoire /data/app) et que le root n'est pas toujours conseillé, il existe au moins trois façons d'obtenir le fichier d'application sur votre ordinateur :

  • Extension du téléchargeur d'APK pour Chrome ;
  • Véritable application APK Leecher ;
  • divers hébergements de fichiers et Varezniks.

Lequel utiliser est une question de goût ; nous préférons utiliser des applications distinctes, nous décrirons donc l'utilisation de Real APK Leecher, d'autant plus qu'il est écrit en Java et, par conséquent, fonctionnera soit sous Windows, soit sous Nix.

Après avoir démarré le programme, vous devez remplir trois champs : Email, Mot de passe et ID de l'appareil - et sélectionner une langue. Les deux premiers sont l'e-mail et le mot de passe de votre compte Google que vous utilisez sur l'appareil. Le troisième est l'identifiant de l'appareil et peut être obtenu en tapant le code sur le composeur. # #8255## puis trouver la ligne Device ID. Lors du remplissage, il vous suffit de saisir l'ID sans le préfixe Android.

Après avoir rempli et enregistré, le message « Erreur lors de la connexion au serveur » apparaît souvent. Cela n'a rien à voir avec Google Play, alors n'hésitez pas à l'ignorer et à rechercher les packages qui vous intéressent.

Afficher et modifier

Disons que vous avez trouvé un package qui vous intéresse, que vous l'avez téléchargé, décompressé... et que lorsque vous avez essayé de visualiser un fichier XML, vous avez été surpris de découvrir que ce fichier n'était pas du texte. Comment le décompiler et comment travailler avec les packages en général ? Est-il vraiment nécessaire d'installer le SDK ? Non, il n’est pas du tout nécessaire d’installer le SDK. En fait, toutes les étapes pour extraire, modifier et empaqueter les packages APK nécessitent les outils suivants :

  • Archiveur ZIP pour le déballage et l'emballage ;
  • petit- Assembleur/désassembleur de bytecode de machine virtuelle Dalvik (code.google.com/p/smali) ;
  • apte- un outil de packaging des ressources (par défaut, les ressources sont stockées sous forme binaire pour optimiser les performances des applications). Inclus dans le SDK Android, mais peut être obtenu séparément ;
  • signataire- outil pour signature numérique paquet modifié (bit.ly/Rmrv4M).

Vous pouvez utiliser tous ces outils séparément, mais cela n'est pas pratique, il est donc préférable d'utiliser un logiciel de niveau supérieur construit sur cette base. Si vous travaillez sous Linux ou Mac OS X, il existe un outil appelé apktool. Il vous permet de décompresser les ressources dans leur forme originale (y compris les fichiers binaires XML et arsc), de reconstruire un package avec des ressources modifiées, mais il ne sait pas comment signer les packages, vous devrez donc exécuter l'utilitaire de signature manuellement. Malgré le fait que l'utilitaire soit écrit en Java, son installation est assez non standard. Vous devez d’abord récupérer le fichier jar lui-même :

$ 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 vous travaillez sous Windows, il existe un excellent outil appelé Virtuous Ten Studio, qui rassemble également tous ces outils (y compris apktool lui-même), mais au lieu d'une interface CLI, il fournit à l'utilisateur une interface graphique intuitive avec laquelle vous pouvez effectuez les opérations de déballage, de démontage et de décompilation en quelques clics. Cet outil est Donation-ware, c'est-à-dire que parfois des fenêtres apparaissent vous demandant d'obtenir une licence, mais en fin de compte, cela peut être toléré. Cela ne sert à rien de le décrire, car vous pouvez comprendre l'interface en quelques minutes. Mais apktool, en raison de sa nature de console, devrait être discuté plus en détail.


Regardons les options d'apktool. En bref, il existe trois commandes de base : d (décoder), b (construire) et if (installer le framework). Si tout est clair avec les deux premières commandes, alors que fait la troisième instruction conditionnelle ? Il décompresse le cadre d'interface utilisateur spécifié, ce qui est nécessaire dans les cas où vous disséquez un package système.

Regardons les options les plus intéressantes de la première commande :

  • -s- ne démontez pas les fichiers dex ;
  • -r- ne décompressez pas les ressources ;
  • -b- ne pas insérer informations de débogage aux résultats du démontage du fichier dex ;
  • --frame-path- utilisez le framework d'interface utilisateur spécifié au lieu de celui intégré à apktool. Examinons maintenant quelques options pour la commande b :
  • -F- assemblage forcé sans vérifier les modifications ;
  • -un- indiquez le chemin vers aapt (un outil pour créer une archive APK), si pour une raison quelconque vous souhaitez l'utiliser à partir d'une autre source.

L'utilisation d'apktool est très simple ; pour cela, il suffit de spécifier l'une des commandes et le chemin d'accès à l'APK, par exemple :

$ apktool d mail.apk

Après cela, tous les fichiers extraits et désassemblés du package apparaîtront dans le répertoire de messagerie.

Préparation. Désactiver la publicité

La théorie est bien sûr bonne, mais pourquoi est-elle nécessaire si nous ne savons pas quoi faire du paquet déballé ? Essayons d'appliquer la théorie à notre avantage, à savoir modifier certains logiciels pour qu'ils ne nous montrent pas de publicité. Par exemple, que ce soit Virtual Torch - une torche virtuelle. Ce logiciel est idéal pour nous, car il regorge de publicités ennuyeuses et, en plus, il est suffisamment simple pour ne pas se perdre dans la jungle du code.


Ainsi, en utilisant l’une des méthodes ci-dessus, téléchargez l’application depuis le marché. Si vous décidez d'utiliser Virtuous Ten Studio, ouvrez simplement le fichier APK dans l'application et décompressez-le, créez un projet (Fichier -> Nouveau projet), puis sélectionnez Importer un fichier dans le menu contextuel du projet. Si votre choix s'est porté sur apktool, exécutez simplement une commande :

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

Après cela, une arborescence de fichiers similaire à celle décrite dans la section précédente apparaîtra dans le répertoire com.kauf.particle.virtualtorch, mais avec un répertoire smali supplémentaire au lieu des fichiers dex et un fichier apktool.yml. Le premier contient le code désassemblé du fichier dex exécutable de l'application, le second contient les informations de service nécessaires à apktool pour réassembler le package.

Le premier endroit que nous devrions examiner est, bien sûr, AndroidManifest.xml. Et là, nous rencontrons immédiatement la ligne suivante :

Il n'est pas difficile de deviner qu'il est chargé d'accorder à l'application les autorisations pour utiliser la connexion Internet. En fait, si nous voulons simplement nous débarrasser de la publicité, il nous suffira probablement de bloquer l’application sur Internet. Essayons de faire cela. Nous supprimons la ligne spécifiée et essayons de créer le logiciel à l'aide d'apktool :

$ apktool b com.kauf.particle.virtualtorch

Le fichier APK résultant apparaîtra dans le répertoire com.kauf.particle.virtualtorch/build/. Cependant, il ne sera pas possible de l'installer, car il n'est pas signé numériquement et sommes de contrôle fichiers (il n'y a tout simplement pas de répertoire META-INF/). Nous devons signer le package à l'aide de l'utilitaire apk-signer. Lancé. L'interface se compose de deux onglets - sur le premier (Key Generator), nous créons des clés, sur le second (APK Signer), nous signons. Pour créer notre clé privée, remplissez les champs suivants :

  • Fichier cible- fichier de sortie du magasin de clés ; il stocke généralement une paire de clés ;
  • Mot de passe Et Confirmer- mot de passe pour le stockage ;
  • Alias- nom de la clé dans le stockage ;
  • Mot de passe pseudo Et Confirmer- mot de passe de la clé secrète ;
  • Validité- durée de validité (en années). La valeur par défaut est optimale.

Les champs restants sont, en général, facultatifs – mais au moins un doit être rempli.


AVERTISSEMENT

Pour signer une application à l'aide d'apk-signer, vous devez installer le SDK Android et spécifier chemin complet avant dans les paramètres de l'application.

Toutes les informations sont fournies à titre informatif uniquement. Ni les éditeurs ni l'auteur ne sont responsables de tout dommage éventuel causé par les éléments de cet article.

Vous pouvez maintenant signer l'APK avec cette clé. Dans l'onglet APK Signer, sélectionnez le fichier nouvellement généré, entrez le mot de passe, l'alias de clé et le mot de passe, puis recherchez le fichier APK et cliquez hardiment sur le bouton « Signer ». Si tout se passe bien, le colis sera signé.

INFO

Puisque nous avons signé le package avec notre propre clé, il entrera en conflit avec l'application d'origine, ce qui signifie que lorsque nous essaierons de mettre à jour le logiciel via le marché, nous recevrons une erreur.

Une signature numérique n'est requise que pour les logiciels tiers, donc si vous modifiez applications système, qui sont installés en les copiant dans le répertoire /system/app/, vous n'avez pas besoin de les signer.

Après cela, téléchargez le package sur votre smartphone, installez-le et lancez-le. Voilà, la pub est partie ! Au lieu de cela, cependant, un message est apparu indiquant que nous n'avons pas Internet ou que nous ne disposons pas des autorisations appropriées. En théorie, cela pourrait suffire, mais le message semble ennuyeux et, pour être honnête, nous avons juste eu de la chance avec une application stupide. Un logiciel normalement écrit clarifiera très probablement ses informations d'identification ou vérifiera une connexion Internet et refusera simplement de se lancer. Comment être dans ce cas ? Bien sûr, modifiez le code.

Généralement, les auteurs d'applications créent des classes spéciales pour afficher des publicités et appellent des méthodes de ces classes lorsque l'application ou l'une de ses « activités » (en termes simples, les écrans d'application) est lancée. Essayons de trouver ces classes. On va dans le répertoire smali, puis com (org ne contient que la bibliothèque graphique ouverte cocos2d), puis kauf (c'est là que c'est, car c'est le nom du développeur et tout son code est là) - et le voici, l'annuaire marketing. À l’intérieur, nous trouvons un tas de fichiers avec l’extension smali. Ce sont des classes, et la plus remarquable d'entre elles est la classe Ad.smali, d'après le nom de laquelle il est facile de deviner que c'est celle qui affiche de la publicité.

Nous pourrions changer la logique de son fonctionnement, mais il serait beaucoup plus simple de simplement supprimer les appels à l'une de ses méthodes depuis l'application elle-même. Par conséquent, nous quittons le répertoire marketing et allons dans le répertoire de particules adjacent, puis dans virtualtorch. Le fichier MainActivity.smali mérite ici une attention particulière. Il s'agit d'une classe Android standard créée par le SDK Android et installée comme point d'entrée de l'application (analogue à la fonction principale en C). Ouvrez le fichier pour le modifier.

A l'intérieur il y a du petit code (assembleur local). Il est assez déroutant et difficile à lire en raison de sa nature de bas niveau, nous ne l'étudierons donc pas, mais trouverons simplement toutes les références à la classe Ad dans le code et les commenterons. Nous saisissons la ligne « Annonce » dans la recherche et arrivons à la ligne 25 :

Champ annonce privée : Lcom/kauf/marketing/Ad ;

Ici, un champ publicitaire est créé pour stocker un objet de classe Ad. Nous commentons en plaçant un signe ### devant la ligne. Nous continuons la recherche. Ligne 423 :

Nouvelle instance v3, Lcom/kauf/marketing/Ad ;

C'est là que se produit la création de l'objet. Commentons. Nous continuons la recherche et trouvons dans les lignes 433, 435, 466, 468, 738, 740, 800 et 802 des appels aux méthodes de la classe Ad. Commentons. On dirait que c'est ça. Sauvegarder. Il faut maintenant reconstituer le package et vérifier sa fonctionnalité et la présence de publicité. Pour la pureté de l'expérience, nous renvoyons la ligne supprimée de AndroidManifest.xml, assemblons le package, signons et installons.

Notre cobaye. Publicité visible

Oops! La publicité n'a disparu que pendant l'exécution de l'application, mais est restée dans le menu principal, que l'on voit au lancement du logiciel. Alors attendez, mais le point d'entrée est la classe MainActivity, et la publicité a disparu pendant l'exécution de l'application, mais est restée dans le menu principal, donc le point d'entrée est différent ? Pour identifier le véritable point d'entrée, rouvrez le fichier AndroidManifest.xml. Et oui, il contient les lignes suivantes :

Ils nous disent (et, plus important encore, à Android) qu'une activité nommée Start doit être lancée en réponse à la génération d'une intention (événement) android.intent.action.MAIN de la catégorie android.intent.category.LAUNCHER. Cet événement est généré lorsque vous appuyez sur l'icône de l'application dans le lanceur, il détermine donc le point d'entrée, à savoir la classe Start. Très probablement, le programmeur a d'abord écrit une application sans menu principal, dont le point d'entrée était la classe MainActivity standard, puis a ajouté une nouvelle fenêtre (activité) contenant le menu et décrit dans la classe Start, et en a fait manuellement l'entrée. indiquer.

Ouvrez le fichier Start.smali et cherchez à nouveau la ligne « Ad », on retrouve aux lignes 153 et 155 une mention de la classe FirstAd. Il est également présent dans le code source et, à en juger par son nom, il est responsable de l'affichage des publicités sur l'écran principal. Regardons plus loin, il y a la création d'une instance de la classe FirstAd et d'une intention qui, selon le contexte, est liée à cette instance, puis le label cond_10 dont la transition conditionnelle s'effectue exactement avant de créer une instance de la classe:

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

Très probablement, le programme calcule de manière aléatoire si la publicité doit être affichée sur l'écran principal et, dans le cas contraire, passe directement à cond_10. Ok, simplifions sa tâche et remplaçons la transition conditionnelle par une transition inconditionnelle :

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

Il n'y a plus de mention de FirstAd dans le code, nous fermons donc le fichier et réassemblons notre torche virtuelle à l'aide d'apktool. Copiez-le sur votre smartphone, installez-le, lancez-le. Voilà, toute publicité a disparu, ce pour quoi nous nous félicitons tous.

Résultats

Cet article n'est qu'une brève introduction aux méthodes de piratage et de modification des applications Android. De nombreux problèmes restaient en coulisses, tels que la suppression de la protection, l'analyse du code obscurci, la traduction et le remplacement des ressources des applications, ainsi que la modification des applications écrites avec en utilisant Android NDK. Cependant, ayant des connaissances de base, ce n’est qu’une question de temps pour tout comprendre.




Haut