Pergunta

Eu tenho um arquivo binário. Eu não sei como ele é formatado, eu só sei que vem de um código delphi.

Será que existe alguma maneira de analisar um arquivo binário?

Será que existe algum "padrão" para analisar e desserializar o conteúdo binário de um arquivo com formato desconhecido?

Foi útil?

Solução

Tente isto:

  1. dados Deserialize : analisar como é compilado seu exe (experimente Arquivo Analyzer ). Tentar desserializar os dados binários com o idioma descoberto. Então serializá-lo em um formato XML (linguagem de indipendent) que cada linguagem de programação pode entender
  2. Analise os dados binários : tentar salvar várias versões do arquivo com pouca variação e usar um programa diff para analisar o significado de cada bit com um editor hexadecimal. Usá-lo em conjunto com técnicas de invasão binários (como Como quebrar um formato de arquivo binário por Frans Faase )
  3. fazer engenharia reversa do aplicativo : tentar obter o código usando ferramentas de engenharia reversa para a linguagem de programação usada para construir o aplicativo (encontrado com Arquivo Analyzer ). Caso contrário, use desmontador ferramenta de análise como IDA Pro Disassembler

Outras dicas

Para o meu hobby que eu tinha que fazer engenharia reversa de alguns arquivos do jogo velhos. Meus abordagens foram:

  • Tenha um bom editor hexadecimal.
  • Procure palavras legíveis no arquivo binário. Note como a sua distribuição é. Se a distância entre eles é constante você sabe que é uma listagem.
  • Procure 2-3 consequentes zeros. Pode indicar um valor int32.
  • Alguns dwords pode ser ponteiros para o arquivo.
  • Tente identificar reoccurring padrões no arquivo.
  • Vendo lotes de C0-CF pode indicar dados comprimidos RLE.

engenharia reversa um arquivo binário quando você tem alguma idéia do que isso representa é um processo muito demorado. Se você não tem idéia do que é, então será ainda mais difícil.

É possível, porém, mas você tem que ter uma razão muito boa para fazê-lo.

O primeiro passo seria a abri-lo em um editor hexadecimal de sua escolha e veja se você pode encontrar qualquer texto Inglês para apontá-lo na direção do que o arquivo é mesmo suposto representar. A partir daí, "arquivos binários engenharia reversa" Google, existem pessoas muito mais experientes do que me tem sido escrito guias sobre isso.

O programa "cordas" do GNU binutils é muito útil. Ele irá imprimir as cadeias de caracteres imprimíveis em um arquivo, muitas vezes dando uma pista do que um arquivo contém ou um programa faz.

Se os dados representam serializado objetos Delphi, você deve começar a ler sobre o processo de serialização Delphi. Se for esse o caso, eu acho que sua melhor aposta seria para carregá-lo usando o Delphi e continuar a sua análise a partir do IDE. Algumas informações sobre Delphi serialização pode ser encontrada aqui .

EDIT: se o arquivo contém objetos delphi serializados, então você deve escrever um pequeno programa delphi que carrega-lo, e em "Convert" os dados se de algo neutro, como xml. Se você conseguir fazer isso, você deve verificar e ver se suportes delphi serialização de xml. Então, você pode acessar esses objetos de qualquer idioma.

Eu desenvolvi Hexinator (Window & Linux) e Synalyze It! (MacOS) exatamente para esta finalidade. Estas aplicações permitem que você veja os arquivos binários como em outros editores hexadecimais mas além disso, você pode criar uma "gramática" com as especificidades de um formato de arquivo binário. A gramática contém todos os blocos de construção e é usado para analisar o arquivo automaticamente.

Assim, você pode manter o conhecimento que você ganha na análise e aplicá-la a vários arquivos simultaneamente. Você também pode colorir-code os pedaços de formatos de arquivo para uma visão rápida no editor hex. Captura de tela do Synalyze It! Pro Os resultados da análise são exibidos em uma exibição em árvore, onde você também pode modificar os arquivos facilmente (aplicando endianness et cetera).

O "file" unix comando é realmente útil - Eu não sei se existe nada parecido em janelas. Você executá-lo como este:

file myfile.ext

E ele cospe uma descrição de texto com base nos números de magia e os dados contidos nele.

Provavelmente ele está contido dentro cygwin .

Se você tem acesso ao aplicativo que cria o arquivo, você pode aplicar as alterações para o aplicativo, em seguida, salvar o arquivo e ver os efeitos (Tenha em mente que os números provavelmente são armazenados em pouco endian):

  • Primeiro criar o arquivo repetidamente. Se os arquivos não são binárias iguais, a data / hora atual é provavelmente armazenadas na área onde as diferenças hte ocorrer.
  • Talvez você queira repetir que, com o software rodando em ambientes diferentes, para ver se OS versão etc são armazenados, mas isso é bastante incomum.
  • Em seguida, você pode tentar mudar variáveis ??individuais e criar vários arquivos que só diferem no valor dessa variável. Isso ajuda a identificar onde esta variável é armazenada.
  • Dessa forma, você também pode excluir variáveis ??que não estão armazenadas no arquivo:. Se você alterá-los, mas os arquivos criados são idênticos, eles não são armazenados

A fim de testar as hipóteses em que trabalhou com os passos acima, editar um dos arquivos e ter o aplicativo lê-lo.

Se você não tem acesso ao aplicativo em si, eu sugiro que você esquecê-lo e encontrar outra maneira de resolver o seu problema. Há uma probabilidade muito alta de que será mais rápido ...

Se file não dá uma resposta significativa, você pode querer tentar TrID por Marco Pontello para determinar se seus dados são armazenados em um formato conhecido.

Você conhece o programa que usa-lo? Se assim você pode ligar que os programas de escrever a função de arquivo e ter uma idéia de quais os dados a sua escrita, o tamanho dos dados e onde.

Mais informações: http://www.codeproject.com/KB/DLL/ Win32APIHooking_Trouble.aspx

Obter a aplicação Delphi e abri-lo no IDA Pro gratuito versão , e descobrir onde ele grava o arquivo, e decodificar como ele grava o arquivo dessa maneira.

A menos que de texto plano.

Ao contrário de editores hexadecimais tradicionais que só mostrar o hex matéria-bytes de um arquivo, 010 Editor pode também analisar um arquivo em uma estrutura hierárquica usando um modelo binário. Os resultados da execução de um modelo binário são muito mais fáceis de entender e editar do que usar apenas os bytes hexadecimais matéria.

http://www.sweetscape.com/010editor/

Tente abri-lo em um editor hexadecimal e analisar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top