Como fazer distribuições diff?

4

Estou usando um Raspberry Pi.

Parece haver todos os tipos de distribuições linux, todas no formato .img que eu uso o Win32DiskImager para gravar em cartões SD.

Como descubro quais arquivos foram alterados (algumas pessoas dizem que essa imagem foi feita a partir da distribuição X, então eu poderia usar dist. X como um arquivo e o dele como o outro e comparar) e como descobrir se uma distribuição personalizada é maliciosa ou não?

Eu gostaria de descobrir as diferenças no Windows 7. As Distros são sempre Linux, no entanto.

    
por Zurechtweiser 19.05.2013 / 14:58

1 resposta

2

Um arquivo .img é um arquivo de imagem de um disco completo. Por isso, pode conter mais de uma partição. Por ser uma imagem de disco, você pode usar ferramentas de gerenciamento de disco, como fdisk , para ver que tipo de partições ela contém.

Conteúdo do archlinux-hf-2013-06-06.img

$ fdisk -l archlinux-hf-2013-06-06.img

Disk archlinux-hf-2013-06-06.img: 1960 MB, 1960837120 bytes
64 heads, 32 sectors/track, 1870 cylinders, total 3829760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0004f23a

                      Device Boot      Start         End      Blocks   Id  System
archlinux-hf-2013-06-06.img1   *        2048      186367       92160    c  W95 FAT32 (LBA)
archlinux-hf-2013-06-06.img2          186368     3667967     1740800   83  Linux

Então, olhando para a saída, podemos ver que existem 2 partições dentro do arquivo .img. O primeiro, rchlinux-hf-2013-06-06.img1, é um tipo de partição FAT32. A segunda partição, archlinux-hf-2013-06-06.img2, é uma partição do Linux.

Anote os setores iniciais das duas partições (2048 e 186368). Você precisará disso mais tarde. Observe também quantos bytes um determinado setor contém (512 bytes).

Montando as partições

Para montar a partição Linux, primeiro você precisa calcular sua posição inicial em termos de bytes. Então faça a seguinte matemática:

part1:   2048 sectors * 512 bytes/sector =  1048576 bytes
part2: 186368 sectors * 512 bytes/sector = 95420416 bytes

Então, para montar as partições do Linux (segunda):

$ sudo mount -o loop,offset=95420416 archlinux-hf-2013-06-06.img /mnt/

NOTA: Para montar a partição FAT32, você pode usar este comando:

$ sudo mount -t vfat -o loop,offset=1048576 archlinux-hf-2013-06-06.img /mnt/

E agora podemos ver o conteúdo:

$ ls /mnt|columns -c 4
bin                   boot                  dev                   etc
home                  lib                   lost+found            media
mnt                   opt                   proc                  root
run                   sbin                  srv                   sys
tmp                   usr                   var

Desmontando

Para desmontar uma partição quando terminar, faça o seguinte comando:

$ sudo umount /mnt

Comparando o conteúdo de arquivos .img

Então aqui está uma ideia. Você pode montar 2 arquivos .img em /mnt1 e /mnt2 e, em seguida, executar uma comparação recursiva das duas árvores de diretórios contidas em cada arquivo .img.

Com os 2 arquivos .img montados, você pode executar um comando como este, que faria uma comparação:

$ diff -qr /mnt1 /mnt2

Isso resultaria em uma saída que mostrava um arquivo e se era diferente e / ou ausente nas duas árvores de diretório.

kpartx - maneira alternativa de montar partições

Se você está com preguiça de executar as contas acima usando fdisk , pode usar kpartx e mapear as partições para dispositivos de loopback que podem ser facilmente montados / desmontados. Os comandos seriam mais ou menos assim:

monte o arquivo .img # 1

$ sudo kpartx -av your-image1.img 
add map loop0p1 (252:5): 0 117187 linear /dev/loop0 1
add map loop0p2 (252:6): 0 3493888 linear /dev/loop0 118784
$ sudo mount /dev/mapper/loop0p2 /mnt1

monte o arquivo .img # 2

$ sudo kpartx -av your-image2.img 
add map loop1p1 (252:5): 0 117187 linear /dev/loop1 1
add map loop1p2 (252:6): 0 3493888 linear /dev/loop1 118784
$ sudo mount /dev/mapper/loop1p2 /mnt2

Referências

por 15.06.2013 / 08:12