Transformando uma sequencia de binário em executável

Publicado por Geraldo José Ferreira Chagas Júnior 09/04/2009

[ Hits: 7.812 ]

Homepage: http://prginfo.blogspot.com

Download bintoexe.c




Foi postado anteriormente por mim o programa viewbin que visualizava em binário um arquivo executável. Agora estou postando o inverso, transformar um arquivo com uma sequência de 0 e 1 em um executável.

Eles serão úteis em meu próximo artigo, assim, nós poderemos modificar um executável, transformando-o em binário, alterando seu conteúdo e retransformá-lo em executável.

  



Esconder código-fonte

/* bintoexe.c */

#include <stdio.h>

char bitToByte (char* bin);

int main (int argc, char* argv[])
{
   FILE *arq;
   FILE *arqDest;
   char buf[2];
   char byte[8];
   int  contBit=0;
   unsigned int f;

   if (argc!=3)
   {
      printf ("Parametro incorreto.\n");
      printf ("Informe o nome do arquivo a ser convertido e o nome do arquivo de destino\n");
      return 1;
   }

   if (!(arq=fopen(argv[1],"r")))
   {
      printf ("Nao foi possivel abrir o arquivo %s!",argv[1]);
      return 1;
   }

   if (!(arqDest=fopen(argv[2],"wb")))
   {
      printf ("Nao foi possivel criar o arquivo %s!\n",argv[2]);
      return 1;
   }

   while (f=fread(buf,1,1,arq))
   {
      if ((buf[0]=='1') || (buf[0]=='0'))
      {
         byte[contBit] = buf[0];
         contBit++;
         if (contBit == 8)
         {
           buf[0] = bitToByte (byte);
           f=fwrite(buf,1,1,arqDest);
         }
      }
      /* o programa ignora qualquer sequencia que seja diferente de 8 zeros ou uns consecutivos */
      else
      {
         contBit = 0;
      }
   }
   close (arq);
   close (arqDest);
   printf ("\n");
}

char bitToByte (char* bin)
{
   char r=0;

   if (bin[0]=='1') r |= 0x80;
   if (bin[1]=='1') r |= 0x40;
   if (bin[2]=='1') r |= 0x20;
   if (bin[3]=='1') r |= 0x10;
   if (bin[4]=='1') r |= 0x8;
   if (bin[5]=='1') r |= 0x4;
   if (bin[6]=='1') r |= 0x2;
   if (bin[7]=='1') r |= 0x1;

   return r;
}

Scripts recomendados

Pequeno simulador de Banco de Dados

Codigo para criar arquivo de log

ListDir - Um listador de diretórios

Cadastro de clientes

MyBank


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário