我正在尝试开发一种基本分析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
文件还包括我想要省略分析的外部库。我怎么能这样做?
答案 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.*
包含库。在检查之后,您只需从搜索中排除这些目录。