Decompile / Run MIPS executável sob x86_64 Ubuntu

1

Atualmente estou tentando fazer modificações no firmware de um roteador: Swisscom Centro Grande - também conhecido como Pirelli Vx226N1, versão de firmware: 60200.

Eu decompilei o arquivo com sucesso com o FMK v0.99 e obtive o header.img , as partes rootfs.img e footer.img da imagem.

Esta é a binwalk de rootfs.img:

Squashfs filesystem, little endian, non-standard signature, version 4.0, compression:gzip, size: 2764423 bytes, 1145 inodes, blocksize: 65536 bytes, created: Fri Mar 15 00:33:08 2013

Eu decompilei o rootfs.img com unsquashfs com sucesso e obtive as pastas do sistema. Fiz algumas alterações (habilitei um shell no telnet) e tentei empacotar tudo com as ferramentas fornecidas (o comando ./build-firmware.sh ).

O tamanho final do firmware foi maior que o original. Tentei piscar, nada aconteceu. Eu analisei o firmware e especialmente o método de atualização para aprender a construir o firmware corretamente.

Eu encontrei o arquivo update.sh que lida com o processo de atualização (analisa o arquivo fornecido pelo usuário e pisca somente se tudo estiver correto, a fim de evitar o brick)

Aqui está o link para o pastebin desse arquivo

Tenho certeza de que os arquivos originais do firmware são analisados através da função parse_yaps_image() , então tentei me adaptar sozinho para verificar os arquivos, mas notei que havia uma verificação externa com um arquivo binário chamado sig_verify

Se os arquivos não existirem outra função é invocada, o problema é que a função fornecida não está correta (ela retorna um erro wrong validation token mesmo com o firmware original!)

Meu objetivo é analisar o arquivo sig_verify e procurar o algoritmo, a fim de entender o método de composição e para fazer o flash do meu roteador da maneira correta e finalmente obter o shell de root (e fazer modificações em tudo que eu quer)

Enviei todos os arquivos em uma Pasta Mega para que os caras interessados que quiserem me ajudar possam acessar qualquer arquivo necessário.

Eu incluí na pasta 60208 os dois scripts que usei para verificar os arquivos.

O resultado do script que escrevi (é apenas a adaptação do script no roteador) é este:

denys@denys-pc:~/Documents/router/Vx226N1/images/modified/60208$ ./check_upgrade_yaps.sh 
Parsing YAPS format...
16+0 records in
16+0 records out
16 bytes (16 B) copied, 0.000843843 s, 19.0 kB/s
Error: wrong validation token (5b445d3b251d59753031c9d7a94ba4ab, 7d98668859855f1b9459256257fc3262)

E aqui está a binwalk do arquivo sig_verify .

denys@denys-pc:~/Documents/router/Vx226N1/images/modified/60208$ binwalk sig_verify 

DECIMAL     HEX         DESCRIPTION
-------------------------------------------------------------------------------------------------------
0           0x0         ELF 32-bit MSB executable, MIPS, version 1
1921        0x781       LZMA compressed data, properties: 0x01, dictionary size: 16777216 bytes, uncompressed size: 16777472 bytes

Como você pode perceber, é um executável MIPS . Eu tentei executá-lo em um ambiente MIPS (máquina virtual, qemu-system-mips ) sem nenhum sucesso.

qemu-system-mips -M mips -kernel ./vmlinux-2.6.18-6-qemu -initrd ./initrd.gz -hda hda.img -append "root=/dev/ram console=ttyS0" -nographic

O kernel e o initrd foram baixados pelo link

Qualquer ajuda seria apreciada. Se algo não estiver claro, me avise:)

    
por Denys Vitali 17.01.2015 / 19:06

1 resposta

1

Primeiro, você quer dizer extraído ou descompactado, não descompilado. Mais ao ponto, no entanto, o que você quer é os programas qemu-user, não o qemu-system. No Debian GNU / Linux, por exemplo, você só precisa instalar o pacote qemu-user-binfmt e então executar esses binários como os nativos.

A única complicação é quando esses binários precisam de arquivos em locais codificados (por exemplo, uClibc em / lib). Uma maneira fácil de contornar isso é copiar o qemu-user relevante (por exemplo, "qemu-mips") para o mesmo caminho dentro do diretório raiz extraído:

cp /usr/bin/qemu-mips router-root/usr/bin

e, em seguida, você deve ser capaz de chroar dentro, usando, por exemplo, busybox como um shell:

chroot router-root bin/sh
chroot router-root bin/sig_verify ...

no entanto, se sig_verify usar um algoritmo bom para a assinatura (por exemplo, rsa), as chances de assinar seus próprios arquivos serão pequenas.

    
por 06.03.2015 / 14:46