使用Python,鉴于它是.apk文件,我试图提取Android应用程序进行的API调用。有没有一种方法可以通过对包的APK进行静态分析来解析/提取包所使用的API的名称?到目前为止,这是我尝试过/发现的内容。我之前曾看到过此问题,但一直无法遵循(非常有限的)有效解决方案的答案。我知道有些工具(例如Cartographer)可以完成此任务,但是我无法使代码的相关部分正常工作。CHABADA可以使用另一种工具,但是它不是开源的。我已经能够从APK中获取其他信息,例如使用Androguard的外部类,AndroidManifest.xml使用APK Static Analyzer的文件的组件以及使用Apktool的文件,我可以将清单解码为可读格式,还可以获取smali文件。先前的另一篇文章询问如何从以下代码行解析API的smali文件: invoke-virtual {p0, v0}, Landroid/net/ConnectivityManager;->getNetworkInfo(I)Landroid/net/NetworkInfo;但这并不似乎是因为一个有用的方法invoke-virtual或invoke-direct并不一定表示API的使用,并解析smali文件是一个较重的任务相比,有一些办法只是静态分析的APK中提取所谓的API。还建议使用Dexlib2,但我看不到它可以在哪里提取API调用,并且全部使用Java,而我一直在使用Python。工具API密钥检测器为我提供了所使用的API密钥,但是我不知道如何从中获取API名称。有什么办法吗?
3 回答
大话西游666
TA贡献1817条经验 获得超14个赞
我想在顶部发表评论,但是由于我是堆栈中的新手,所以不能。仅调用Androguard的dx.get_methods()更好吗?然后从那里检查?没有创建文件CFG?
慕桂英4014372
TA贡献1871条经验 获得超13个赞
您可以使用apk分析仪进行apk解剖。
我之前使用过以下命令apkanalyzer dex packages [apk-file]
。该命令的输出包含已定义/引用的包/类/方法/字段的所有详细信息。链接中提供了有关如何解析输出的详细信息。
添加回答
举报
0/150
提交
取消