2022年5月10日

全网首发实战flutter的算法解密(1):flutter逆向工具Doldrums和reFlutter使用分析

作者 huruwo

前言

最近研究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还在更新