Array
(
)

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

Moonlight
   - 16 mar 2005

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


Massuda
   - 16 mar 2005

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.


Moonlight
   - 17 mar 2005

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:


#Código

#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.