为了账号安全,请及时绑定邮箱和手机立即绑定

如何从APK文件提取API调用?

如何从APK文件提取API调用?

慕尼黑的夜晚无繁华 2021-03-31 13:30:00
使用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?


查看完整回答
反对 回复 2021-04-27
?
慕沐林林

TA贡献2016条经验 获得超9个赞

dx.get_classes()将返回所有类。然后,您可以检查标记为“外部”的API调用。请参阅链接: 使用分析对象


查看完整回答
反对 回复 2021-04-27
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

您可以使用apk分析仪进行apk解剖。

我之前使用过以下命令apkanalyzer dex packages [apk-file]。该命令的输出包含已定义/引用的包/类/方法/字段的所有详细信息。链接中提供了有关如何解析输出的详细信息。


查看完整回答
反对 回复 2021-04-27
  • 3 回答
  • 0 关注
  • 703 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信