嗅探安卓应用程序以查找API URL

77

我很好奇如何找出安装在Android设备上的应用程序(任何一个应用程序)使用的API URL,如果它调用一些在线服务器的API(例如RESTful服务)。 我假设我必须在设备上捕获数据包,并可能在Wireshark或其他工具中分析它们以查找URL? 我对Java / Android开发相当熟练,但在涉及任何类型的网络分析业务时有点迷失。


你可以使用像Charles这样的调试HTTP代理。 - Lesleh
3
基本上,您需要在计算机上安装Charles,告诉您的Android设备将该计算机用作HTTP代理,然后所有请求都将通过那里发送,从而允许您查看通过应用程序进行的各个请求。SSL有点更复杂。 - Lesleh
9个回答

100

您可以借助WireShark来完成此操作。我在此列出步骤:

  1. 在计算机上安装WireShark
  2. 现在我们需要创建Android虚拟设备(AVD),因此我们将从官方网站下载Android SDK。Android SDK附带用于测试的模拟器。
  3. 设置好Android SDK后,在其中创建一个Android虚拟设备(AVD),我们将在其中安装应用程序。
  4. 启动该虚拟设备。您可以使用命令行启动(emulator @<AVD name>)
  5. 创建虚拟设备后,使用adb命令安装应用程序adb install app_file_name.apk
  6. 现在我们可以开始捕获数据包,因此建议关闭计算机上正在使用网络的其他应用程序,以便我们捕获的数据包更相关。
  7. 现在以root权限启动Wireshark
  8. 选择要捕获的接口,并单击“开始”以开始捕获。

    wireshar start image

  9. 现在开始使用该应用程序,以便数据包在Wireshark中传输和捕获。

    list of packets

  10. 如果您已使用覆盖各种活动的应用程序,则可以停止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按Enter键应用。

    wireshark details

  • 仔细查看列出的数据包的信息,您将看到许多重要的详细信息,如API密钥,cookie等。


  • 你需要安装Android SDK才能获取ADB和模拟器。 - Alok
    42
    如果应用程序通过 HTTPS 协议连接,Wireshark 仍然可以进行日志记录吗? - savepopulation
    8
    使用https协议时,协议为"TLS 1.2",请求被加密,因此可以在wireshark中记录该请求,但是并没有太多有用的信息(没有端点和cookies)。 - minhhq
    它显示HTTPS日志吗? - bhaskar
    需要注意的是,在某些国家干涉任何数据包实际上可能违反法律。 - undefined

    31

    一种非常快速的方法。
    前往PlayStore,搜索Packet Capture

    下载、安装并运行。
    它易用简单且快速。它会给你有关API、URL和响应及其标头的详细信息。

    此应用程序遵循数据包嗅探的概念。因此,它可能无法与像WhatsApp、Facebook、Twitter这样更加安全的应用程序一起使用。

    更新1:
    Packet Capture在Playstore中不再可用,尝试OS Monitor

    更新2:
    Packet Capture再次可用。


    该应用程序已不再在Play商店上提供。是否有任何替代解决方案? - Kr1
    @118218 你可以尝试使用这个应用程序:https://play.google.com/store/apps/details?id=com.eolwral.osmonitor - reverie_ss
    3
    原本建议的应用程序仍然像以前一样可用。 - Forage
    这很简单,对我有用。这应该是被接受的答案,谢谢。 - Onkar Musale
    7
    目前在最近的安卓系统中出现了故障。 - Edza
    有任何替代方案吗?因为即使我的手机使用较新的安卓版本,该应用程序也不可用。 - Ali Sajjad

    5
    在Windows 10机器上,只需按照以下步骤操作:
    1. 进入“设置”>“网络和Internet”>“移动热点”,启用“与其他设备共享我的Internet连接”。

    2. 将您的移动设备连接到该共享热点。

    3. 现在,要在移动设备中获取Internet访问权限,请单击“更改适配器选项”。

    4. 通过右键单击用于共享Internet的网络适配器,进入属性。

    5. 在“共享”选项卡中勾选“Internet连接共享”选项,并选择适当的连接(移动设备使用的本地连接),然后单击“确定”。

    现在,如果您选择了移动设备使用的本地连接,则可以在Wireshark中查看移动设备的所有网络流量。要通过http流量过滤结果,您可以在过滤器字段中输入http;要过滤https web流量,则可以输入tls.handshake.type eq 1

    4
    简单的解决方案,但是对于分析现代Android应用程序中的HTTPS内容几乎是不可能的。 - Falco Alexander

    4
    从该网站下载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安装应用程序。
    现在您有两个选项:
    1. 如果流量未加密,您可以将所有NIC流量记录到文本文件中。例如:VBoxManage modifyvm "vm-name" --nictrace1 on --nictracefile1 c:\file.pcap(参见这里)。

    2. 如果流量已加密,则可以使用中间人攻击方法。一种允许此操作的应用程序是HttpCanary。它将建立一个VPN连接并通过该VPN重定向您的流量。它可以解密并正常工作,但请注意您的私人数据。

    3. 如果应用程序正在使用证书固定,则变得更加复杂。阅读这篇博客。您将不得不在x86映像上使用方法。请注意,在那篇文章中,作者使用的是Android x86 8.1(而不是x64!)和Xposed Android SDK27。祝你好运!!


    1
    HTTPCanary是唯一一个对我有效的解决方案。 - kiesel
    1
    老实说,我认为这应该是被接受的答案!HttpCanary是我过去使用的工具,因为它已经从应用商店中删除,所以我忘记了它的名字。但我现在已经得到了APK,并且可以很好地检查我的API :) - Brandin Arsenault

    0
    尝试使用经典的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]
    


    0

    0
    你可以使用这个:https://github.com/kendarorg/HttpAnsweringMachine。它能够记录(更改和重放)所有的http和https调用,以及拦截所有被联系的服务器。只需像这样设置:https://github.com/kendarorg/HttpAnsweringMachine/blob/main/docs/generated/googlehack_android.md添加需要捕获的地址的dns和ssl证书,然后记录它们(https://github.com/kendarorg/HttpAnsweringMachine/blob/main/docs/generated/localsample.md)。它将存储所有可读的内容。只需要一台安装了Java 11的PC或Mac即可开始使用 :) PS我是该项目的创建者:p

    0

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接