Procurando por byte mágico específico em um oceano de arquivos

2

Eu quero saber como posso pesquisar um tipo de arquivo específico: inseri um servidor SSH e estou tentando pesquisar um arquivo .jpg , mas o proprietário do servidor (meu professor) removeu todas as extensões .

Eu tentei grep -lr "JFIF" e eu encontrei muitos diretórios com o mesmo nome de arquivo, então eu entrei em um diretório aleatório que foi encontrado com o comando grep e tentei usar o comando cat nele, mas o terminal não pôde mostrar todo o binário.

Além disso, o comando strings está bloqueado no servidor ssh, meu professor disse que você precisa encontrar um arquivo jpg e que este arquivo contém um número de série (SN), mas não tenho idéia de onde encontrá-lo. / p>

Se vocês quiserem os cardeais da SSH, terei prazer em distribuí-los para você, de qualquer maneira, meu professor disse que você pode usar o comando file para fazer isso, mas eu não sei como fazê-lo.

BTW: ele disse (SN)

    
por adib 11.02.2016 / 17:43

4 respostas

4

Antes de tudo, quero agradecer a @incBrain e @Serg por não terem respondido diretamente à minha pergunta, o que me ajudou a entender muitas coisas novas:).

Minha tarefa foi encontrar um arquivo .jpg específico que tenha sua extensão removida. A primeira coisa que pensei foi .jpg byte mágico que era JFIF , e com instruções @incBrain eu consegui construir este comando

find / -exec file {} \; | grep "JFIF"

essa linha vincula o comando find ao comando file usando -exec , em seguida, obtém a saída de ambos find & amp; file de comandos e transferi-lo como uma entrada através do símbolo de pipe | para o comando grep que mostra apenas os arquivos que contêm JFIF em seu binário a.k.a .jpg files .

Na verdade, o meu problema foi encontrar um número de série específico, no começo eu pensei que o número de série estivesse incluído no binário do arquivo, mas isso estava errado, então um louco veio à minha mente

  

Oh! por que não vejo como a imagem se parece? Quero dizer, se não posso   encontrar o número de série, ficando a foto seria uma coisa boa

e eu pesquisei na Internet uma boa maneira de transferir arquivos do SSH para minha máquina e encontrei este bloco de código que funcionou!

scp [email protected]:/home/example/file.txt /Local_Directory

Espero que esta resposta ajude alguém no futuro:).

    
por adib 13.02.2016 / 14:20
12

Vou tentar dar algumas dicas para você resolver o seu HW por conta própria.

Siga estes passos:

  1. leia o manual de file executando man file .
  2. Então, experimente por file somefile e veja o que acontece
  3. Tente executar file em diferentes tipos de arquivo
  4. Até agora você deve ser capaz de entender como descobrir se algum arquivo é uma imagem jpeg ou não.
  5. leia agora o manual para find (ou use o google para descobrir como usá-lo para encontrar todos os arquivos em algum diretório e em todos os subdiretórios)
  6. agora descubra como usar a opção -exec de find para conectá-la ao comando file usado anteriormente
  7. Agora você deve ser capaz de descobrir os tipos de arquivos de todos os arquivos no diretório necessário e listá-los
  8. Agora leia sobre o comando pipes | e grep para descobrir como filtrar apenas arquivos JPEG.
por incBrain 11.02.2016 / 19:02
2

Uma possível solução pode ser esta: use find , que lista recursivamente arquivos regulares ( -type f ), e executa o comando file em cada um deles. Redirecione a saída para grep para filtrar tipos de arquivos.

No entanto, aqui, gostaria de fazer algo mais divertido do que isso; mais estranho, mas mais divertido.

$ find .  -maxdepth 1 -type f -printf "%f\t" -exec hexdump -n8 {} \;  | awk '/d8ff e0ff 1000 464a/{print }'

Como você pode ou não saber que cada arquivo tem os primeiros 8 bytes de qualquer arquivo, designe o tipo de arquivo. Assim, usando find , procuramos por todos os arquivos regulares, imprimimos seu nome, mas depois executamos o hexdump para extrair os primeiros 8 bytes e deixamos que awk filtrasse apenas os nomes dos arquivos que possuíssem os primeiros 8 bytes.

Aqui está uma pequena prova:

$ hexdump -n 10 1450763029649.jpg               
0000000 d8ff e0ff 1000 464a 4649               
000000a

$ hexdump  -C -n 10 1450763029649.jpg           
00000000  ff d8 ff e0 00 10 4a 46  49 46                    |......JFIF|
0000000a
    
por Sergiy Kolodyazhnyy 11.02.2016 / 17:53
0
file * | grep -i "jpeg"

Isso pesquisará todos os arquivos no diretório e retornará seu tipo de arquivo. Por meio do Pipe | , esses resultados são pesquisados pelo grep para encontrar o arquivo com o tipo de arquivo "jpeg" ou basicamente um arquivo .jpg.

    
por TheBestCabbage 16.05.2018 / 22:10