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反编译

  1. 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
    19
    cat > 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 .
  2. 运行容器

    1
    docker run -it --rm -v $(pwd):/workspace blutter-env
  3. 反编译 在容器里面跑butter

    1
    2
    cd /workspace
    python3 blutter.py arm64-v8a out_dir
  4. 反编译完成

    反编译完成在out_dir 目录中会形成 下列文件

    1
    2
    3
    4
    5
    asm                对dart语言的反编译结果,里面有很多dart源代码的对应偏移  
    ida_script so文件的符号表还原脚本
    blutter_frida.js 目标应用程序的 frida 脚本模板
    objs.txt 对象池中对象的完整(嵌套)转储,对象池里面的方法和相应的偏移量
    pp.txt 对象池中的所有 Dart 对象
  5. 使用ida 分析
    接下来ida加载libapp.so,然后ida左上角点击file,再点击Script file加载符号解析脚本