🚀 payload-dumper-rust
Android OTA payload dumper written in Rust.
📖 What is Payload?
Android payload is a file that contains ROM partitions like boot, system, vendor and others. Payload Dumper extracts these partitions from the payload.bin file.
✨ Features
- Extracts all or individual images directly from payload.bin or ROM ZIP file
- Supports extracting individual partitions from URLs without downloading the full ROM ZIP
- All decompression processes run in parallel for improved performance (can be customised by using
--no-parallel
or--threads <n>
as argument)
✅ Output partitions Verification
✅ Parallel Extraction
✅ Selective Partition Extraction
✅ Direct Extraction from URL
📥 How To Use
-
Download Binaries for your respective Platform from releases section
-
If you are using a rooted android device you might want to install it as a magisk module
-
or Run this in termux / Linux Terminal to install:
-
To install on windows, run this in Powershell:
powershell -NoExit -ExecutionPolicy Bypass -Command "Invoke-RestMethod -Uri 'https://raw.githubusercontent.com/rhythmcache/payload-dumper-rust/main/scripts/install.ps1' | Invoke-Expression"
Install via Cargo
If you have Rust and Cargo installed, you can install this tool with:
⚡ Performance Metrics
Here are the performance metrics for Payload Dumper Rust running on a Poco X4 Pro (SD695, 8GB RAM) in Termux. The test file used is comet-ota-ad1a.240530.030-98066022.zip (2.53GB).
Extraction Method | Time Taken | Notes |
---|---|---|
Direct Payload Extraction | 2 minutes 26 seconds | Extracting directly from payload.bin |
ZIP File Extraction | 2 minutes 30 seconds | Extracting directly from the ZIP file |
Remote URL Extraction | Slower | Depends on network speed |
📸 Screenshots
-
Direct Payload Extraction:
-
ZIP File Extraction:
-
Remote URL Extraction:
🛠️ Usage
Basic Usage
To extract partitions from a payload file, run the following command:
Direct ZIP Processing
It can directly process payloads from ZIP files without requiring manual extraction. Simply provide the path to the ZIP file:
Remote Payloads
It can also handle payloads/zips directly using url. Simply provide the URL as path. This is very slow compared to local extraction though.
Individual partitions extraction
To extract individual partitions from payloads/URL/zips, use --images
and enter the name of partitions you want to extract comma-separated.
For example to just extract boot
and vendor_boot
from url/zip/payload
, simply run:
Usage: payload_dumper [OPTIONS] <PAYLOAD_PATH>
Arguments:
<PAYLOAD_PATH>
Path to the payload file.
--out <OUT>
Output directory for extracted partitions. [default: output]
--diff
Enable differential OTA mode (requires --old).
--old <OLD>
Path to the directory containing old partition images (required for --diff). [default: old]
--images <IMAGES>
Comma-separated list of partition names to extract (default: all partitions)
--threads <THREADS>
Number of threads to use for parallel processing.
--list
List available partitions
--metadata
Save complete metadata as json ( use -o - to write to stdout )
--user-agent
Custom User-Agent string for HTTP requests (only used with remote URLs)
--no-verify
Skip Hash Verification
--no-parallel
Disable parallel Extraction
🔧 Dependencies
🏗️ Build
To build this, you'll need:
- Rust compiler and Cargo
🙏 Credits
This tool is inspired from vm03/payload_dumper