Já faz 5 anos, mas eu acabei de fazer a pesquisa para escrever uma ferramenta para fazer o backup de meus disquetes antigos, que precisa traduzir entre deslocamentos em imagens de disco e nomes de arquivos, então aqui está uma resposta para você.
I'm working on a disk imaged with dd
Primeiro, para o benefício de qualquer um que esteja saindo do Google, eu recomendo sempre usando o GNU ddrescue. Lembro-me de ter lido que dd
não é confiável quando se trata de detectar e relatar certos tipos de erros.
Quanto a responder a pergunta, encontrei duas opções:
-
filefrag -e /path/to/file
parece funcionar em qualquer disco ou-o loop
de imagem de disco montada e faz parte dee2fsprogs
, por isso deve ser instalado por padrão na grande maioria das máquinas Linux, mas deve ser executado como raiz e é incompatível com os sistemas de arquivos FUSE que testei, como o fuseiso.( Esta resposta sugeriu, mas tive que adicionar
-e
para que funcionasse de forma confiável para as imagens que eu estava testando.) -
O Kit Sleuth fará o que você quer e fica perfeitamente feliz trabalhando com uma grande variedade de formatos de imagem . (E, como é um kit de ferramentas forense, as ferramentas não introduzem novas maneiras de modificar acidentalmente a imagem de disco que você despejou e também pode usá-las para desfazer a exclusão de arquivos se você ler as páginas de manual.)
Veja um exemplo de como usar o The Sleuth Kit:
#!/bin/bash
# For demonstration purposes, I'll start from a bad sector report culled
# from a ddrescue log file, so I can also demonstrate looking up a file
# from a byte offset within the image.
BAD_OFFSET=1234567890
IMG_PATH=/path/to/image/file
# Translate to the units TSK tools expect
BLOCK_SIZE="$(blkcat -s "$IMG_PATH" | cut -d: -f1)"
BLOCK_OFFSET="$(($BAD_OFFSET / $BLOCK_OFFSET))"
# Get the inode (or equivalent ID) for the file at that offset
FILE_INODE="$(ifind -d "$BAD_OFFSET" "$IMG_PATH")"
# Get the filename for the file at that offset (for the display/logging)
FILE_NAME="$(ffind -u "$IMG_PATH" "$FILE_INODE")"
# Get 'stat' info for the file and a list of sectors it occupies
FILE_META="$(istat "$IMG_PATH" "$FILE_INODE")"
# Get the file's contents, just for the sake of completeness
FILE_DATA="$(icat "$IMG_PATH" "$FILE_INODE")"
Além disso, ele pode ser usado como uma biblioteca ... no entanto, como é licenciado sob a Licença Pública Comum, que é incompatível com a GPL, você provavelmente desejará usar uma das ferramentas fornecidas para despejar tudo isso informações em formato legível por máquina, para que você possa chamá-lo como um subprocesso do mesmo modo que os gerenciadores de archive do Linux com unrar
.
Existem dois formatos suportados para saída legível por máquina:
-
Digital Forensics XML , através do comando
fiwalk
(mencionado aqui e aqui mas não incluído no pacote * buntu 14.04sleuthkit
. - Um banco de dados SQLite, via
tsk_loaddb /path/to/image
(Ele gerará um nome de arquivo de banco de dados colocando.db
no final do caminho de entrada, mas você poderá alterar o diretório de destino com-d target_dir
.)
O esquema SQLite mudou várias vezes nos últimos anos para acomodar novos recursos, portanto, basta verificar o Tsk_loaddb página em seu wiki para uma descrição do esquema para qualquer versão do TSK que você esteja usando.
Quanto aos formatos de imagem suportados, minha cópia do repositório * buntu 14.04 suporta estes:
ssokolow@monolith ~ % lsb_release -i -r -c
Distributor ID: Ubuntu
Release: 14.04
Codename: trusty
ssokolow@monolith ~ % ifind -V
The Sleuth Kit ver 3.2.3
ssokolow@monolith ~ % ifind -i list
Supported image format types:
raw (Single raw file (dd))
aff (Advanced Forensic Format)
afd (AFF Multiple File)
afm (AFF with external metadata)
afflib (All AFFLIB image formats (including beta ones))
ewf (Expert Witness format (encase))
split (Split raw files)
ssokolow@monolith ~ % ifind -f list
Supported file system types:
ntfs (NTFS)
fat (FAT (Auto Detection))
ext (ExtX (Auto Detection))
iso9660 (ISO9660 CD)
hfs (HFS+)
ufs (UFS (Auto Detection))
raw (Raw Data)
swap (Swap Space)
fat12 (FAT12)
fat16 (FAT16)
fat32 (FAT32)
ext2 (Ext2)
ext3 (Ext3)
ufs1 (UFS1)
ufs2 (UFS2)
Wikipedia e o wiki do Sleuth Kit indicam que o suporte ExFAT , ext4 e YAFFS2 foi adicionado desde então, mas UDF ainda é uma solicitação de recurso aberto de 2018-04-24.