gpt4 book ai didi

dart - 将 .dart.snapshot 反编译成 Dart 源码

转载 作者:IT王子 更新时间:2023-10-29 06:39:30 33 4
gpt4 key购买 nike

根据 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?

在java语言编写的android Apk中我们可以使用dex2jar反编译apk并从class.dex中得到jar文件。工具,但当应用程序由 flutter 开发时框架(用dart编写)如何反编译这个应用程序并获得应用程序dart类?

此图像显示了在 apk Assets 文件中生成的快照文件。

Apk structure

最佳答案

在 Release模式下,Flutter 将 Dart 代码编译为机器码,currently only ARMv7 (此过程称为 AOT - Ahead-Of-Time 编译)。不同于原生 Android 应用,其中 Java 被编译为名为 Smali 的字节码,后者可以(非常容易地)再次反编译为 Java。

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

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

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

关于dart - 将 .dart.snapshot 反编译成 Dart 源码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55949052/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com