2016-08-16 68 views
1

我想从Android应用程序的apk中提取所有API调用。我已经使用apktool从apk获取smali代码文件。手动我可以发现一些API调用,但我需要一种自动方法。例如,我可以看到getNetworkInfo呼叫在这行代码:从android中的.smali文件中提取所有API调用apk

invoke-virtual {p0, v0}, Landroid/net/ConnectivityManager;->getNetworkInfo(I)Landroid/net/NetworkInfo; 

我有smali代码没有经验,很少有Android应用程序分析;我只发现了上面的API调用,因为我碰巧知道“getNetworkInfo”是一个。但是,当然,我不想做的事情是从所有可能的API调用列表开始,并在smali文件中逐一搜索它们中的每一个。

是否有API调用的另一个迹象? invoke-virtualinvoke-direct将总是意味着一个API调用?

+1

我会建议使用dexlib2访问DEX文件以编程方式,而不是试图解析smali文件。 – JesusFreke

回答

1

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

在这种情况下,您找到了android.net.ConnectivityManager类中方法的调用。如果你想找到更多的API调用,您可以通过搜索invoke-*指令引用某些类,例如可能包括android.*下任何东西,java.*javax.*等开始

相关问题