
Извлечение управляемых сборок (.NET) из хранилища сборок MAUI Android.
Извлекает управляемые сборки (.NET) из хранилища сборок MAUI Android.
Приложения .NET Android поставляют свой управляемый код внутри разделяемой библиотеки, обычно
libassemblies.<abi>.blob.so (более старые версии) или libassembly-store.so.
mauidll разбирает этот файл и записывает каждую содержащуюся в нём сборку на диск в виде
стандартного файла .dll, готового для анализа в декомпиляторе, таком как
ILSpy.
Инструмент представляет собой одну самодостаточную программу на Crystal без внешних зависимостей. Необходимый ему декомпрессор LZ4 реализован прямо в коде, поэтому ничего кроме стандартной библиотеки не требуется.
crystal build --release mauidll.cr -o mauidll
./mauidll libassembly-store.so extracted-dlls
Бинарный файл, созданный crystal build, самодостаточен: Crystal нужен
только на машине сборки, но не на машине, где вы его запускаете.
mauidll компилируется с помощью языка Crystal. Если у вас ещё нет Crystal:
Самый популярный способ — Homebrew:
brew install crystal
Crystal также доступен в виде официального универсального архива (Apple Silicon и Intel) на странице загрузок.
В Debian, Ubuntu и родственных дистрибутивах установите официальный репозиторий пакетов, а затем компилятор:
curl -fsSL https://crystal-lang.org/install.sh | sudo bash
sudo apt install crystal
Либо в любом дистрибутиве, поддерживающем snap:
sudo snap install crystal --classic
В Arch Linux:
sudo pacman -S crystal shards
crystal build --release mauidll.cr -o mauidll
mauidll разрабатывался и тестировался с Crystal 1.20.x. Он использует только стандартную
библиотеку, поэтому подойдёт любой достаточно свежий выпуск.
./mauidll <assembly-store.so> [outdir]
| Аргумент | Значение |
|---|---|
assembly-store.so | Путь к хранилищу, например libassemblies.arm64-v8a.blob.so |
outdir (необязательно) | Каталог вывода, по умолчанию dlls в текущем каталоге |
Пример:
./mauidll /tmp/app64-v8a/libassembly-store.so /tmp/extracted
В выводе на каждую сборку приходится одна строка (name: size -> decompressed size, valid PE), за которой следует сводка, например:
Extracted 235 entries, valid PE (MZ) after extraction: 235/235
payload, которую mauidll находит через заголовки
секций ELF (поддерживаются как 32-, так и 64-битный ELF).XABA: магия, версия, количество
записей, количество записей индекса и размер индекса.XALZ, — это необработанный LZ4 блок (не формат LZ4 frame),
перед которым идёт 12-байтовый заголовок, включающий размер в несжатом виде; всё
остальное (начинающееся с MZ) хранится как есть.MZ в начале.