Não permitir visualização de código no binário

16/03/2005

1

Olá pessoal,

Fiz uma rotina em C para dar o comando do backup do meu banco de dados Oracle. Está funcionando bem, só tem um problema. Se você abrir o executável em um editor de texto, ele mostra parte do código... principalmente a parte composta de strings. E o problema é que uma das partes que ele mostra é minha senha de conexão ao banco!

Esse programa vai ficar no servidor de banco de dados de vários locais, e não podemos correr o risco de que outros vejam nossa senha.

Alguém sabe como eu faria pra compilar o binário de uma forma que criptografasse tudo? Estou usando o gcc no Linux para compilar, mas qualquer forma de criptografar esse binário será bem vinda.

Agradeço


Responder

Posts

16/03/2005

Massuda

Uma solução bem simples seria você criptografar ´na mão´ a senha e incluí-la no programa, que teria apenas a rotina para descriptografar.

A solução preguiçosa seria usar o [url=http://upx.sourceforge.net/]UPX[/url] para compactar seu programa, assim pelo menos para o usuário típico sua senha estará escondida.


Responder

17/03/2005

Moonlight

Usei a solução da criptografia. Alias, prefiro chamar de mascaramento de string. Ficou bem legal. Posto abaixo pro caso de ser útil pra alguem um dia:


#include<stdio.h>
include<stdlib.h>

char linha0[30],linha1[30], linha2[30];
char senhacriptografada[30];
char senhadescriptografada[30];

void descriptografa(char pwdc[20]) {
  int i, j, k;
  int posicao, posicao1;
  char caracter, caracter1;

  for(i=0;pwdc[i]!=´\0´;i++) {
     caracter = pwdc[i];
     
     for(k=0;linha1[k]!=´\0´;k++) {
        if (linha1[k] == caracter) {
  posicao = k;
  break;
}
     }
     
     caracter1 = linha2[posicao];
 
     for(j=0;linha1[j]!=´\0´;j++) {
        if (linha1[j] == caracter1) {
          posicao1 = j;
          break;
        } 
     }
     
    senhadescriptografada[i] = linha0[posicao1];
  }
}



void criptografa(char pwd[20]) {
  int i, j, k;
  int posicao, posicao1;
  char caracter, caracter1;

  for(i=0;pwd[i]!=´\0´;i++) {
     caracter = pwd[i];
     for(k=0;linha0[k]!=´\0´;k++) {
        if (linha0[k] == caracter) {
  posicao = k;
  break;
}
     }
     
     caracter1 = linha1[posicao];
     for(j=0;linha2[j]!=´\0´;j++) {
        if (linha2[j] == caracter1) {
          posicao1 = j;
          break;
        } 
     }
     
    senhacriptografada[i] = linha1[posicao1];
  }
}


No caso, é preciso alimentar as strings linha0, linha1, linha2 com strings que contenham os caracteres da senha e outros caracteres tambem, pra criptografar. Os caracteres da string devem ser os mesmos, mas colocados em ordem diferente, e aparecer só uma vez cada.


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira