从 android apk 中的 .smali 文件中提取所有 API 调用

Extracting all API calls from .smali files in android apk

我想从 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-virtualinvoke-direct 总是意味着 API 调用吗?

invoke-virtualinvoke-direct 分别调用某个对象的方法,有和没有虚方法解析。这不一定是 API 调用;您可以将这些说明用于任何类型的对象,包括您在自己的代码中定义的 classes 的实例。

在这种情况下,您发现了对 android.net.ConnectivityManager class 中方法的调用。如果您想找到更多 API 调用,您可以从搜索引用某些 class 的 invoke-* 指令开始,例如可能包括 android.*java.*javax.*、等等