Página 1 de 1

Formato do arquivo

Enviado: 11 Mar 2010 10:47
por TerraSoftware
Caros colegas, existe alguma maneira de descobrir se determinado arquivo é realmente um executável?
Alguma função de manipulação de arquivos (mesmo que de baixo nivel) que posso, por exemplo, ler o arquivo e identificar se ele é realmente um arquivo executável?
Preciso testar isso, para evitar que alguem renomeie um outro arquivo para a extencao .exe e faça ele passar-se por um executavel.

Re: Formato do arquivo

Enviado: 11 Mar 2010 11:57
por asimoes

Re: Formato do arquivo

Enviado: 11 Mar 2010 12:23
por rochinha
Amiguinho,

Se voce apenas quer dar uma olhada, abra o arquivo pelo bloco de notas e verá que "MZP" irá aparecer no inicio deste arquivo.

Talvez aquela velha função de baixo nivel para proteger e desproteger .DBF possa te servir de base para testar estes caracteres e trazer a resposta desejada.

Voce pode tentar usar a API do Windows para verificar isto, teste:

Código: Selecionar todos

DLL32 FUNCTION GetFileTyp( hFile AS LONG ) ;
   AS LONG PASCAL; 
   FROM "GetFileType" LIB "KERNEL32"
Voce passa o nome do executável com EXTensão e ele lhe retorna o tipo.

Re: Formato do arquivo

Enviado: 12 Mar 2010 14:35
por alxsts
Olá!

Qual seria a tua intenção?
Verificar se um dado arquivo é um executável ou assegurar que o programa que você distribuiu (teu seistema) é o que está sendo executado pelo cliente?

Re: Formato do arquivo

Enviado: 15 Mar 2010 12:14
por TerraSoftware
Caro colega alxsts, a minha necessidade agora é somente verificar se um determinado arquivo é mesmo um executável, independente de sua extenção.
Mas o que vc me perguntou me deixou curioso. Hoje antes de trocar versao nos meus clientes, o programa responsavel pela troca verifica a data do executavel e o seu tamanho, com estas informacoes eu decido se é necessario atualizar ou nao. Existe algo mais seguro do que isso?

Re: Formato do arquivo

Enviado: 15 Mar 2010 14:09
por alxsts
Olá!

Para a tua necessidade de identificar um .Exe genérico talvez a dica do Rochinha, acima, funcione. Por curiosidade, abri cinco executáveis e em todos encontrei "MZ" nos bytes 1 e 2. Não encontrei "MZP".

Quanto à outra situação, você pode, através de outro programa (pode ser o instalador do sistema), fazer o seguinte:
- abrir o executável do teu sistema com FOpen()
- posicionar o ponteiro no final do arquivo com FSeek( nHandle, 0, FS_END )
- escrever alguma chave ou assinatura (que o teu sistema possa validar posteriormente, em tempo de execução) com FWrite e fechar o arquivo com FClose().

Quando o teu aplicativo for executado, ele deverá abrir a si próprio, recuperar os bytes gravados acima e validar essa assinatura (talvez contra uma chave encriptada gravada em algum arquivo de parâmetros ou .INI).

Esse processo não corrompe o arquivo executável.

Re: Formato do arquivo

Enviado: 16 Mar 2010 07:24
por asimoes
A solução anterior do alxsts é criar o próprio virus do sistema. :))