【问题标题】:Decompiling .dart.snapshot into Dart source code将 .dart.snapshot 反编译成 Dart 源代码
【发布时间】:2019-09-20 18:36:13
【问题描述】:

根据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 资产文件中生成的快照文件。

【问题讨论】:

    标签: dart flutter apk reverse-engineering decompiler


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我已经使用“Frida dump”转储了我的颤振应用程序的内存,现在我得到了一个 ~680MB 的内存转储文件。如何在此文件中查找 .text 段?我已经使用 HexEditor 在其中搜索了“text”、“.text”、“section.text”、“Text”、“TEXT”,但我找不到任何东西。我该如何进行?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    • 2020-07-27
    相关资源
    最近更新 更多