
MAUI Android assembly store से managed (.NET) assemblies निकालें।
MAUI Android assembly store से managed (.NET) assemblies निकालें।
.NET Android ऐप्स अपना managed code एक shared library के अंदर भेजते हैं, आमतौर पर
libassemblies.<abi>.blob.so (पुराने संस्करण) या libassembly-store.so।
mauidll उस फ़ाइल को parse करता है और उसमें मौजूद हर assembly को डिस्क पर एक
मानक .dll फ़ाइल के रूप में लिखता है, जो ILSpy जैसे decompiler में निरीक्षण के लिए तैयार होती है।
यह टूल एक single self-contained Crystal प्रोग्राम है जिसमें कोई external निर्भरता नहीं है। इसके लिए आवश्यक LZ4 decompressor inline implement किया गया है, इसलिए standard library के अलावा कुछ भी आवश्यक नहीं है।
crystal build --release mauidll.cr -o mauidll
./mauidll libassembly-store.so extracted-dlls
crystal build द्वारा उत्पन्न binary self-contained है: इसे केवल build मशीन पर Crystal की आवश्यकता होती है, किसी भी मशीन पर नहीं जहाँ आप इसे चलाते हैं।
mauidll को Crystal भाषा के साथ compile किया जाता है। यदि आपके पास अभी तक Crystal नहीं है:
सबसे लोकप्रिय तरीका Homebrew है:
brew install crystal
Crystal downloads page से एक आधिकारिक universal tarball (Apple Silicon और Intel) के रूप में भी उपलब्ध है।
Debian, Ubuntu और संबंधित distributions पर, आधिकारिक package repository इंस्टॉल करें और फिर compiler:
curl -fsSL https://crystal-lang.org/install.sh | sudo bash
sudo apt install crystal
वैकल्पिक रूप से, किसी भी distribution पर जो snaps का समर्थन करता है:
sudo snap install crystal --classic
Arch Linux पर:
sudo pacman -S crystal shards
crystal build --release mauidll.cr -o mauidll
mauidll को Crystal 1.20.x के साथ विकसित और परीक्षण किया गया था। यह केवल standard
library का उपयोग करता है, इसलिए कोई भी उचित रूप से हाल का release काम करना चाहिए।
./mauidll <assembly-store.so> [outdir]
| Argument | Meaning |
|---|---|
assembly-store.so | Store का path, जैसे libassemblies.arm64-v8a.blob.so |
outdir (optional) | Output directory, वर्तमान directory में dlls पर default होता है |
उदाहरण:
./mauidll /tmp/app64-v8a/libassembly-store.so /tmp/extracted
Output lines प्रत्येक assembly के लिए एक पंक्ति रिपोर्ट करती हैं (name: size -> decompressed size, valid PE), इसके बाद एक summary जैसे:
Extracted 235 entries, valid PE (MZ) after extraction: 235/235
payload section में रहता है, जिसे mauidll ELF section
headers के माध्यम से ढूंढता है (32- और 64-bit ELF दोनों समर्थित हैं)।XABA header से शुरू होता है: magic, version, entry
count, index entry count और index size।XALZ से शुरू होने वाला blob
एक raw LZ4 block है (LZ4 frame format नहीं)
जिसके पहले एक 12-byte header होता है जिसमें uncompressed size शामिल है; बाकी कुछ भी
(MZ से शुरू होने वाला) verbatim संग्रहीत किया जाता है।MZ PE signature से शुरू होते हैं।