查看: 79|回复: 60

[相关教程] Flutter App逆向:Blutter提取Dart方法到Frida hook

[复制链接]

96

主题

5

回帖

951

积分

UID
2
贡献
9 点
钻石
7 个
C币
993 个
发表于 2026-5-15 11:10:05 | 显示全部楼层 |阅读模式
Flutter App 逆向跟原生 Android 逆向完全不同。Flutter 用 Dart 语言,AOT 编译后没有 Java 层可以 hook。

一、Flutter 编译方式

  • Debug 模式:JIT 编译,Dart 代码在运行时解释执行。可以用 Observatory 调试
  • Release 模式:AOT 编译,Dart 代码编译成 ARM64 原生二进制。没有符号信息

发布版都是 Release 模式,逆向难点在这里。

二、Blutter 工具
Blutter 是目前最好的 Flutter 逆向工具。它能从 AOT snapshot 中提取:

  • 所有 Dart 类和方法名
  • 方法地址映射
  • 对象结构布局


用法:
  1. python blutter.py path/to/app/lib/arm64-v8a/libflutter.so path/to/app/lib/arm64-v8a/app.so output_dir/
复制代码

输出 asm 目录下的汇编文件,每个方法都有 Dart 原名注释。

三、Frida hook Flutter 方法
Flutter 编译后的方法入口在 app.so 里。用 Blutter 找到地址后:
  1. var addr = ptr("0x12345"); // LoginApi.verify
  2. Interceptor.attach(addr, {
  3.     onEnter: function(args) {
  4.         // args[0] = this 对象
  5.         // args[1] = 第一个 Dart 参数
  6.         // Dart 字符串需要特殊解析,不是普通的 C 字符串
  7.         console.log("verify called");
  8.     }
  9. });
复制代码

四、Dart 字符串解析
Dart 的字符串在内存中的布局跟 C 字符串不同。需要读取 Dart 对象头再定位到字符串数据:
  1. function readDartString(ptr_obj) {
  2.     // Dart String 对象布局因版本而异
  3.     // 通常:对象头 + 长度 + 字符数据
  4.     var length = ptr_obj.add(8).readS32();
  5.     var data = ptr_obj.add(16);
  6.     return data.readUtf8String(length);
  7. }
复制代码

五、抓包替代方案
Flutter 不用系统的 HTTP 库,用自己的 HttpClient。常规抓包工具抓不到。用 reFlutter 框架重打包注入流量代理,或者 hook dart:io 的 HttpClient 做拦截。

温馨提示:
1、在论坛里发表的文章仅代表作者本人的观点,与本网站立场无关。
2、论坛的所有内容都不保证其准确性,有效性,时间性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
3、当政府机关依照法定程序要求披露信息时,论坛均得免责。
4、若因线路及非本站所能控制范围的故障导致暂停服务期间造成的一切不便与损失,论坛不负任何责任。
5、注册会员通过任何手段和方法针对论坛进行破坏,我们有权对其行为作出处理。并保留进一步追究其责任的权利。
6、网络世界也请遵守我国的法律法规!一旦发现违法行为,将立即封存相关信息并报警处理!
回复

使用道具 举报

匿名  发表于 2026-9-17 18:32:16
楼猪V5啊
回复

使用道具

0

主题

365

回帖

365

积分

UID
168082
贡献
0 点
钻石
0 个
C币
1 个
发表于 2026-9-17 18:39:34 | 显示全部楼层
这类技术更新的频率很高,老教程参考价值有限。你们环境是怎么解决版本兼容的?
回复

使用道具 举报

0

主题

361

回帖

38

积分

UID
812017
贡献
0 点
钻石
0 个
C币
0 个
发表于 2026-9-17 18:41:10 | 显示全部楼层
这类壳本质就是给分析加成本,真下定决心还是能扒出来。有没有推荐的入门资料?
回复

使用道具 举报

0

主题

381

回帖

50

积分

UID
764601
贡献
0 点
钻石
0 个
C币
1 个
发表于 2026-9-17 18:44:07 | 显示全部楼层
开源工具的质量参差不齐,选之前最好看下维护活跃度。
回复

使用道具 举报

0

主题

356

回帖

356

积分

UID
845142
贡献
0 点
钻石
0 个
C币
1 个
发表于 2026-9-17 18:46:28 | 显示全部楼层
App 侧的安全基本靠客户端自觉,服务端校验才是最后一道。
回复

使用道具 举报

0

主题

366

回帖

61

积分

UID
172788
贡献
0 点
钻石
0 个
C币
0 个
发表于 2026-9-17 18:48:23 | 显示全部楼层
加固厂商之间差异挺大,同一套思路不一定通用。
回复

使用道具 举报

0

主题

389

回帖

46

积分

UID
918875
贡献
0 点
钻石
0 个
C币
0 个
发表于 2026-9-17 18:50:28 | 显示全部楼层
实际做的时候最花时间的是环境搭建而不是分析本身。
回复

使用道具 举报

0

主题

377

回帖

0

积分

UID
958922
贡献
0 点
钻石
0 个
C币
0 个
发表于 2026-9-17 18:53:12 | 显示全部楼层
现在很多方案开始用双端校验,单点突破越来越难。想请教下工具链是怎么配的?
回复

使用道具 举报

0

主题

382

回帖

46

积分

UID
798830
贡献
0 点
钻石
0 个
C币
1 个
发表于 2026-9-17 18:56:15 | 显示全部楼层
反调试这块的坑最多,建议先把常见检测点列一遍。有没有推荐的入门资料?
回复

使用道具 举报

温馨提示:
1、在论坛里发表的文章仅代表作者本人的观点,与本网站立场无关。
2、论坛的所有内容都不保证其准确性,有效性,时间性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
3、当政府机关依照法定程序要求披露信息时,论坛均得免责。
4、若因线路及非本站所能控制范围的故障导致暂停服务期间造成的一切不便与损失,论坛不负任何责任。
5、注册会员通过任何手段和方法针对论坛进行破坏,我们有权对其行为作出处理。并保留进一步追究其责任的权利。
6、网络世界也请遵守我国的法律法规!一旦发现违法行为,将立即封存相关信息并报警处理!
您需要登录后才可以回帖 登录 | 立即加入

本版积分规则

QQ客服返回顶部