Extraer blobs propietarios
EditarIntroducción
Los blobs propietarios pueden extraerse de un dispositivo que ya ejecute /e/OS o de un zip instalable de /e/OS. En esta guía describiremos los pasos necesarios para extraer los archivos propietarios de los zips instalables.
Antes de empezar, es necesario conocer la diferencia entre los tipos de OTA:
OTA basada en bloques: el contenido de la partición system se almacena dentro de un archivo
.dat/.dat.brcomo datos binarios.OTA basada en archivos: el contenido de la partición system está disponible dentro de una carpeta del zip llamada
system.OTA basada en payload: el contenido de la partición system se almacena como un archivo
.imgdentro depayload.bin.
Si tu zip no tiene carpeta system o está casi vacía y existe un archivo llamado system.transfer.list en la raíz, entonces tienes una OTA basada en bloques. Salta en ese caso a Extraer blobs propietarios de OTAs basadas en bloques.
Si tienes todo el contenido de la partición system dentro de la carpeta system y no hay system.transfer.list, entonces tienes una OTA basada en archivos. Ver Extraer blobs propietarios de OTAs basadas en archivos.
También puede que tengas una OTA basada en payload, que es la que usará tu dispositivo si emplea el esquema de particiones A/B. Si es tu caso, salta a Extraer blobs propietarios de OTAs basadas en payload.
Extraer blobs propietarios de OTAs basadas en bloques
Algunas OTAs basadas en bloques se dividen en varios archivos, para la partición system y las demás particiones como vendor, product, oem, odm y otras. Puedes comprobar si la tuya está dividida buscando los archivos *.transfer.list correspondientes a cada una en la raíz del zip instalable de /e/OS.
Si tienes un archivo de OTA basada en bloques dividido, tendrás que extraer, descomprimir y convertir cada uno de forma similar a system y vendor como se describe abajo.
Si no tienes un archivo de OTA dividido, puedes saltarte cualquier paso que mencione vendor.transfer.list y vendor.new.dat.br o vendor.new.dat.
Crea un directorio temporal y muévete a él:
mkdir ~/android/system_dump/
cd ~/android/system_dump/
Extrae system.transfer.list y system.new.dat.br o system.new.dat del zip instalable de /e/OS:
unzip path/to/e-*.zip system.transfer.list system.new.dat*
donde path/to/ es la ruta al zip instalable.
Si tu OTA incluye vendor.transfer.list y vendor.new.dat.br o vendor.new.dat (u otros), extráelos también del zip instalable de /e/OS:
unzip path/to/e-*.zip vendor.transfer.list vendor.new.dat*
donde path/to/ es la ruta al zip instalable.
En el caso de que exista system.new.dat.br/vendor.new.dat.br/etc. (un archivo brotli), primero tendrás que descomprimirlos con la utilidad brotli:
sudo apt-get install brotli
brotli --decompress --output=system.new.dat system.new.dat.br
Y si tienes un archivo vendor.dat.new.br (u otros):
brotli --decompress --output=vendor.new.dat vendor.new.dat.br
Ahora necesitas una copia de sdat2img. Este script puede convertir el contenido de las OTAs basadas en bloques en imágenes montables. sdat2img está disponible en el siguiente repositorio git, que puedes clonar con:
git clone https://github.com/xpirt/sdat2img
Una vez obtenido sdat2img, úsalo para extraer la imagen del sistema:
python sdat2img/sdat2img.py system.transfer.list system.new.dat system.img
Y si tienes un archivo vendor.dat.new (u otros):
python sdat2img/sdat2img.py vendor.transfer.list vendor.new.dat vendor.img
Ahora deberías tener un archivo llamado system.img que puedes montar así:
mkdir system/
sudo mount system.img system/
Si también tienes un archivo llamado vendor.img, puedes montarlo así:
sudo rm system/vendor
sudo mkdir system/vendor
sudo mount vendor.img system/vendor/
También debes montar ahora cualquier otro archivo de imagen que tengas en sus directorios respectivos.
Una vez montada(s) la(s) imagen(es), muévete al directorio raíz de las fuentes de tu dispositivo y ejecuta extract-files.sh así:
./extract-files.sh ~/android/system_dump/
Esto indica a extract-files.sh que tome los archivos del volcado de sistema montado en lugar de un dispositivo conectado.
Una vez extraídos todos los archivos propietarios, desmonta el volcado de vendor si lo montaste antes:
sudo umount ~/android/system_dump/system/vendor
Luego desmonta el volcado de sistema:
sudo umount ~/android/system_dump/system
Por último, desmonta cualquier otra imagen antes de borrar los archivos que ya no necesites:
rm -rf ~/android/system_dump/
Extraer blobs propietarios de OTAs basadas en archivos
Crea un directorio temporal para extraer el contenido del zip y muévete a él:
mkdir ~/android/system_dump/
cd ~/android/system_dump/
Extrae la carpeta system del zip:
unzip path/to/e-*.zip system/*
donde path/to/ es la ruta al zip instalable.
Una vez extraída la carpeta system, muévete al directorio raíz de las fuentes de tu dispositivo y ejecuta extract-files.sh así:
./extract-files.sh ~/android/system_dump/
Esto indica a extract-files.sh que tome los archivos del volcado de sistema extraído en lugar de un dispositivo conectado.
Una vez extraídos todos los archivos propietarios, puedes borrar los archivos que se extrajeron del zip:
rm -rf ~/android/system_dump/
Extraer blobs propietarios de OTAs basadas en payload
Crea un directorio temporal para extraer el contenido del zip y muévete a él:
mkdir ~/android/system_dump/
cd ~/android/system_dump/
Extrae el archivo payload.bin del zip de instalación de /e/OS:
unzip /path/to/e-*.zip payload.bin
donde /path/to/ es la ruta al zip instalable.
Ahora necesitarás usar una herramienta llamada update-payload-extractor.
Para usar la herramienta necesitarás python-protobuf, si aún no lo tienes:
sudo apt-get install python-protobuf
Ya puedes extraer los archivos .img del payload:
Si ya tienes un árbol de compilación de /e/OS clonado, puedes simplemente ejecutar el script para extraer el payload:
python /path/to/e-tree/e/scripts/update-payload-extractor/extract.py payload.bin --output_dir ./Si no tienes un árbol de compilación de /e/OS clonado, puedes clonar nuestro repositorio de scripts y luego ejecutar el script para extraer el payload:
git clone https://github.com/LineageOS/scripts python /path/to/scripts/update-payload-extractor/extract.py payload.bin --output_dir ./
Tardará un momento. Cuando termine, tendremos que montar el archivo system.img, y los archivos vendor.img y product.img si existen, para obtener el conjunto completo de blobs propietarios:
mkdir system/
sudo mount system.img system/
sudo mount vendor.img system/vendor/
sudo mount product.img system/product/
Muévete al directorio raíz de las fuentes de tu dispositivo y ejecuta extract-files.sh así:
./extract-files.sh ~/android/system_dump/
Esto indica a extract-files.sh que extraiga los blobs propietarios del volcado de sistema montado en lugar de un dispositivo conectado.
Cuando termine, desmonta el volcado de sistema y borra los archivos ya innecesarios:
sudo umount -R ~/android/system_dump/system/
rm -rf ~/android/system_dump/