如何从 Android 移动应用程序获取 API 请求(我不是它的开发人员)?

How to get API requests from Android mobile app (I am not it's developer)?

提问人:No Root Rights 提问时间:2/2/2023 最后编辑:RobertNo Root Rights 更新时间:2/2/2023 访问量:2371

问:

我有一个 Android 移动应用程序,在尝试嗅探时我看不到它的某些请求(此移动应用程序不需要用户的任何类型的身份验证)

我尝试在 iOS 上使用 Proxyman,并且捕获了请求和响应(甚至是 HTTP),但我无法看到所有请求和响应。例如,我看不到带有产品详细信息或产品列表的请求。Proxyman 开发人员回答我:

也许该应用程序不使用 URLSession (Apple Framework) 来发出网络请求。如果它是一个在线应用程序,它可以是一个 React Native、Flutter 应用程序,它(默认情况下)不通过 VPN。 因此,Proxyman 无法捕获它。

我已经在我的 Android 模拟器上尝试过 Wideshark / Charles / Mitmproxy(尝试过 Android 版本 5.1 - 11.0),但它也不起作用

我尝试过反编译此应用程序的APK(使用apktool),并且发现许多.java文件,但是很难在那里找到API路径,因为所有名称都不可读(但是我找到了一些,但这还不够)

你能告诉我,我能做些什么来获取这个移动应用程序的 API 吗?

我真的不知道,怎么会这么难,为什么我不能得到一个简单的 API 调用,因为我的应用程序不知何故知道,它应该去哪里以及它应该获取哪种类型的数据(在浏览器中它要容易得多!

Android 代理 charles-proxy mitmproxy 嗅探

评论

0赞 Robert 2/2/2023
请再读一遍 stackoverflow.com/a/62731432/150978 的第一部分。如果您看到一些 HTTPS 请求,但不是全部,则很可能使用了证书固定。关于固定,请参阅例如 stackoverflow.com/a/64659970/150978
0赞 No Root Rights 2/2/2023
谢谢!我正试图尽可能多地获得有关这方面的信息,我只是迷路了,什么时候尝试在 Android Studio 模拟器上安装 Magisk + Edxposed + TrustMeAlready Xposed 模块也许你有一些关于这方面的文章?(我根本不是移动开发人员)
0赞 Robert 2/3/2023
如果它只是 root 设备上的一个应用程序,我更喜欢 Frida+Objection,因为它更容易安装且更灵活地适应。

答:

3赞 Tim Perry 2/2/2023 #1

你有root访问权限吗?要真正拦截 Android 应用程序,您唯一的选择实际上是 root 访问权限(以及更改设备系统配置)或修改应用程序 APK。对于大多数应用(未专门配置为允许用户证书/可调试的所有应用),没有其他可能的方法来拦截流量。

我已经写了一篇关于android HTTPS信任如何工作的详细分类,以及如何拦截它的低级细节,在这里:https://httptoolkit.com/blog/intercepting-android-https/。这可能会提供更多上下文,但结论是一样的:您需要修改系统或修改应用程序。

如果您没有 root 访问权限,因此无法修改系统,apk-mitm 通常是您的最佳选择,如果这不起作用,那么您将不得不自己手动调查 Java 代码。

但请注意,您始终可以使用模拟器来运行应用程序,并且大多数模拟器(除了官方的“Google Play”模拟器版本之外,所有模拟器 - 例如,官方的“Google API Services”和普通图像都可以访问root)将允许root访问,因此这通常是可能的。您还可以使用像 Genymotion 这样的模拟器,它有一个免费的个人使用版本。

如果这对你有用,我会这样做 - 我已经在这里写了一个完整的模拟器设置和第三方应用程序拦截演练:https://httptoolkit.tech/blog/inspect-any-android-apps-http/

最后一种可能性:如果大多数HTTPS的拦截工作正常,但只有一些请求失败,那么您需要禁用证书固定。您可以使用 Frida 执行此操作,我已经为 Android 编写了一个通用证书解锁脚本,您可以在此处使用 Fridahttps://github.com/httptoolkit/frida-android-unpinning