如何计算 APK 中的方法调用? (使用 .smali 格式)
How can I count method calls inside APK? (using .smali format)
我正在尝试开发一种工具,主要用于分析 Android 应用 APK 并计算对特定 API 方法(例如 android.app.AlarmManager.set()
)的调用次数
1.您推荐什么方法?
到目前为止,我已经使用了 APKTool 个文件,现在我有 .smali
个文件。
但是,对于同一个 java 来源,我可以有多个文件:
ExportAsyncTask.smali
ExportAsyncTask.smali
ExportAsyncTask.smali
ExportAsyncTask.smali
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.*
包含库。经过这样的检查后,您只需从搜索中排除这些目录。
我正在尝试开发一种工具,主要用于分析 Android 应用 APK 并计算对特定 API 方法(例如 android.app.AlarmManager.set()
)的调用次数
1.您推荐什么方法?
到目前为止,我已经使用了 APKTool 个文件,现在我有 .smali
个文件。
但是,对于同一个 java 来源,我可以有多个文件:
ExportAsyncTask.smali
ExportAsyncTask.smali
ExportAsyncTask.smali
ExportAsyncTask.smali
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.*
包含库。经过这样的检查后,您只需从搜索中排除这些目录。