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.
Formato do arquivo
Moderador: Moderadores
-
TerraSoftware
- Usuário Nível 3

- Mensagens: 353
- Registrado em: 28 Jul 2004 13:14
- Localização: Cianorte-PR
- Contato:
Re: Formato do arquivo
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Re: Formato do arquivo
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:
Voce passa o nome do executável com EXTensão e ele lhe retorna o tipo.
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"
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Re: Formato do arquivo
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?
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?
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
-
TerraSoftware
- Usuário Nível 3

- Mensagens: 353
- Registrado em: 28 Jul 2004 13:14
- Localização: Cianorte-PR
- Contato:
Re: Formato do arquivo
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?
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?
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Re: Formato do arquivo
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.
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.
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
Re: Formato do arquivo
A solução anterior do alxsts é criar o próprio virus do sistema.
)
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)