将 .dart.snapshot 反编译为 Dart 源代码
Decompiling .dart.snapshot into Dart source code
从 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 个合理的选择:
- 在 运行 时读取应用程序代码(.text 段)。您可以使用
frida dump,并提取编译后的 Dart 代码
你需要
- Pacthing/Using Flutter引擎为了反序列化机器码
如果你有 ipa(IOS 应用程序),那会更容易,因为所有代码都在 App.Framework.
中找到
从 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 个合理的选择:
- 在 运行 时读取应用程序代码(.text 段)。您可以使用 frida dump,并提取编译后的 Dart 代码 你需要
- Pacthing/Using Flutter引擎为了反序列化机器码
如果你有 ipa(IOS 应用程序),那会更容易,因为所有代码都在 App.Framework.
中找到