Como extrair boot.img?

Estou tentando ver o conteúdo em um boot.img arquivo de uma imagem do Android.

Pesquisei no Google e encontrei este artigo para extrair system.img, mas não funciona para boot.img. Ao tentar fazer isso para boot.img, é mostrado o seguinte:

Invalid sparse file format at header magi Failed to read sparse file 

simg2img é usado apenas para extrair system.img?

  1. Em caso afirmativo, há algum outro método para extrair boot.img?
  2. Se não, qual é o problema de não extrair boot.img?

Comentários

Resposta

boot.img é um arquivo pequeno (ish) que contém duas partes principais.

 * kernel(important for android) * ramdisk( a core set of instruction & binaries) 

Descompacte boot.img:

Contém as seguintes etapas:

  1. Baixe a ferramenta usando wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/android-serialport-api/android_bootimg_tools.tar.gz

  2. Extraia o arquivo usando tar xvzf android_bootimg_tools.tar.gz.

    Ele contém two binários:

     * unpackbootimg * mkbootimg 

3. Em seguida, execute ./unpackbootimg -i <filename.img> -o <output_path>

It will contain, * boot.img-zImage ----> kernel * boot.img-ramdisk.gz ----> ramdisk 

Podemos extrair o ramdisk também, usando o seguinte comando

gunzip -c boot.img-ramdisk.gz | cpio -i 

Depois de alterar os arquivos, podemos empacotar novamente esses arquivos como boot.img usando mkbootimg

Divirta-se!

Comentários

  • Estou recebendo um erro na terceira etapa por favor me ajude … o terminal diz comando unpackbootimg não encontrado
  • Obtendo o mesmo erro para a etapa 3 no Mint 17 aqui. Tentei executá-los por sudo e depois de chmod 755 sem sucesso.
  • Na etapa 3, certifique-se de que output_path já existe, caso contrário unpackbootimg falhará em segfault.
  • O link para a ferramenta está morto.
  • Correção para: " comando unpackbootimg não encontrado ", você está executando o binário de 32 bits em uma máquina de 64 bits sem dependências de 32 bits. Instale-os com " apt-get install gcc-multilib "

Resposta

boot.img não é uma imagem de sistema de arquivos compactado como system.img. É lido pelo bootloader e contém pouco mais do que uma imagem do kernel e uma imagem do ramdisk.

Algumas distribuições binárias fornecem o kernel e as imagens do ramdisk separadamente. Nesse caso, você não precisa fazer nada com boot.img, apenas regenerar um novo com mkbootimg.

Se você precisar extrair informações de um boot.img, tente split_bootimg (por William Enck , via a wiki do Android ).

Comentários

  • O link para split_bootimg não é mais válido.
  • @NathanOsman Substituído por um link para a cópia na página de William Enck ' s.

Resposta

Eu uso o opensuse. Eu instalei o abootimg. Se você deseja extrair (boot | recovery) .img execute:

abootimg -x (boot|recovery).img 

Então você obtém os próximos arquivos : bootimg.cgf, zImage e initrd.img Se você quiser empacotar a imagem, execute

abootimg --create (boot|recovery).img -f bootimg.cfg -k zImage -r initrd.img 

Então você “obterá (boot | recovery) .img

Divirta-se

Resposta

Você pode usar a seguinte ferramenta para extrair e embalar novamente a imagem de inicialização do Android

$ git clone https://github.com/cfig/Android_boot_image_editor.git 

copie seu boot.img para o repositório git clonado. Execute:

$ ./gradlew unpack 

A primeira execução precisará baixar as bibliotecas necessárias da Internet, seja paciente. Você pode obter o conteúdo em “build / unzip_boot /”, como este:

build/unzip_boot/ ├── bootimg.json (boot image info) ├── kernel ├── second (2nd bootloader, if exists) ├── boot.img.avb.json (AVB only) └── root 

Comentários

  • Esta é a resposta, já que este código e projeto são atuais e mantidos.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *