Extract partitions from Android OTA files with cryptographic verification, strong reliability guarantees, and high-performance execution.
Download β’ Quick Start β’ Build Guide β’ Technical Details
- Overview
- Feature Comparison
- Performance
- Quick Start
- Basic Usage
- Cleanup
- Command Options
- Building from Source
- Contributing
- Acknowledgments
- Show Your Support
- License
- Disclaimer
For in-depth architecture and performance details, see TECHNICAL.md
otaripper extracts partitions from Android OTA packages (payload.bin or full OTA .zip files).
The tool is written in Rust and prioritizes:
- Cryptographic correctness and data integrity
- Predictable, fail-safe behavior
- High-performance, multi-threaded execution
- SIMD-accelerated memory operations
- Guaranteed cleanup on failure or interruption
Unlike many extraction tools, otaripper verifies output images by default and refuses to leave behind partially valid or corrupted files.
| Feature | otaripper v3.3 | payload-dumper-go | payload_dumper (Python) |
|---|---|---|---|
| Output verification | β SHA-256 | β | β |
| Remote HTTP Streaming | β (Parallel) | β | β |
| Network Error Recovery | β (Auto-resume) | β | β |
| SIMD optimization | β AVX-512/AVX2 | β | β |
| Qualcomm ARB Analysis | β | β | β |
| Firmware Metadata parsing | β | β | β |
| Corrupt Image Detection | β (Sanity checks) | β | β |
| Cache-aware large writes | β | β | β |
| Zero-Copy Decompression | β | β | β |
| Direct ZIP Memory Mapping | β | β (Extracts temp) | β |
| Graceful interruption | β | β | β |
| Auto-cleanup on failure | β | β | β |
| Performance statistics | β | β | β |
| Selective extraction | β | β | β |
| Multi-threaded | β | β | β (1 thread) |
| Cross-platform | β | β | |
| Standalone binary | β | β | β |
otaripper is designed to fail early and cleanly rather than produce questionable output.
otaripper automatically detects CPU capabilities and selects the optimal execution path.
Version 3.3.0 introduces local/remote EDL firmware and directory scanning, smart metadata parsing, parallel chunked Remote HTTP Streaming, and massive I/O savings:
- Parallel HTTP Streaming: Extract specific partitions directly from a remote URL! otaripper intelligently streams only the required byte-ranges over the network, using multiple parallel 8MB chunked requests to saturate your bandwidth.
- Network Resilience: Built-in automatic retries with exponential backoff and real-time offline detection. Never fail an extraction due to a temporary connection drop again.
- Smart Firmware Metadata: Automatically parses OS Version and Security Patches from the ZIP, printing a beautiful info banner and using the OS version to dynamically name the output extraction folder.
- Direct ZIP Memory Mapping: Bypasses the traditional temp-file extraction step for
STOREDOTA zips, mapping the internalpayload.binstraight from the disk using a zero-copy offset. - Modern Decompression Engine: Upgraded
liblzmabackend safely handles modern Android payloads utilizing the ARM64 BCJ filter (e.g., Xiaomi HyperOS). - Modular Engine Architecture: Breaking the monolithic extraction logic into specialized
extractorandsimdmodules. - Thread-Local Buffer Pooling: Drastically amortizing memory allocations across deep Rayon threadpools.
- Zero-Copy Decompression: Triggering purely alloc-free extraction paths when output blocks map cleanly to continuous extents.
- Strict SIMD Encapsulation: Cleanly isolating CPU vector operations (
AVX-512,AVX2,SSE2) through non-temporal cache-bypassing mechanisms.
Throughput Example (3GB system partition)
βββββββββββββββββββββββββββββββββββββββββββββ
otaripper (AVX-512) ββββββββββββ 2.8 GB/s
otaripper (AVX2) ββββββββ 1.9 GB/s
payload-dumper-go ββββ 1.0 GB/s
payload_dumper ββ 0.4 GB/s
βββββββββββββββββββββββββββββββββββββββββββββ
Performance scales with:
- storage speed (NVMe > SATA > HDD)
- compression format
- CPU SIMD capability
For architectural details, see TECHNICAL.md
Prebuilt packaged archives are available on the Releases page. Download the archive matching your platform:
- Windows (MSVC):
otaripper-vX.Y.Z-windows-msvc-x86_64.zip - Windows (GNU):
otaripper-vX.Y.Z-windows-gnu-x86_64.zip - Linux (glibc):
otaripper-vX.Y.Z-linux-x86_64.tar.gz - Linux (static/musl):
otaripper-vX.Y.Z-linux-static-x86_64.tar.gz - Linux (ARM64):
otaripper-vX.Y.Z-linux-arm64.tar.gz - macOS (Intel):
otaripper-vX.Y.Z-macos-x86_64.tar.gz - macOS (Apple Silicon):
otaripper-vX.Y.Z-macos-arm64.tar.gz - Android / Termux (ARM64):
otaripper-vX.Y.Z-android-arm64.zip
Once extracted, you will find the main executable cleanly named otaripper (or otaripper.exe on Windows).
Note: Each release also includes an ultra-minimalist
otaripper-liteexecutable alongside the main binary. The lite version is compiled without remote HTTP streaming capabilities (--no-default-features), resulting in an exceptionally compact footprint for users only performing local extractions.
otaripper releases follow a "Gold Standard" two-layer checksum architecture:
- Download Verification: The release page hosts a master
checksums.txtfile containing hashes for all.tar.gzand.ziparchives. - Binary Verification: Upon extracting the archive, you will find an
otaripper-vX.Y.Z.sha256file enclosed alongside the executables. Runsha256sum -c *.sha256in your terminal to instantly verify the integrity of the extracted binaries.
otaripper is available via the Windows Package Manager:
winget install syedinsaf.otaripperTo update to the latest version:
winget update syedinsaf.otaripper
# or
winget upgrade syedinsaf.otaripperotaripper is available on the AUR:
paru -S otaripper # build from source (recommended)
paru -S otaripper-bin # prebuilt glibc binary
yay -S otaripper
yay -S otaripper-binIf otaripper-bin fails to run due to libc/runtime issues, use the
fully static musl build from GitHub Releases:
https://github.com/syedinsaf/otaripper/releases
Extract everything:
otaripper ota.zipList partitions:
otaripper -l ota.zipExtract selected partitions:
otaripper ota.zip -p boot,vendor_boot,init_bootπ Remote HTTP Streaming (Zero-Download Extraction):
Extract specific partitions directly from a web URL without downloading the full OTA package!
otaripper https://android.googleapis.com/packages/ota-api/package.zip -p boot,init_bootPrint hashes:
otaripper ota.zip --print-hashStrict verification:
otaripper ota.zip --strictDisable automatic folder opening:
otaripper ota.zip -nAnalyze Qualcomm bootloader Anti-Rollback (ARB) metadata (accepts .img, .bin, .zip archives, or directories):
otaripper arb update.zip
# or directories
otaripper arb CPH2583_EDL_Folder/π Remote ARB Inspection (Zero-Download) & Interactive Export:
Instantly check the ARB index of an OTA or EDL firmware update without downloading the massive 3GB+ zip file! otaripper will intelligently stream and extract only the tiny bootloader candidate image (e.g. xbl_config.img or xbl_config.elf) directly from the URL over the internet. You can optionally export the metadata into a beautifully formatted, platform-sanitized JSON file named dynamically after your device model, software build, and ARB index:
$ otaripper arb https://example.com/firmware.zip
[arbscan] Connecting to remote server...
[arbscan] EDL firmware zip detected. Scanning for bootloader image...
[arbscan] Found candidate: RADIO/xbl_config.img. Extracting temporarily...
[arbscan] Analyzing: extracted_bootloader.img
OEM Metadata
ββββββββββββ
Major Version : 3
Minor Version : 0
ARB Index : 1
Write JSON output? [y/N]: y
Device model : PJZ110
Update / build : PJZ110_16.0.5.701(CN01)_260303
β JSON written: PJZ110_PJZ110_16.0.5.701(CN01)_260303_ARB(1).json
Remove previously extracted folders:
otaripper cleanClean a specific directory:
otaripper clean -o /path/to/outputThe cleanup command only removes directories matching extracted_*
and refuses to operate on filesystem roots for safety.
| Option | Description |
|---|---|
-l, --list |
List partitions only |
-p, --partitions |
Extract specific partitions |
-o, --output-dir |
Custom output directory |
--strict |
Enforce manifest hashes |
--no-verify |
Disable verification (unsafe) |
--print-hash |
Print SHA-256 hashes |
--sanity |
Detect obviously invalid output |
--stats |
Show performance statistics |
-t, --threads |
Thread control (1β256, 0 = auto) |
-n, --no-open |
Disable folder auto-open |
clean |
Remove extracted_* folders safely |
arbscan, arb |
Extract ARB metadata from bootloader images or payloads |
- Rust 1.96.0 or newer (MSRV)
- Git
- C compiler (gcc / clang / MSVC) - required by some native dependencies
We provide two built-in Cargo aliases for easy compilation:
git clone https://github.com/syedinsaf/otaripper.git
cd otaripper
# Build the standard CLI (with Remote HTTP Streaming support)
cargo full
# Build the 'lite' CLI (Network-free, local extraction only)
cargo liteBinary output:
- Full Build:
target/release/otaripper - Lite Build:
target/lite/release/otaripper
Note: The
cargo litealias automatically isolates its output into a separatetarget/lite/directory. This ensures you can compile and test both versions side-by-side locally without them overwriting each other!
otaripper can be built locally with CPU-specific optimizations for maximum performance. This enables all instruction sets supported by your CPU (AVX2 / AVX-512 / ARMv8, etc.).
A helper script is provided to:
- download the source
- optionally install Rust (with confirmation)
- build a CPU-native release binary
- clean up all intermediate files
curlunzip- A C toolchain (gcc / clang)
- Rust (installed automatically if missing)
chmod +x build.sh
./build.shOutput binary:
After running build.sh, a new folder named otaripper-native
will be created in the same directory where build.sh is located.
~/otaripper-native/otaripper
On Windows, a native PowerShell script is provided. It uses the official Windows rustup installer and defaults to the MSVC toolchain.
- Windows 10 / 11
- PowerShell 5.1 or newer
- Visual Studio Build Tools (prompted automatically if missing)
Before running the script, allow execution for the current session only:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy BypassThen run:
.\build.ps1Output binary:
After running build.ps1, a new folder named otaripper-native
will be created in the same directory where build.ps1 is located.
otaripper-native\otaripper.exe
- Native builds use
-C target-cpu=native - Performance may be significantly higher than portable binaries
- These builds are intended for local use only
- GitHub Releases remain the recommended option for most users
Testing, bug reports, and performance feedback are welcome.
Please include:
- OS, CPU, RAM
- otaripper version 3.3.0
- OTA size and format
- logs or error messages if available
Pull requests should:
- Build cleanly
- Preserve safety guarantees
- Avoid introducing undefined behavior
- Keep performance regressions justified
otaripper benefits greatly from real-world testing and feedback.
Special thanks to Jean Rivera for extensive validation, edge-case testing, and correctness feedback.
Thanks also to:
- Android Open Source Project documentation
- Rust ecosystem maintainers
- Users who reported bugs and performance issues
If otaripper helped you:
- Star the repository β https://github.com/syedinsaf/otaripper
- Report issues β https://github.com/syedinsaf/otaripper/issues
- Submit pull requests β https://github.com/syedinsaf/otaripper/pulls
- Share with others β https://github.com/syedinsaf/otaripper
otaripper is licensed under the Apache License 2.0. See LICENSE for details.
Use at your own risk.
- Always verify extracted images before flashing
- Keep backups whenever possible
- Understand your device and bootloader requirements
The author and contributors are not responsible for data loss, bricked devices, or damage resulting from misuse.