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"