Dica #2: descompactar arquivos MSI e DMG no Linux

De uma vez, pela segunda vez, dica rápida.

Não é a primeira, nem é a segunda vez que preciso buscar como faço para descompactar arquivos com extensão MSI (aquele tipo de arquivo "Microsoft-padrão" para instalar programas no Windows). Mas por que descompactar? Simples: eu não tenho instalado Windows em nenhum ambiente nos quais trabalho, e para ter acesso aos arquivos do instalador e analizar o conteúdo dos executáveis, é necessário descompactá-los.

Esta solução é ainda mais interessante quando o mesmo comando, 7z - que usaremos para descompactar *.msi -, também pode ser usado para arquivos DMG, padrão do sistema da Apple, OS X.

Como?

7zip resolverá a questão dos dois tipos de arquivo. Digite a linha de comando abaixo, por exemplo.

$ 7z x nome_do_arquivo.msi

E para entendê-la melhor:7z é o comando; x, parâmetro para designar a extração do seu conteúdo; e nome_do_arquivo.msi, para o nome do arquivo (dãh!).

Bytes e bytes

Extendendo um pouco mais a conversa, podemos conhecer o tipo de um determinado arquivo que baixamos, mesmo que ele não tenha extensão alguma definida (com a extensão omitida), ou seja, sem o .msi ou .dmg. O comando file é justamente o comando que identificará a que tipo de arquivo se trata. Por exemplo: file nome_do_arquivo; no caso de um arquivo MSI, o comando retornará, Os: Windows, Version 10.0, MSI Installer.

A maioria dos arquivos possuem uma assinatura digital, ou seja, uma forma com que aquele arquivo seja reconhecido e aceito no sistema ou programa ao qual foi destinado, sem que uma extensão correta seja definida (em análise forense utilizamos muito). Para isso, haverá no seu conteúdo (entre bytes e mais bytes), uma marcação no cabeçalho do arquivo. Por exemplo, no cabeçalho do arquivo nome_do_arquivo.msi que acabamos de identificar pelo comando file, este terá grafado 8 bytes iniciais, correspondendo a sua assinatura: d0 cf 11 e0 a1 b1 1a e1. No caso da extensão DMG, encontramos apenas 1 byte para identificá-lo: 78.

Explicado e pronto! ;)