flutter逆向助手-基于reflutter的简易化dart解析工具
前段时间因工作需要去分析一个由flutter写的恶意程序,但在网上找了好久都没找到好用的逆向资料和工具,经过一段时间艰苦摸索研究,现将一个小成果工具跟大家分享。
一、现有解决方案
(1)静态
目前市面上静态解析工具有2个,一个是Doldrums
(https://github.com/rscloura/Doldrums
),这个项目比较老而且不再更新了,目前只支持两个dart
版本,而且这两个版本比较老,所以他的实用性很低,最多只能当做学习资料。
1 2 3 4 | SUPPORTED_SNAPSHOT = {
"8ee4ef7a67df9845fba331734198a953" : "v2_10" ,
"5b97292b25f0a715613b7a28e0734f77" : "v2_12"
}
|
另一个就是JEB。JEB 4.17 附带了一个 Dart AOT 二进制快照助手插件(来自https://www.pnfsoftware.com/blog/category/dart/flutter/
),通过它直接就可以解析提供的libapp.so
,jeb算是能够完美的解决 Dart 2.10
到 2.17
版本编译的 AOT 快照,而且它作为一个商业产品还在一直更新,不过更新的较慢。dart sdk
现已升级到了 2.18 与2.19
,但jeb尚不支持。
(2)动态
最有代表性的工具就是reflutter 让大家眼前一亮的工具就是reflutter,每次更新他只需要修改简单的代码重新编译就可以实现上面产品的功能,这种思路类似于脱壳机,只不过作者比较懒,没有将每个版本都编译,只是选取特定版本,类似下表(来自https://github.com/Impact-I/reFlutter/blob/main/enginehash.csv
)
但是他有一个很大的弊端就是需要重打包app
,导致它的局限性较大,因为在对抗意识逐渐加强的今天,重打包apk很容易被检测,虽然可以直接替换私有目录的libflutter.so
,但需要root,现在很多app都会检测root。
二、flutter逆向助手
(1)简介
flutter逆向助手
是基于reflutter
所做的优化升级,最重要的一点就是解决了reflutter
需要重打包和使用麻烦的问题。
1 | 免责声明:flutter逆向助手仅供安全研究人员辅助分析病毒、勒索等恶意软件之用,切勿用于任何非法用途,一切后果有使用者承担。
|
(2)局限性
看到这里大家也注意到了,其实不管是JEB
还是reFlutter
和flutter逆向助手
都有很大的局限性,他们都需要通过Snapshot_Hash
来判断dart sdk
版本,如果一个快照被故意抹去了Snapshot_Hash
,那么他们就没办法正常使用了,那么有没有什么方案能完美的解决抹掉Snapshot_Hash
的快照呢?办法是有的,以后有空再撰文介绍。
(3)效果对比
1:JEB
jeb反编译dart代码存在3个问题,一个是它反编译太慢了,另一个就是版本更新太慢,最后一个就是输出的内容太少,且无法与ida进行联动,如下图,jeb只支持低版本快照,而且内容只有函数名称和偏移,面对高版本时直接报错。
2:flutter逆向助手
鉴于flutter逆向助手是reflutter的上位替代,这里就只展示flutter逆向助手的效果了。flutter逆向助手支持的范围和reflutter一样,如表(https://github.com/Impact-I/reFlutter/blob/main/enginehash.csv
),比JEB支持的版本多,能支持3.3.0版本,不过也是通过Snapshot_Hash
来判断dart-sdk
版本,使用如下:
弹框就说明解析成功,反编译出来的文件在sdcard/32_com.helper.flutter_dump.dart
(64位:/sdcard/64_com.helper.flutter_dump.dart`)下,建议每次使用完删除,否则下次会在原来的基础上继续添加内容。从输出的函数信息来看,详见下图,flutter逆向助手要比jeb输出的内容更详细。
下载链接:https://pan.baidu.com/s/1ZrXKVOYP8URfxb4dp4P_Og?pwd=ma9p
提取码: ma9p
三、下步计划
虽然flutter逆向助手已明显优于目前市面上的同类工具,但不可否认的是还存在许多不足之处,倘若该工具确实能给分析病毒的安全研究人员带来帮助,使用人数较多。下步将新增以下功能:
1.自动化识别dart sdk
版本无视抹掉Snapshot_Hash
;
2.比reflutter
更完整、更详细的函数信息;
3.函数名称自动回填,类似下图:
4.加上poll strings类似jeb那种。
四、未来展望
flutter逆向辅助工具的终极目标是实现Aot代码的反编译,但遗憾的是目前没有任何可行的思路,希望有志之士以后能共同交流研究。
五、题外话(大佬请飘过)
屈指一数,学安卓逆向已有3年,虽不敢说有多厉害,但逆国内大厂的APP还是没问题的。期间让我感受最深刻的是逆向工具是关键,当时学完arm汇编等基础知识后,我就直接拿淘宝APP练手,得益于朋友给了一个自研的逆向工具。
目前,正在分析google登录,发现js部分还是有点难度的,2年前花了3个月还原了阿里滑块算法,当时狭隘的认为js最难也就这样子了,结果啪啪打脸,谷歌的js明显要难多了,不过已有初步方案,但需要N个月时间。如果有大佬搞过google,且愿意分享的话,请多多指导。在此,先谢过!
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)