我想从Android应用程序的apk中提取所有API调用。我用apktool从apk获取smali代码文件。手动我可以发现一些API调用,但我需要一个自动方法。例如,我可以在这行代码中看到getNetworkInfo
调用:
invoke-virtual {p0, v0}, Landroid/net/ConnectivityManager;->getNetworkInfo(I)Landroid/net/NetworkInfo;
我没有使用smali代码的经验,也没有使用Android应用程序分析的经验;我只发现了上面的API调用,因为我碰巧知道“getNetworkInfo”是一个。但是,当然,我不想做的是从所有可能的API调用列表开始,并逐个在smali文件中搜索它们。
还有另一个API调用的迹象吗? invoke-virtual
或invoke-direct
是否始终意味着API调用?
答案 0 :(得分:1)
invoke-virtual
和invoke-direct
分别使用和不使用虚拟方法解析来调用某个对象的方法。这不一定是API调用;您可以将这些指令用于任何类型的对象,包括您在自己的代码中定义的类的实例。
在这种情况下,您在android.net.ConnectivityManager
类中找到了对方法的调用。如果您想要查找更多API调用,可以先搜索引用某些类的invoke-*
指令,例如可能包含android.*
,java.*
,javax.*
下的所有内容等等。