Estou executando file
um arquivo wallet.dat (um arquivo em que o Bitcoin mantém suas chaves privadas) e mesmo que não pareça haver cabeçalho ou string identificável, file
ainda posso dizer que é um arquivo Berkley DB, mesmo que eu reduza para 16 bytes.
Eu sei que o arquivo estava aplicando algum tipo de regra ou procurando alguma sequência para identificá-lo. Quero saber qual é a regra aplicada aqui, para que eu possa duplicá-la no meu próprio programa.
file-command
Nick ODell
fonte
fonte
file
não está errado nesta circunstância.Respostas:
Pegue a fonte do comando file. A maioria, senão todos os departamentos de código aberto, usam esse . O
file
comando vem com omagic
banco de dados, nomeado após os números mágicos que ele descreve. (Esse banco de dados também é instalado no seu sistema ativo, mas em um formato compilado.) Procure o arquivo que contém o texto de descrição que você vê:A
magic
página do manual descreve o formato do arquivo. As linhas de gatilho para "Berkeley DB" sãoA primeira coluna especifica o deslocamento no qual uma determinada sequência de bytes deve ser encontrada. A terceira coluna contém a sequência de bytes. A segunda coluna descreve o tipo de sequência de bytes:
long
significa 4 bytes no endianness da plataforma ;lelong
ebelong
significa 4 bytes em ordem little-endian e big-endian, respectivamente.Em vez de replicar as regras, convém chamar o
file
utilitário; é especificado pelo POSIX , mas os formatos que ele reconhece e as descrições que ele gera não são. Como alternativa, você pode vincularlibmagic
e chamar a funçãomagic_file
oumagic_buffer
.fonte
Você poderia:
Execute
file
de dentro do seu programaUse uma biblioteca que ofereça
file
funcionalidade para sua linguagem de programação. por exemplo,libmagic
para C,File::Libmagic
ouFile::MMagic
paraperl
,python-magic
para python, etc.BTW, as definições
file
usadas para identificar arquivos são encontradas em/etc/magic
. Vejaman 5 magic
para detalhes de formato de arquivo.fonte
/etc/magic
tende a ser para o seu próprio conhecimento mágico local. As distros tendem a exibir sua mágica genérica/usr/share/misc/magic
.