
MAUI Androidアセンブリストアからマネージド(.NET)アセンブリを抽出します。
MAUI Android アセンブリストアからマネージド (.NET) アセンブリを抽出します。
.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 は公式のユニバーサル tarball (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
出力行はアセンブリごとに 1 行 (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 フレーム形式ではない) であり、非圧縮サイズを含む 12 バイトのヘッダが前に付きます。それ以外 (MZ で始まる) はそのまま格納されています。MZ PE シグネチャで始まるかどうかが確認されます。