2017-01-24 5 views
1

Je suis en train de développer un outil qui analyse essentiellement une application Android APK et compte le nombre d'appels à une méthode API spécifique (par exemple, android.app.AlarmManager.set())Comment puis-je compter les appels de méthode à l'intérieur de APK? (En utilisant le format .smali)

1. Quelle approche recommandez-vous ?

Jusqu'ici, j'ai utilisé APKTool et maintenant j'ai les fichiers .smali. Cependant, pour la même source java, je peux avoir plusieurs fichiers:

  • ExportAsyncTask$1.smali
  • ExportAsyncTask$2.smali
  • ExportAsyncTask$3.smali
  • ExportAsyncTask$4.smali

2. Qu'est-ce que ces multiples fichiers signifie?

3. Les fichiers .smali résultants comprennent également des bibliothèques externes que je voudrais laisser de côté l'analyse. Comment puis je faire ça?

Répondre

1

1. Quelle approche recommandez-vous?

Oui, Apktool peut être utilisé pour votre tâche. Chaque classe java dans l'APK sera représentée par un fichier .smali dans l'arborescence des répertoires représentant les paquets. Smali - est le langage de la machine virtuelle Android. Le langage est beaucoup plus simple que Java et donc plus facile à analyser. Dans votre cas, vous devriez rechercher les opcodes invoke et les chaînes. Si vous travaillez sous Linux, vous pouvez par exemple grep et les compter. Dans Windows, vous avez des éditeurs de texte comme Notepad ++ qui permettent la recherche de texte dans plusieurs fichiers.

2. Que signifient ces multiples fichiers?

En Java, il existe des classes internes et des classes internes implicites. Le premier apparaîtra dans OutherClass$InnerClass.smali et le plus tard, n'ayant pas de nom propre, obtenir des numéros, comme OuterClass$1.smali. Vous avez parfois même des niveaux plus profonds comme a$b$c$1.smali.

3. Les fichiers .smali résultants incluent également des bibliothèques externes que je voudrais laisser de côté l'analyse. Comment puis je faire ça?

Vous n'avez aucun moyen précis de le faire. Mais d'une manière générale, lorsque vous regardez l'arborescence packages/directory de nombreux exemples, vous saisissez généralement le motif. Par exemple. généralement le code de l'application est dans com.* package et android.*, org.* et uk.* comprennent les bibliothèques. Après une telle inspection, vous excluez simplement ces répertoires de votre recherche.