
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
출력은 어셈블리마다 한 줄씩(name: size -> decompressed size, valid PE)
보고한 다음, 다음과 같은 요약을 출력합니다:
Extracted 235 entries, valid PE (MZ) after extraction: 235/235
payload 섹션에 있으며, mauidll은 ELF 섹션 헤더를 통해 이를 찾습니다
(32비트 및 64비트 ELF 모두 지원).XABA 헤더로 시작합니다: 매직, 버전, 엔트리 수,
인덱스 엔트리 수, 인덱스 크기.XALZ로
시작하는 블롭은 압축 해제 크기를 포함하는 12바이트 헤더가 앞에 붙은
원시 LZ4 블록(LZ4 프레임 형식이 아님)이며, 그 외의 것(MZ로 시작)은
그대로 저장됩니다.MZ PE
시그니처로 시작하는지 확인됩니다.