python调用安卓api_如何从APK文件中提取API调用?

使用Python,我试图提取Android应用程序发出的API调用,因为它是.apk文件。在

有没有一种方法可以通过对APK的静态分析来解析/提取包所使用的api的名称?在

以下是我迄今为止尝试/发现的

我见过这个问题posted before,但还没能从(非常有限的)答案中找到一个可行的解决方案。在

我知道有一些工具,比如Cartographer可以完成这项工作,但是我还不能让代码的相关部分正常工作。另一个工具CHABADA可以做到,但不是开源的。在

我已经能够从apk获得一些其他信息,例如使用Androguard的外部类,AndroidManifest.xml文件的组件使用APK Static Analyzer,并且使用{a6},我可以将清单解码为可读格式,还可以获得smali文件。在

Another previous post询问如何解析smali文件中的api,内容如下:invoke-virtual {p0, v0}, Landroid/net/ConnectivityManager;->getNetworkInfo(I)Landroid/net/NetworkInfo;

但是这似乎不是一个有用的方法,因为invoke-virtual或{}并不总是指示API的用法,解析smali文件比通过静态分析APK本身来提取调用的API的任务更重。在

Dexlib2也被推荐使用,但我不知道它在哪里可以提取API调用,而且都是用Java编写的,而我一直在Python中工作。在

工具API Key detector提供了所使用的API密钥,但我不知道如何从中获取API名称。在

有什么解决办法吗?在

更新#1

我使用Androguard按照@ShirishSingh生成.gexf格式的CFG,它可以给我以下形式的节点:

^{pr2}$

我可以在上面看到newOnQueryTextListener是一个使用Landroid的方法。然而,还有许多来自内部类的方法节点。如何区分方法的节点与内部类、从其他库导入的节点、以及那些实际的API调用?在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值