Таким образом, если ваш снимок был произведен достаточно современной версией, он, вероятно, не будет проанализировать [правильно]. Тем не менее, если вы хотите попробовать, вам, вероятно, понадобится хотя бы исправление в #3.
darter - это модуль Python, который может полностью проанализировать данные внутри моментального снимка DART (то есть файл libapp.so в приложении Flutter Release).
Функции:
app.so или .snapshot файлов.Примеры того, что вы можете сделать с проанализированной информацией:
Примечание. Имейте в виду, что это для разбора бинарных (т.е. зависимых от архитектуры) снимков. .dill -файлы и некоторые файлы .snapshot содержат ядро AST, который является совершенно другим форматом и в настоящее время не поддерживается darter . [Узнать больше]
Большая часть кода является нулевой зависимостью, за исключением:
parse_elf_snapshot(...) требует pyelftools
Модуль darter.asm (для анализа собранного кода) требует Capstone (и его привязки Python)
darter по себе сама по себе-это всего лишь модуль, у него нет автономной программы или CLI.
Рекомендуемый способ его использования заключается в том, чтобы включить его в ноутбук и воспроизведение с проанализированными данными.
Установите Юпитер и откройте 1-introduction ноутбук для базового прохождения проанализированных данных; Затем отправляйтесь в 2-playground , который содержит более интересные примеры использования.
Настоятельно рекомендуется, чтобы вы впервые сыграли с известным снимком (то есть, который вы построили себя или у вас есть код), прежде чем анализировать снимок, который вы хотите.
Сигнал все еще находится на ранней стадии и не будет работать в каждом случае.
Этот анализатор был написан на основе DART-SDK на 1ef83b86ae . Формат снимка является внутренним для виртуальной машины. Он сбрасывает некоторые из объектов, когда они появляются в памяти; Вам нужно знать, как была составлена виртуальная машина (Arch, Compile Flags), чтобы проанализировать его. Он может часто меняться между версиями, так как для формата нет стандартной спецификации (AFAIK).
Любая помощь или пожертвования приветствуются.
Учитывая раздел данных и раздел инструкций (и, опционально, база ):
OneByteString , CodeSourceMap , Instructions и т. Д.).Информация возвращается как можно больше, так что ее легко манипулировать. Ссылки на обратные ссылки тоже отслеживаются, так что легко узнать, откуда ссылается определенный объект.
darter может проанализировать как снимки «виртуальной машины», так и «изолят» (те, о которых мы заботимся).
Модуль darter.asm разбирает скомпилированный код и анализирует его. Это важно для снимков AOT, потому что мы не получаем высокого уровня.
Если вы новичок в Dart/Flutter обратно инжиниринг, это хорошая идея, чтобы прочитать это введение первым: https://mrale.ph/dartvm/
Соответствующий код при сериализации снимка находится в среде runtime/vm/clustered_snapshot.cc и runtime/vm/raw_object.h .
В каталоге info также есть дополнительная информация.