将 .dart.snapshot 反编译为 Dart 源代码

Decompiling .dart.snapshot into Dart source code

根据dart-lang/sdk

从 1.21 开始,Dart VM 还支持应用程序快照,其中包括程序训练 运行 期间生成的所有解析 类 和编译代码。

    $ dart --snapshot=hello.dart.snapshot --snapshot-kind=app-jit hello.dart arguments-for-training
    Hello, world!
    $ dart hello.dart.snapshot arguments-for-use
    Hello, world!

现在,我如何将这个 hello.dart.snapshot 文件反编译为 hello.dart?

在android由java语言编写的apk中,我们可以使用dex2jar tools, but when application developed by flutter框架(用dart编写)反编译apk并从class.dex获取jar文件如何反编译此应用程序并获取应用程序飞镖 类?

此图片显示了在 apk 资产文件中生成的快照文件。

在release模式下,Flutter将Dart代码编译成机器码,currently only ARMv7(这个过程叫做AOT-Ahead-Of-Time编译)。不像本地 Android 应用程序,其中 Java 被编译为 byte-code 命名为 Smali,它可以(非常容易地)反编译为 Java 再次返回。

大部分机器码被编译成文件"isolate_snapshot_instr",以特殊格式编写,flutter 引擎(flutterlib.so,也在应用程序中找到),将其加载到运行 时间内的应用程序内存。因此,您有 2 个合理的选择:

  1. 在 运行 时读取应用程序代码(.text 段)。您可以使用 frida dump,并提取编译后的 Dart 代码 你需要
  2. Pacthing/Using Flutter引擎为了反序列化机器码

如果你有 ipa(IOS 应用程序),那会更容易,因为所有代码都在 App.Framework.

中找到