我很好奇如果 Android 应用程序(我已安装的任何应用程序)对某个在线服务器(例如 RESTful 服务)进行 API 调用,我如何找出它使用的 API URL。我想我必须在设备上捕获数据包,并可能在 Wireshark 或其他东西中分析它们以找到 URL?我在 Java/Android 开发方面相当称职,但在涉及任何类型的网络分析业务时有点迷茫。
7 回答
你可以在WireShark的帮助下做到这一点。我在这里列出步骤
- 在您的计算机上安装WireShark
- 现在我们必须创建 Android 虚拟设备(AVD),所以我们将从官方网站下载 Android SDK。Android SDK 自带模拟器进行测试
- 设置 Android SDK 后,创建一个 Android 虚拟设备(AVD),我们将在其上安装应用程序
- 启动该虚拟设备。您可以使用命令行启动 (
emulator @<AVD name>
) - 使用 adb 命令创建虚拟设备安装应用程序后
adb install app_file_name.apk
- 现在我们可以开始捕获数据包了,所以我建议关闭您计算机上正在使用网络的其他应用程序,这样我们捕获的数据包就会更加相关。
- 现在以 root 访问权限启动wireshark
选择您要捕获的接口,然后单击开始开始捕获。
现在开始使用该应用程序,以便数据包来回传输,wireshark 将捕获它。
如果您使用过涵盖各种活动的应用程序,那么您可以停止使用wireshark 来捕获数据包。
现在开始主要业务仔细分析数据包,但并非所有数据包都对我们的工作有用。因此,让我们过滤与您相关的数据包。让你的 IP 地址是 192.168.0.32 然后过滤所有 IP 是这个的数据包。因此过滤器表达式将
ip.addr==192.168.0.32
应用此过滤器。我们仍然应用另一个过滤器来仅列出相关数据包,因此可能该应用程序正在使用 HTTP 协议访问 API,因此应用 HTTP 过滤器。表达式是http
. 您可以同时应用两者都是过滤器ip.addr==192.168.0.32 and http
按回车键应用。仔细查看列出的数据包的信息,您会看到很多重要的细节、API 密钥、cookie 等
一种非常快速的方法。
进入 PlayStore,搜索数据包捕获
下载、安装并运行。
这很容易简单快速。它将为您提供有关 API、URL 和响应及其标头的详细信息。
此应用程序遵循数据包嗅探的概念。因此,这可能不适用于 WhatsApp、Facebook、Twitter 等非常安全的应用程序。
更新 1:
Playstore 中不再提供数据包捕获,请尝试OS Monitor
更新 2:
数据 包捕获再次可用。
在 Windows 10 机器中,只需按照以下步骤操作:
转到设置 > 网络和 Internet > 移动热点并启用与其他设备共享我的 Internet 连接。
将您的移动设备连接到该共享热点。
现在要在您的手机中访问互联网,请单击更改适配器选项。
通过右键单击将 Internet 共享到 Windows 计算机的网络适配器转到属性。
通过选择适当的连接(移动设备使用的本地连接)勾选共享选项卡中的 Internet 连接共享选项,然后单击确定。
现在,如果您选择移动设备使用的本地连接,您将能够在 Wireshark 中看到移动设备的所有网络流量。要通过 http 流量过滤结果,您可以在过滤器字段中输入 http,对于https
Web 流量,您可以输入tls.handshake.type eq 1
从此站点下载适用于 PC 的 Android +6.0 映像:https ://www.android-x86.org/ 。
例如:https ://www.android-x86.org/releases/releasenote-6-0-r3.html
确保您的应用可以在此 Android 版本上运行——您可以在Google Play商店中查看最低 Android 版本——并且不要为 Andriod 版本设置过高的数字:数字越高,安全约束越多有。
安装VirtualBox,挂载 ISO 映像,启动 Android,然后通过 Google Play 安装应用程序。
现在你有两个选择:
如果流量未加密,您可以将所有 NIC 流量记录到文本文件中。例如
VBoxManage modifyvm "vm-name" --nictrace1 on --nictracefile1 c:\file.pcap
(参见此处)如果流量被加密,您可以使用中间人方法。一个允许这样做的应用程序是HttpCanary。它将建立一个 VPN 连接并通过该 VPN 重定向您的流量。它解密并运行良好,但请注意您的私人数据。
如果应用程序使用证书固定,那么它会变得更加复杂。阅读此博客。您将不得不在 x86 图像上使用这种方法。请注意,在那篇文章中,作者使用的是 Android x86 8.1(不是 x64!)和 Xposed Android SDK27。祝你好运!!
使用调试代理。单击播放按钮,您将能够捕获 URL 并查看更多详细信息
https://play.google.com/store/apps/details?id=com.dans.apps.webd
- 安装虚拟盒子和 genymotion http://www.2daygeek.com/install-upgrade-oracle-virtualbox-on-ubuntu-centos-debian-fedora-mint-rhel-opensuse/ 和http://www.2daygeek.com/ install-genymotion-android-emulator-on-ubuntu-centos-debian-fedora-rhel-opensuse-arch-linux-mint/#
- 运行 genymotion 。3. 之后你的愿望 android ADV 安装。
- 现在以 root 访问权限启动wireshark
尝试经典的 tcpdump
$ tcpdump -D
1.eth0 [Up, Running, Connected]
2.any (Pseudo-device that captures on all interfaces) [Up, Running]
3.lo [Up, Running, Loopback]
4.bluetooth-monitor (Bluetooth Linux Monitor) [Wireless]
5.usbmon2 (Raw USB traffic, bus number 2)
6.usbmon1 (Raw USB traffic, bus number 1)
7.usbmon0 (Raw USB traffic, all USB buses) [none]
8.nflog (Linux netfilter log (NFLOG) interface) [none]
9.nfqueue (Linux netfilter queue (NFQUEUE) interface) [none]
10.dbus-system (D-Bus system bus) [none]
11.dbus-session (D-Bus session bus) [none]
12.bluetooth0 (Bluetooth adapter number 0)
13.eth1 [none, Disconnected]