SuperAPI AI 工具集

reversing-flutter-apps

安全与审计

查看项目

更新于 10-16 02:28

技能介绍

用途:Flutter 应用把 Dart AOT 编译成原生快照,dex 里几乎没有可反编译内容;同时 Flutter 引擎自带的 BoringSSL 与信任库会忽略系统代理和用户 CA,导致拦截代理看不到任何流量。本技能用于识别此类构建并恢复 Dart 结构、查看和拦截网络流量。

适用判断:jadx 中 MainActivity 近乎为空;APK 含 lib/arm64-v8a/libflutter.so、libapp.so 或 assets/flutter_assets/;IPA 含 Frameworks/App.framework 与 Frameworks/Flutter.framework;Burp、mitmproxy 或 Charles 看不到明显在联网的应用流量;需要恢复 Dart 类名、方法名或定位 API 层。不适用于普通 Java/Kotlin 应用、React Native、Unity、纯后端测试或通用原生 .so 逆向。

先识别构建模式:unzip -l target.apk | rg 'libflutter|libapp|flutter_assets|kernel_blob'。若为 libapp.so 加 libflutter.so 属 AOT release,是主要处理路径;若为 kernel_blob.bin 属 Debug/JIT,更易处理且可能可连 Dart VM service。可用 strings lib/arm64-v8a/libflutter.so | rg -m5 'Flutter|Dart VM version|dart-sdk' 确认引擎版本。

恢复 Dart 结构:blutter 解析 AOT 快照,恢复类、方法、字段名与对象池,需要同时提供两个库。用法:unzip -j target.apk 'lib/arm64-v8a/*' -d ./libs 后执行 python3 blutter.py ./libs ./out。产物包括 pp.txt(对象池,含字符串、URL、密钥、端点,优先阅读)、objs.txt、asm/、ida_script/、blutter_frida.js。常见失败是 Dart 版本不匹配,应依据引擎版本重建 blutter。混淆构建中名称会被剥离,但对象池、调用图与字符串常量仍在,可转向 pp.txt 定位 API 层。

流量拦截需同时解决两个问题:Flutter 不读系统代理,可在设备上重定向,如 adb shell su -c 'iptables -t nat -A OUTPUT -p tcp --dport 443 -j DNAT --to <proxy-ip>:8080',或使用 tun2socks/VPN 模式代理;Flutter 不信任系统 CA,可用 reFlutter 修补引擎并重打包签名(reflutter target.apk 后 apksigner sign --ks debug.keystore release.RE.apk),或用 Frida 在运行时 hook libflutter.so 的证书校验,需注意 ssl_verify_peer_cert 未导出、模式与引擎版本相关。

后续工作:从 pp.txt 起步梳理端点与密钥,用 blutter_frida.js 生成 hook 观察请求构造、鉴权与本地加密;涉及生物识别、密钥库、支付等平台通道时交回常规移动应用测试;API 自身安全测试需在流量可见后单独进行。

限制:以上信息未提供具体版本兼容列表、收费与价格,也未给出可直接使用的完整脚本示例;blutter 对新 Flutter 版本可能需等待兼容,混淆与完整性校验会增加难度。