Comment déboguer smali code d'une application android?
Je dispose d'une application android. dont je n'ai pas de code source.
Je tiens à déboguer une des fonctionnalités de cette application. J'ai pu réussir à désosser cette application fichier apk en utilisant apktool - https://code.google.com/p/android-apktool/
Cet outil génère des fichiers de classe dans smali format.
Mon exigence est :
- Pour être en mesure de déboguer une méthode en ajoutant les journaux de débogage.
- Pour être en mesure de déboguer les appels de méthode par l'impression d'une trace de la pile.
Pour réaliser cela, j'ai besoin d'injecter/insérer smali équivalent d'un journal de débogage ou de la trace de la pile. J'ai essayé d'ajouter quelques smali d'instruction au début de l'un de la méthode, mais il s'est écrasé avec ClassVerifyError.
Exemple smali code -
.method public declared-synchronized b()V
.locals 2
.prologue
.line 87
monitor-enter p0
:try_start_0
iget-object v0, p0, Lcom/example/viewerlib/t/d;->a:Ljava/lang/Thread;
invoke-virtual {v0}, Ljava/lang/Thread;->isAlive()Z
:
:
Quelqu'un pourrait-il m'aider en ajoutant smali journaux de débogage. Thnx à l'avance.
Ce n'est pas mon application. C'est normal de l'application android. On peut décompiler le apk en utilisant apktool qui génère smali code des classes.dex à l'intérieur de apk.
Nah! Il peut générer du code Java aussi, utiliser Dex Jar. Une fois cela fait, utilisez JD-GUI.
Mais si il le convertit en Java, il peut le faire tout dans l'IDE Eclipse. Sur le côté positif, avec un peu plus d'effort, il peut obtenir les fichiers XML et les actifs de trop!
Consrtructing de code java à partir de smali peut être fait, mais qui est beaucoup plus fastidieux si une méthode de classe est énorme. Au lieu de cela, comme il le fait remarquer à comprendre les fonctionnalités de l'application elle-même, l'impression des valeurs de variables peuvent être plus utiles à l'exécution. la construction d'un code java ne fonctionne que dans le cas d'un découplé de la fonctionnalité. Pour une complète application qu'il a de débogage lors de l'exécution de vérifier pour la même chose.
OriginalL'auteur Dheeraj Kumar Chaudhary | 2014-01-02
Vous devez vous connecter pour publier un commentaire.
1. Journal de débogage dans smali
Journal de débogage dans smali. Disons, par exemple, à l'intérieur de la méthode test() vous souhaitez imprimer "à l'Intérieur de Test()" journal de débogage. Au début de la méthode dans smali ajouter les instructions suivantes :
Note - Vous devez être prudent tout en utilisant les registres v0,v1 ici. Dans le code de flux d'exécution, vous devez vérifier que vous n'êtes pas en utilisant l'un des registre qui est utilisé plus tard dans le flux. Ou vous pouvez vous faire Exception.
2. StackTrace
Voici le code de smali pour imprimer stacktrace d'une méthode
Code Java
Et équivalent smali code est
Ajouter cette méthode dans n'importe quel fichier smali. Et d'appeler en tant
(En supposant que vous avez ajouté au-dessus de smali code en com.exemple.pakagename.ClassName)
Espère que cela aide .....
Note
l'article dit que l'erreur la plus commune faite par un programmeur lors de la modification de smali code. +1Merci, je vais essayer cela.
J'ai été faire les exceptions suivantes:
no viable alternative at input 'stackTraceElements'
etno viable alternative at input 'stackTraceElements'
... juste eu à mettre à jour.local v1, stackTraceElements:[Ljava/lang/StackTraceElement;
à.local v1, "stackTraceElements":[Ljava/lang/StackTraceElement;
et.local v0, element:Ljava/lang/StackTraceElement;
à.local v0, "element":Ljava/lang/StackTraceElement;
il semble qu'il y a une syntaxe de mise à jour .les variables localesOriginalL'auteur rajan goswami
Maintenant, vous pouvez utiliser l'excellent plugin pour Android Studio ou Intellij IDEA - Smalidea. En outre, j'ai décrit le processus d'installation et de débogage dans mon post de blog.
OriginalL'auteur CROSP
Si vous aimez IntellijIdea, donner smalidea une chance!
OriginalL'auteur packmad
Je suggère d'utiliser apkanalyzer de sony:
https://github.com/sonyxperiadev/ApkAnalyser
il vous permet de décompiler apk-s et de lire smali code, insérer des instructions d'impression, dans différents lieux. Il y a l'option de menu: "Imprimer journal personnalisé", vous pouvez aussi imprimer stacktrace, et faire beaucoup d'autres choses. Après toutes les modifications que vous venez d'appuyer sur l'Appareil->Installer et démarrer apk. Le tout à partir de l'interface graphique.
OriginalL'auteur marcinj
hey, je pensais que Vous pourriez trouver cet outil utile
la décompilation tout fichier apk pour java code écrit classes
vérifier ce lien et essayer
http://forum.xda-developers.com/showthread.php?t=2430413
OriginalL'auteur Owehbeh
Désolé de signaler que apkanalyzer est un analyseur ststic
Pour la compréhension et l'édition de smali code, essayez les solutions suivantes
http://themasterofmagik.wordpress.com/2014/03/08/decompilerecompile-an-apk-basic-editing/
Il explique l'édition dans les différents scénarios.
Quel outil utiliser et quand.
Différentes approches de Décompiler/Recompiler un apk
OriginalL'auteur ASD
J'ai essayé d'utiliser smalidea plugin, mais ne pouvait pas obtenir de travail donc essayé avec une approche différente indiqué ci-dessous.
Il y a une option dans Android Studio 3.1.2, Allez dans Fichier -> sélection d'un Profil ou d'Analyser Apk option. Il sera alors décompiler le fichier Apk dans les classes.dex de fichiers et les fichiers qui ont smali fichiers. Vous pouvez ensuite Rus Comme-> option de Débogage et de mettre des points d'arrêt dans un smali fichiers un il va s'arrêter au point d'arrêt spécifié. Cela ne fonctionne que si vous avez unique dex fichier dans votre application. Il y a cependant un travail autour de la multi dex application dans laquelle vous devez suivre les étapes ci-dessous -
1) Télécharger Apktool outil de ici
2) Reconstituer l'Apk en utilisant -> apktool d
3) Copiez tous les smali les fichiers générés ci-dessus dans plusieurs dossiers - smali, smali_classess2, smali_classes3 et ainsi de suite dans le dossier créé à partir d'Android Studio -> Analyser Apk méthode plus tôt, de sorte que tous les smali fichiers sont dans le dossier unique
4) Cette étape je ne suis pas sûr si c'est nécessaire, mais j'avais suivi ce, n'hésitez pas à vérifier cette étape. Ici vous encore construire l'Apk en utilisant apktool à l'aide du dossier créé à l'étape 2 à l'aide de la commande -> apktool b . Cela va générer tous les .dex fichiers et copiez tous les fichiers à l'endroit même où des classes uniques.dex fichier a été généré à l'aide d'Analyser Apk méthode plus tôt.
5) utilisent Maintenant le même Projet créé à l'aide d'Analyser Apk méthode et vous êtes bon pour le débogage.
P. S. - Android studio va se plaindre de débogage à l'aide de code Java mais cette méthode de travail. Cette méthode n'est utile que si vous êtes l'édition d'un fichier smali et que vous souhaitez déboguer.
OriginalL'auteur Fenil