Flutter逆向技术的探讨与研究(1)

Flutter逆向技术的探讨与研究(1)

提取动态符号段

得到 dynamic_symbol_table

动态符号表
动态符号表是加载动态库时能导出的函数表

['', '_kDartVmSnapshotInstructions', '_kDartIsolateSnapshotInstructions', '_kDartVmSnapshotData', '_kDartIsolateSnapshotData', '_kDartSnapshotBuildId']

五个函数代表的(老版本是4个)

_kDartVmSnapshotInstructions

方法指令段

_kDartIsolateSnapshotInstructions

方法指令段

_kDartVmSnapshotData

数据段

_kDartIsolateSnapshotData

数据段

_kDartSnapshotBuildId

新增的 先不管他

优先处理数据段

它不会将 dart 方法公开为可以在外部调用的符号

使用此共享对象,链接器会将 .text 部分中的所有内容加载到可执行内存中,从而允许 Dart 运行时随时调用它。

vm和Isolate分别是什么

DartVM 有一个执行后台任务的 isolate,称为 vm isolate,它是 app-aot 快照所必需的,因为运行时无法像dart可执行文件那样动态加载它。

调试的方法就是

修改DartSDK源码 新增感兴趣的关键地方的日志

手动生成libapp.so

通过日志推断dart工程是如何变成so的,整个快照生成过程。反推出如何从快照里恢复出来源代码。

isolateVM里恢复数据

E:\github_my_open\FlutterTest>dart --version
Dart SDK version: 2.14.4 (stable) (Wed Oct 13 11:11:32 2021 +0200) on "windows_x64"