
Extrayez les assemblys managés (.NET) d'un assembly store MAUI Android.
Extrait les assemblys managés (.NET) d'un assembly store MAUI Android.
Les applications .NET Android embarquent leur code managé dans une bibliothèque partagée, généralement
libassemblies.<abi>.blob.so (versions plus anciennes) ou libassembly-store.so.
mauidll analyse ce fichier et écrit chaque assembly qu'il contient sur le disque sous forme de
fichier .dll standard, prêt à être inspecté dans un décompilateur tel que
ILSpy.
L'outil est un programme Crystal unique et autonome, sans dépendances externes. Le décompresseur LZ4 dont il a besoin est implémenté en interne, donc rien au-delà de la bibliothèque standard n'est requis.
crystal build --release mauidll.cr -o mauidll
./mauidll libassembly-store.so extracted-dlls
Le binaire produit par crystal build est autonome : il ne nécessite Crystal
que sur la machine de compilation, pas sur une quelconque machine où vous l'exécutez.
mauidll est compilé avec le langage Crystal. Si vous n'avez pas encore Crystal :
La méthode la plus répandue est Homebrew :
brew install crystal
Crystal est également disponible sous forme d'archive universelle officielle (Apple Silicon et Intel) depuis la page de téléchargements.
Sur Debian, Ubuntu et distributions apparentées, installez le dépôt de paquets officiel puis le compilateur :
curl -fsSL https://crystal-lang.org/install.sh | sudo bash
sudo apt install crystal
Alternativement, sur toute distribution prenant en charge les snaps :
sudo snap install crystal --classic
Sur Arch Linux :
sudo pacman -S crystal shards
crystal build --release mauidll.cr -o mauidll
mauidll a été développé et testé avec Crystal 1.20.x. Il n'utilise que la
bibliothèque standard, donc toute version raisonnablement récente devrait fonctionner.
./mauidll <assembly-store.so> [outdir]
| Argument | Signification |
|---|---|
assembly-store.so | Chemin vers le store, par ex. libassemblies.arm64-v8a.blob.so |
outdir (optionnel) | Répertoire de sortie, par défaut dlls dans le répertoire courant |
Exemple :
./mauidll /tmp/app64-v8a/libassembly-store.so /tmp/extracted
Les lignes de sortie rapportent une ligne par assembly (name: size -> decompressed size, valid PE), suivies d'un résumé tel que :
Extracted 235 entries, valid PE (MZ) after extraction: 235/235
payload non chargeable, que mauidll localise via les en-têtes de section
ELF (ELF 32 et 64 bits sont tous deux pris en charge).XABA de 20 octets : magie, version, nombre
d'entrées, nombre d'entrées d'index et taille de l'index.XALZ est un bloc LZ4 brut (pas le format de trame
LZ4) précédé d'un en-tête de 12 octets qui inclut la taille non compressée ; tout
le reste (commençant par MZ) est stocké tel quel.MZ.