Flutter逆向
1.Flutter简介
Flutter是Google构建在开源的Dart VM之上,使用Dart语言开发的移动应用开发框架,可以帮助开发者使用一套Dart代码就能快速在移动iOS 、Android上构建高质量的原生用户界面,同时还支持开发Web和桌面应用。Flutter引擎是一个用于高质量跨平台应用的可移植运行时,由 C/C++ 编写 。它实现了 Flutter的核心库,包括动画和图形、文件和网络I/O、辅助功能支持、插件架构,以及用于开发、编译和运行 Flutter应用程序的 Dart运行时和工具链。引擎将底层 C++代码包装成 Dart代码,通过 dart:ui暴露给 Flutter框架层。
2.Flutter特征
当使用Flutter构建Android APP时,在assets文件夹下会有dexopt和flutter_assets ,在libs 下会有 libapp.so libflutter.so
3.Flutter反编译
clone项目 (全程运行在代理环境否则会导致无法下载),或者下载解压到指定文件夹
1
git clone https://github.com/worawit/blutter --depth=1
编译环境准备
使用docker 创建容器编译,因为编译环境需要使用 gcc>=13 所以创建Ubuntu24.04 即可
创建 Dockerfile(直接复制)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19cat > Dockerfile << 'EOF'
FROM ubuntu:24.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt update && apt install -y \
git cmake ninja-build \
python3 python3-pip python3-requests python3-pyelftools \
build-essential pkg-config \
clang lld \
libicu-dev libcapstone-dev \
ca-certificates curl
强制使用 clang(关键)
ENV CC=clang
ENV CXX=clang++
WORKDIR /workspace
EOF构建镜像
1
docker build -t blutter-env .
运行容器
1
docker run -it --rm -v $(pwd):/workspace blutter-env
反编译 在容器里面跑butter
1
2cd /workspace
python3 blutter.py arm64-v8a out_dir反编译完成
反编译完成在out_dir 目录中会形成 下列文件
1
2
3
4
5asm 对dart语言的反编译结果,里面有很多dart源代码的对应偏移
ida_script so文件的符号表还原脚本
blutter_frida.js 目标应用程序的 frida 脚本模板
objs.txt 对象池中对象的完整(嵌套)转储,对象池里面的方法和相应的偏移量
pp.txt 对象池中的所有 Dart 对象使用ida 分析
接下来ida加载libapp.so,然后ida左上角点击file,再点击Script file加载符号解析脚本
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Blog-tianhuangtadie!
