使用Burp Suite和Genymobile对Flutter移动应用进行逆向工程

3 阅读4分钟

如何使用 Burp Suite 和 Genymotion 对 Flutter 移动应用进行逆向工程?

拦截 Flutter 应用程序的流量是出了名的困难。与标准的 Android 应用不同,Flutter 使用 Dart 语言,它不遵循系统的代理设置。这意味着仅仅在手机上设置 WiFi 代理是无法捕获其流量的。

在本指南中,我们将通过使用 reflutter 来修补应用程序的二进制文件,从而绕过这一限制,使我们能够通过 Burp Suite 拦截流量。

准备工作

在开始之前,请确保您已安装以下工具:

  • Java (用于签名/APK 编辑)
  • Python (用于 reflutter)
  • APKEditor (可选 — 用于 APK 编辑)
  • uber-apk-signer (用于签名)
  • reflutter (Python 包)
  • Burp Suite Community 或 Pro (代理)
  • Genymotion (用于模拟器)

步骤 1:获取 APK

从 APKPure 或 APKCombo 等来源下载您的目标 Flutter APK。

关于 XAPK 文件的说明: 如果您的下载文件是 .xapk 格式,则无法直接使用。您必须首先使用 APKEditor 将其合并成一个标准的 APK。

(如果需要)将 XAPK 转换为 APK:

# java -jar /path/to/APKEditor.jar m -i /path/to/app.xapk
sudo java -jar /Users/user/Documents/APKEditor-1.3.9.jar m -i /Users/user/Downloads/12.10.2_APKPure.xapk

图:将 xapk 转换为 apk

步骤 2:使用 Reflutter 修补 APK

我们将使用 reflutter 来分析库文件并重写负责 SSL 证书绑定和代理处理的代码。

首先,安装该工具:

pip3 install reflutter

接下来,在您的 APK 上执行 reflutter:

# reflutter /path/to/your_app.apk
/Users/user/Library/Python/3.9/bin/reflutter /Users/user/Downloads/12.10.2_APKPure_merged.apk

图:配置

配置: 该工具会提示您进行选择。请选择 选项 1:流量监控和拦截。 然后它会询问您的 机器 IP。这是运行 Burp Suite 的计算机的 IP 地址(不是模拟器的 IP)。

查找本地 IP 的方法:

  • Mac/Linux: 运行 ifconfig 命令(查找 en0wlan0 接口)。
  • Windows: 运行 ipconfig 命令。 或者您也可以在 Wi-Fi 设置 中找到它。

图:WiFi 设置(macOS) 图:使用 reflutter 修补 APK 图:reflutter 运行中

reflutter 会在您的目录中生成一个名为 release.RE.apk 的新文件。

步骤 3:签名修补后的 APK

如果签名无效,Android 将不会安装 APK。由于我们修改了二进制文件,必须使用 uber-apk-signer 重新签名。

运行以下命令:

# java -jar uber-apk-signer.jar --apk release.RE.apk
java -jar /Users/user/Documents/uber-apk-signer-1.3.0.jar  --apk /Users/user/release.RE.apk

图:使用 uber-apk-signer 工具重新签名 APK 图:成功重新签名 APK

您应该会看到一条 "Successfully processed 1 APKs and 0 errors in xx seconds" 的消息。一个新文件 release.RE-aligned-debugSigned.apk 将被创建。这就是我们稍后要在 Genymotion 中安装的文件。 图:生成的文件

步骤 4:配置 Burp Suite

因为 reflutter 将应用修补为直接向特定 IP 和端口发送流量(绕过标准的代理握手),我们必须配置 Burp 以通过 隐形代理 接受此流量。

  1. 打开 Burp Suite,导航到 Proxy > Proxy Settings
  2. 点击 Add 创建一个新的监听器。
  3. Binding 标签页:
    • Bind to port: 填入 8083 (这是 reflutter 默认的目标端口)。
    • Bind to address: 选择 "All interfaces"。
  4. Request Handling 标签页:
    • 勾选 Support invisible proxying 复选框。

图:步骤 1 - Proxy Settings 图:步骤 2 - 添加监听器 图:步骤 3 - Binding 配置 图:步骤 4 - 启用隐形代理

步骤 5:在 Genymotion 上安装

我们使用 Genymotion 是因为它通常比标准的 Android Studio 模拟器更快、更容易获得 Root 权限和配置,尽管此方法也适用于任何设备。

  1. 启动 Genymotion
  2. 创建一个新的虚拟设备(例如,Google Pixel 9)并保持默认设置。
  3. 启动 该设备。
  4. release.RE-aligned-debugSigned.apk 文件拖放到模拟器屏幕上以进行安装。

图:步骤 1 - 打开 Genymotion 图:步骤 2 - 创建虚拟设备,选择 "Google Pixel 9" 并点击 NEXT 图:步骤 2a - 默认设置,点击 NEXT 图:步骤 2b - 默认设置,点击 NEXT 图:步骤 2c - 默认设置,点击 NEXT 图:步骤 2d - 默认设置,点击 NEXT 图:步骤 2e - 点击 INSTALL 图:步骤 2f - 下载中 图:步骤 3 - 启动设备 图:步骤 4 - 将 APK 文件拖放到此处

步骤 6:拦截流量

图:Burp Suite 监听器配置

  1. 确保 Burp Suite 正在运行,并且监听器已在端口 8083 上启动。
  2. 在您的 Genymotion 模拟器上打开该应用。
  3. 在应用内执行操作(登录、刷新信息流等)。
  4. 砰!🚀 您现在应该可以看到 HTTP 流量出现在您的 Burp Suite 代理历史记录中,这些流量已完全解密,可供分析。

图:成功拦截流量

结论

由于 Dart 处理网络流量的方式,逆向工程 Flutter 应用程序需要一种特定的方法。通过使用 reflutter,我们成功绕过了通常阻碍标准拦截尝试的 SSL 证书绑定和代理感知问题。

⚠️ 免责声明: 本指南仅用于教育和安全研究目的。在对他人软件进行逆向工程或渗透测试之前,请始终确保您已获得应用所有者的许可。

**祝您黑客技术愉快!**FINISHED CSD0tFqvECLokhw9aBeRqvJmZ3VQuQ9+032ugeDdA+zvHYOtRoGldYD4T+JurcVdtK9A33uh5+tZRYSHa92stvwcLpXHbJg9quxlxcQuSqVQWIYZ3Asx0BjEKckzT/b+QvBq4C11SP5JycAT+5TJWSLKmW009maf08KQAI2WnlQ=