Comment ouvrir l'APK et comment le modifier ? Utiliser apktool Un programme pour démonter et assembler un fichier apk

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 s’affichera à 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

Un package d'application Android est essentiellement un fichier ZIP standard qui ne nécessite aucun outil spécial pour afficher son contenu ou 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, la version Android requise et la résolution d'écran requise ;
  • classes.dex- bytecode d'application compilé pour la machine virtuelle Dalvik ;
  • 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- un outil de signature numérique d'un package 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 leur base. Si vous utilisez 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- n'insérez pas d'informations de débogage dans les 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.

Utiliser 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'a pas de signature numérique ni de somme de contrôle de fichier (il n'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 le chemin complet d'accès 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 des applications système installées 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, le signons et l'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 d'application, ainsi que la modification des applications écrites à l'aide du NDK Android. Cependant, ayant des connaissances de base, ce n’est qu’une question de temps pour tout comprendre.

À 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 est un format du système d'exploitation 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 le périphérique interne à l'aide de n'importe quel gestionnaire de fichiers ou archiveur, par exemple 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 ne fonctionne qu'à partir de la 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 sélectionnez l'action requise, par exemple, décompilez complètement, puis 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.



Désormais, tous les fichiers texte peuvent être modifiés, tout en respectant les règles de base, vous pouvez utiliser le programme populaire Notepad++, par exemple, considérez AndroidManifest.xml

J'ai mentionné l'application SmartAPKTool. Il peut extraire, compresser et signer des fichiers apk modifiés. Son avantage est la présence d'une interface graphique. Cependant, il existe un sérieux inconvénient. SmartAPKTool n'a pas été mis à jour depuis longtemps et le programme ne décompresse et ne compresse pas correctement les applications pour les dernières versions d'Android. Par conséquent, je vais essayer ici d'expliquer comment utiliser l'application à ces fins. outil apk.

Note 1.
Le programme SmartAPKTool est toujours pratique à utiliser pour signer les fichiers apk collectés.
Note 2.
Les liens vers les programmes mentionnés dans l'article sont ↓

Programme outil apk n'a pas d'interface graphique. C'est un inconvénient pour ceux qui ne sont pas habitués à travailler avec la ligne de commande. Mais il y a aussi un plus : contrairement à SmartAPKTool, nous verrons toutes les erreurs, ce qui signifie que nous saurons quoi corriger.

Téléchargeons deux archives : une commune à tous les systèmes, l'autre à notre système (Windows dans l'exemple) :

Décompressons les deux archives dans le même dossier vide (dans notre exemple, C:\apktool\). Son contenu devrait ressembler à ceci :

A partir de maintenant, nous pouvons utiliser le programme outil apk.

Note 3.
Les utilisateurs des versions 64 bits de Linux devront installer le package ia32-libs :

sudo apt-get install ia32-libs

Dans le même dossier, nous mettons le fichier que nous devons décompresser. Par exemple, appelons-le orig.apk
Appuyez et maintenez la touche Maj enfoncée et cliquez avec le bouton droit sur n'importe quel espace vide du dossier (ne cliquez pas sur les fichiers !). Après cela, sélectionnez « Ouvrir la fenêtre de commande ». Dans la console qui apparaît, tapez :

apktool décoder orig.apk

Le fichier sera décompressé :

Nous avons maintenant un dossier avec l'application décompressée dans le répertoire C:\apktool\. Il s'appelle de la même manière que le fichier source, moins l'extension : C:\apktool\orig\ . Nous pouvons modifier les fichiers sources comme décrit dans l'article Android : comment installer deux applications identiques sur un seul téléphone. Après avoir effectué les modifications, nous collecterons une copie de l'application en regroupant les fichiers sources dans un apk :

apktool build orig result.apk

Ici, result.apk est le nom de fichier que nous avons trouvé pour la version de copie. S'il n'y a pas d'erreurs, le fichier sera assemblé :

Le reste dépasse le cadre de l'article :

  1. S'il y a des erreurs lors du montage, vous devez en trouver la cause et les corriger.
  2. Il ne reste plus qu'à signer le fichier result.apk résultant. Cela peut être fait en utilisant SmartAPKTool comme mentionné ci-dessus ; Tout y est intuitif. Il existe également d'autres façons de signer un fichier apk.
  3. Des erreurs peuvent également survenir lors de l'installation d'une copie, lors de son démarrage ou de son fonctionnement. Ils doivent être capturés à l'aide de l'utilitaire adb inclus dans le SDK Android.

Vous devez signer l'application, sinon elle ne sera pas installée. Les erreurs ne se produisent pas si souvent et les problèmes les plus courants qui les provoquent sont décrits dans l'article.

Lors de l'utilisation de divers firmwares pour appareils Android, il devient parfois nécessaire de modifier d'une manière ou d'une autre les applications système intégrées au système d'exploitation. Dans ce document, nous examinerons cette question en détail.

Naturellement, vous devez démonter et réassembler le fichier APK système pour qu'il fonctionne correctement et de manière stable. Voyons étape par étape ce qui doit être fait pour cela.

Tout d’abord, vous devez effectuer le processus de désodexation des fichiers APK du système. Nous vous dirons comment procéder.

Ainsi, le fichier .apk a été désodexé et décompilé. Analysons l'application qui nous intéresse, donnons-lui le nom, pour plus de clarté d'exemple, cadre- rés. apk. Nous nous en souvenons dans nos têtes comme de l'application originale.

Disons que nous avons apporté toutes les modifications nécessaires à l'application. Nous parlerons davantage de tous les aspects des fichiers APK dans. Maintenant, vous devez le ranger. Souvenons-nous de l'application packagée terminée dans nos esprits en tant qu'application modifiée 2.

Nous allons maintenant expliquer pourquoi il était nécessaire de mémoriser mentalement les applications comme originales et modifiées 2. L'application compilée par le programme ApkTool (ou utilisant une extension d'interface utilisateur graphique comme SmartApkTool) ne fonctionnera pas, mais ce n'est pas un problème. Nous effectuons les actions suivantes :

La récupération de ces fichiers dans APK est assez simple. Pour ce faire, vous devez exécuter apktool avec l'indicateur de build approprié et lui transmettre le chemin d'accès au dossier contenant l'application décompilée. Par exemple, si nous avons un dossier d'application situé dans le même répertoire qu'apktool, la commande ressemblerait à ceci :

Coquille

java -jar apktool.jar b application

java - jar apktool .jar b application

Après l'assemblage, le fichier APK terminé se trouvera dans le répertoire application/construction. Ensuite, vous devez signer l'APK. Ceci est fait pour garantir que l'application fonctionne sur les appareils sur lesquels le débogage est interdit. Autrement dit, il est interdit de lancer des applications non signées sur de tels appareils. Vous pouvez en savoir plus sur les certificats numériques et la procédure de signature de fichiers ici.

Signer un fichier est très simple : il existe un utilitaire spécial pour cela appelé signapk. Il faut le lancer en passant d'abord les certificats en arguments, puis le chemin de l'application, et enfin le chemin de l'application signée (le résultat, où la sauvegarder). Cela ressemble à ceci :

Coquille

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

Où pouvez-vous obtenir un tel certificat, demandez-vous ? Les certificats peuvent être trouvés sur Internet. Ou générez-le vous-même. Des instructions détaillées sur la configuration et la génération de tous les fichiers nécessaires peuvent être trouvées, par exemple .

Conclusion

Comme vous pouvez le constater, décompiler et assembler les fichiers APK est un processus assez simple, qui peut en outre être automatisé, facilitant ainsi le travail du chercheur. La machine virtuelle Dalvik elle-même est également facile à apprendre et à ouvrir, ce qui, d'une part, réduit la barrière à l'entrée pour les développeurs, et d'autre part, est la principale raison d'un pourcentage aussi élevé de piratage sur la plate-forme Android. C’est en partie la raison pour laquelle les développeurs de jeux, par exemple, ne sont généralement pas intéressés à publier des jeux intéressants avec une intrigue. Il est beaucoup plus rentable, compte tenu de l'attitude actuelle des utilisateurs, de rivaliser avec des fermes avec des dons étonnamment similaires les uns aux autres. Par conséquent, nous achetons des applications, soutenons les développeurs et obtenons ainsi un contenu intéressant. Mais il n’est absolument pas nécessaire de faire un don !

Merci à tous, à bientôt.