1

我正在尝试开发一种工具,该工具基本上可以分析 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文件还包括我想省略分析的外部库。我怎样才能做到这一点?

4

1 回答 1

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 文件还包括我想省略分析的外部库。我怎样才能做到这一点?

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

于 2017-01-24T15:16:59.243 回答