全网首发实战flutter的算法解密(1):flutter逆向工具Doldrums和reFlutter使用分析
前言
最近研究flutter逆向,群里讨论抛出了两个相关的flutter开源逆向工具。
抱着给大家试毒的心态,给出测评结果。是否能够逆向出来flutter。
样本准备
也不去市面找什么应用了,手动编译一个apk。加点加密算法就行
用的flutter版本,是一个比较新的版本
flutter_windows_2.10.4-stable
Doldrums使用测试
可以看到支持两个版本的
DartVm快照解析
v210和v212
注意这是dart的版本不是flutter的版本
配置好依赖环境之后运行main.py
显然报错
不支持快照hash为
d56742caf7b3b3f4bd2df93a9bbb5503
的快照文件解析
我特意去搜索了这个hash对应的dart版本是多少
是2.16版本的DartSdk
2.16.0-134.1.beta,63ca99584a1aef79722b2a7c6414570b54416bab,d56742caf7b3b3f4bd2df93a9bbb55035
结论:使用Doldrums失败,没法解析该版本的快照。
reFlutter使用测试
安装
pip3 install reflutter==0.6.6
使用
reflutter flutter_demo.apk
进行apk重打包操作,期间要输入bs的端口地址
我这里没有使用bs来抓包就无所谓了
然后要等相当长的一段时间
得到重打包的apk文件,卸载之前的重新安装
安装报错
PS G:\Flutter> adb install G:\Flutter\release.RE.apk
Performing Streamed Install
adb: failed to install G:\Flutter\release.RE.apk: Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES: Failed to collect certificates from /data/app/vmdl1908031203.tmp/base.apk: META-INF/CERT.SF indicates /data/app/vmdl1908031203.tmp/base.apk is signed using APK Signature Scheme v2, but no such signature was found. Signature stripped?]
签名问题随便找个工具新增一下
安装成功
逆向部分
抓包部分
配置 BurpSuite 的 代理就行 这部分不深究了,我这软件也没有发包请求。
按道理使用代理转发也是可以抓包成功的。
dump code
这是最让人兴奋的功能了,可以直接还原出dart代码
adb -d shell "cat /data/data/com.example.test.flutter_demo/dump.dart" > dump.dart
得到了一个3000kb的dart文件
vs打开分析可以看到大量的库类以及一些内存偏移。
包括code和function
搜索package:flutter_demo
定位我们自己类
找到了package:flutter_demo/main.dart
的相关逻辑
但是这里没有我们要的解密函数,接下来要进入so部分的逆向。
配合frida hook和ida分析以及dump定下来的位置去分析流程。
但是我们核心的加密类sec.dart文件没有在dump.dart的文件里面找到相关逻辑。我意识到这可能是该框架的一个问题。于是向作者进行交流。
作者确认这是个bug需要修复,但是不会那么快修复。
这样我们只能依赖main.dart的逻辑进行分析。
总结
这篇文章主要体验下两个框架的使用
- Doldrums: 这个停更了,而且是基于静态的分析。不支持新版本可以不用考虑了。
reFlutter: 值得期待的一款工具,基于重打包塞入一个重新编译的引擎文件。在动态基础上定位函数信息。目前使用问题还是很多,丢失文件信息而且没法真正全部还原方法。关键的reFlutter还在更新