我如何计算APK内的方法调用? (使用.smali格式)

时间:2017-01-24 13:43:02

标签: java android apk smali apktool

我正在尝试开发一种基本分析Android应用APK的工具,并计算对特定API方法的调用次数(例如android.app.AlarmManager.set()

1。你推荐什么方法?

到目前为止,我已使用APKTool,现在我有.smali个文件。 但是,对于相同的java源,我可以有多个文件:

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

2。这些多个文件意味着什么?

第3。生成的.smali文件还包括我想要省略分析的外部库。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

<强> 1。你推荐什么方法?

是的,Apktool可用于您的任务。 APK中的每个java类将由表示包的目录树中的.smali文件表示。 Smali - 是Android虚拟机语言。该语言比Java简单得多,因此更易于分析。在您的情况下,您应该搜索invoke操作码和Landroid/app/AlarmManager;->set字符串。如果您在Linux中工作,您可以例如grep并计算它们。在Windows中,您可以使用Notepad ++等文本编辑器,允许在多个文件中进行文本搜索。

<强> 2。这些多个文件意味着什么?

在Java中有内部类和隐式内部类。前者将显示在OutherClass$InnerClass.smali中,后者没有自己的名称,会获得数字,例如OuterClass$1.smali。您有时甚至会获得更深层次的内容,例如a$b$c$1.smali

第3。生成的.smali文件还包括我想遗漏分析的外部库。我怎么能这样做?

你没有确切的方法来做到这一点。但一般来说,当您查看许多样本的packages /目录树时,您通常会掌握该模式。例如。通常,应用程序代码位于com.*包中,android.*org.*uk.*包含库。在检查之后,您只需从搜索中排除这些目录。