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

How can I count method calls inside APK? (using .smali format)

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

1.您推荐什么方法?

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

2。这多个文件是什么意思?

3。生成的 .smali 文件还包括外部库,我想省略分析。我该怎么做?

1.您推荐什么方法?

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

2。这多个文件是什么意思?

在Java中有内部classes和隐含的内部classes。前者将出现在 OutherClass$InnerClass.smali 中,而后者没有自己的名字,得到数字,如 OuterClass.smali。有时您甚至会获得更深层次的信息,例如 a$b$c.smali.

3。生成的 .smali 文件还包括外部库,我想省略分析。我该怎么做?

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