【问题标题】:Extracting all API calls from .smali files in android apk从 android apk 中的 .smali 文件中提取所有 API 调用
【发布时间】:2016-08-16 23:53:02
【问题描述】:

我想从 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 调用?

【问题讨论】:

  • 我建议使用 dexlib2 以编程方式访问 dex 文件,而不是尝试解析 smali 文件。

标签: android smali


【解决方案1】:

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

在本例中,您发现了对 android.net.ConnectivityManager 类中的方法的调用。如果您想查找更多 API 调用,可以先搜索引用某些类的 invoke-* 指令,例如可能包括 android.*java.*javax.* 等下的任何内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    相关资源
    最近更新 更多