我有一个 Android 移动应用程序,当尝试嗅探时,我看不到它的一些请求(此移动应用程序不需要用户进行任何类型的身份验证)
我尝试在 iOS 上使用 Proxyman,并且捕获了请求和响应(甚至 HTTP),但我看不到所有这些。例如,我看不到包含产品详细信息或产品列表的请求。 Proxyman 开发者回答我:
也许应用程序不使用 URLSession(Apple 框架)来发出网络请求。如果是在线应用程序,则可以是 React Native、Flutter 应用程序,(默认情况下)不通过 VPN。 因此,Proxyman 无法捕获它。
我在我的 Android 模拟器上尝试了 Wideshark / Charles / Mitmproxy(尝试过 Android 版本 5.1 - 11.0),但它也不起作用
我尝试过反编译这个应用程序的APK(使用apktool),并且发现了很多.java文件,但是在那里找到API路径太难了,因为所有名称都是不可读的(但我找到了一些,但它不是)够了)
你能告诉我,我该怎么做才能获取这个移动应用程序的API吗?
我真的不知道,它怎么会这么难,为什么我不能得到一个简单的API调用,因为我的应用程序以某种方式知道,它应该去哪里以及它应该获取哪种类型的数据(在浏览器中它这么多更容易!)
您有root权限吗?要拦截 Android 应用程序,您唯一的选择实际上是 root 访问权限(并更改设备系统配置)或修改应用程序 APK。对于大多数应用程序(未专门配置为允许用户证书/可调试的所有应用程序),没有其他可能的方法来拦截流量。
我在这里详细介绍了 Android HTTPS 信任的工作原理,以及如何拦截它的底层细节:https://httptoolkit.com/blog/intercepting-android-https/。这可能会提供更多背景信息,但结论是相同的:您需要修改系统,或修改应用程序。
如果您没有root访问权限,因此无法修改系统,apk-mitm通常是您的最佳选择,如果这不起作用,那么您将必须自己手动调查Java代码。
请注意,您始终可以使用模拟器来运行应用程序,并且大多数模拟器(除官方“Google Play”模拟器版本之外的所有模拟器 - 例如官方“Google API 服务”和普通图像均可通过 root 访问)将允许 root访问,所以这通常是可能的。您还可以使用模拟器,例如 Genymotion,它有免费的个人使用版本。
如果这对您来说实用,我会这样做 - 我在这里编写了模拟器设置和第 3 方应用程序拦截的完整演练:https://httptoolkit.tech/blog/inspect-any-android-apps- http/
最后一种可能性:如果大多数 HTTPS 的拦截都有效,但只有某些请求失败,那么您需要禁用证书固定。您可以使用 Frida 来完成此操作,我为 Android 编写了一个通用证书取消固定脚本,您可以在此处使用 Frida:https://github.com/httptoolkit/frida-android-unpinning
您可以使用iOS上的抓包工具Hodor,它可以直接捕获Flutter的网络流量,无需修改任何代码。它支持常见的 HTTPS,以及 WebSocket、TCP 和 UDP。