YAML Metadata Warning:empty or missing yaml metadata in repo card

Check out the documentation for more information.

DartDec:面向 Flutter AOT 的 Dart 源代码逆向重构框架

DartDec 是一个面向真实 Flutter Android 应用的逆向重构项目,目标是将 Flutter AOT 产物中提取出的结构化中间语言(Intermediate Language, IL)恢复为更接近原始工程的 Dart 源代码。项目围绕“IL 片段到 Dart 源码”的语义对齐展开,结合 Qwen2.5-Coder 的 LoRA 微调模型、片段级生成、文件级重组和 Dart-CodeBLEU 结构评估,提供一套可复现的训练与实验材料。

本仓库整理的是论文项目的 Hugging Face 上传版本,包含训练数据、训练脚本、实验复现脚本、两个最终 LoRA adapter、端到端项目源码/模型输出,以及 Dart-CodeBLEU 所需的 tree-sitter Dart 解析器记录。

项目核心思路

DartDec 的输入不是直接的机器码,而是 Flutter AOT 逆向工具导出的结构化 IL。项目先构建 Dart-IL 对齐样本,用于训练模型学习 IL 操作模式与 Dart 语法结构之间的映射;随后在真实应用上对片段级模型输出进行文件级 reassembly,恢复 import、类/函数顺序和整体代码结构;最后使用 Dart-CodeBLEU、补充结构指标和 LLM-as-a-Judge 对重构结果进行评估。

论文实验中,DartDec 在 10 个真实 Flutter 开源应用上的平均 Dart-CodeBLEU 为:

方法 平均 Dart-CodeBLEU
DartDec-32B 0.5488
DartDec-7B 0.4937
IDA+LLM baseline 0.3569

更完整的实验表格见 experiments/tables.md。

目录说明

DartDec/
  README.md
  requirements.txt
  data/
    aligned_4096/          # Dart-IL 对齐训练/验证/测试数据
    e2e_projects/          # 10 个端到端项目的原始 Dart 源码和模型输出源码
  models/
    qwen25-coder-lora-7b/  # Qwen2.5-Coder 7B 的最终 LoRA adapter
    qwen25-coder-lora-32b/ # Qwen2.5-Coder 32B 的最终 LoRA adapter
  src/
    training/              # LoRA 微调相关脚本
    experiments/           # 端到端、消融、RQ3、CodeBLEU、LLM judge 复现实验脚本
    tree_sitter_dart/      # Dart-CodeBLEU 使用的 tree-sitter Dart 解析器记录
  experiments/
    tables.md              # 论文实验结果整理表格

数据

data/aligned_4096/ 包含清洗后的 Dart-IL 对齐数据,按训练、验证、测试划分保存为 JSONL。每条样本用于训练模型从 IL 片段恢复 Dart 源代码。

data/e2e_projects/ 只包含 Dart 文件,不包含 JSON/JSONL。每个项目的结构如下:

<project>/
  original/
    lib/                  # 原 Flutter 项目的 Dart 源码
  model_outputs/
    DartDec-7B/           # 7B LoRA 模型恢复出的 Dart 文件
    DartDec-32B/          # 32B LoRA 模型恢复出的 Dart 文件

这部分用于端到端重构结果查看、人工检查和应用级指标计算。

模型

models/qwen25-coder-lora-7b/ 和 models/qwen25-coder-lora-32b/ 分别保存两个最终 LoRA adapter。目录中只保留最终 adapter 与 tokenizer/训练配置相关文件,不包含历史 checkpoint。

使用时需要先加载对应的 Qwen2.5-Coder 基座模型,再加载本仓库中的 LoRA adapter。

代码

src/training/ 保留微调必要脚本,包括 7B/32B 训练入口、继续训练入口、超参数配置和 JSONL 转换工具。

src/experiments/ 保留论文实验复现所需的精简代码,包括:

  • 端到端模型输出后处理与文件级 reassembly
  • A0/A2 消融实验
  • RQ3 通用大模型对比
  • Dart-CodeBLEU 计算与汇总
  • LLM-as-a-Judge 评价

早期测试脚本、日志、原始指标 CSV、图片、备份输出和 checkpoint/trend 分析脚本未纳入本上传目录。

Dart-CodeBLEU 与 tree-sitter Dart

src/tree_sitter_dart/ 记录 Dart-CodeBLEU 评估使用的 Dart parser。该部分基于社区项目 https://github.com/UserNobody14/tree-sitter-dart 进行整理,因为官方 tree-sitter 语法集合不直接提供 Dart 支持。

仓库中保留了复现结构解析所需的 grammar、parser 源码和必要配置;不包含 .git/、node_modules/、build/ 等本地缓存或构建产物。

复现提示

安装依赖可从 requirements.txt 开始。实验脚本来自本地研究环境,部分路径以 /path/to/DartDec、/path/to/output 等占位形式保留;重新运行前需要替换为当前机器上的实际路径、基座模型路径和输出目录。

涉及 API 调用的实验脚本通过环境变量读取配置,例如 OPENAI_API_KEY、OPENROUTER_API_KEY 和 OPENAI_BASE_URL。上传内容中不包含真实 API key。

适用场景

本仓库适合用于:

  • 复现 DartDec 的 Flutter AOT 到 Dart 源码恢复实验
  • 查看 Dart-IL 对齐训练数据格式
  • 加载 7B/32B LoRA adapter 进行片段级 Dart 恢复
  • 对比 10 个端到端项目的原始源码与模型恢复源码
  • 复用 tree-sitter Dart 解析器进行 Dart-CodeBLEU 结构评分
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support