Olá!
Aqui, você verá uma forma simples de "criptografar" um Shell Script que você quer passar a alguém, mas não quer liberar o fonte ou que seja editável por qualquer um.
Básico de criptografia
Bom, um conceito básico sobre criptografia:
Criptografia (do Grego kryptós, "escondido", e gráphein, "escrita") é o estudo dos princípios e técnicas pelas quais a informação pode ser transformada da sua forma original para outra ilegível.
Mais sobre isso:
Criptografia – Wikipédia, a enciclopédia livre
Necessário
Para realizar o procedimento, iremos usar o seguinte:
Acesse:
Francisco Rosales, home page
Faça download do arquivo (estava nessa versão ate o momento)
shc-3.8.9.tgz.
Descompacte o arquivo, entre no diretório de download e execute:
tar -xzvf shc-3.8.9.tgz
Entre no novo diretório com os arquivos e execute:
make test
Logo após:
make
Obs.: em caso de erro, ignore. Para mim deu erro, mas funcionou.
Será criado um arquivo
shc. Se tiver, o arquivo está correto.
Para mais informações o
manpage mesmo, diz:
"shc em si não é um compilador, como cc, antes a codifica e criptografa um Shell Script e gera o código fonte C com a capacidade de expiração adicionada. Em seguida, ele usa o sistema compilador para compilar um binário despojado que se comporta exatamente como o script original. Após a execução, o compilado binário irá descriptografar e executar o código com a opção shell -c. Infelizmente, não lhe dará qualquer velocidade ou melhoria como um programa C verdadeiro faria."
Resumindo, ele pega o fonte do script, gera um arquivo de
C e dele, gera um binário.
Encriptando seu Shell Script
Com isso, a sintaxe é básica:
./shc -f seu_script.sh
Obs.: a única opção obrigatória é o
-f, caso queira, pode colocar o binário
shc criado no seu PATH. Daí, não é necessário o
./ na frente.
Com isso, será criado um arquivo com o mesmo nome, mais
.x:
seu_script.sh.x = binário
E um outro arquivo com o mesmo nome, mais
x.c, com o fonte em
C:
seu_script.sh.x.c = fonte em
C
Outras opções válidas:
- -e :: a data de vencimento no formato dd/mm /aaaaa. Ou seja, validade para que o script seja executado, se passar dessa data, uma mensagem será exiba: "Por favor, contacte o seu fornecedor".
- -m :: mensagem a ser exibida após a expiração. Você informa qual a mensagem que será exibida quando expirar a data (usada no -e).
- -f :: nome do script do arquivo para compilar.
- -v :: verbose.
- -T :: compatibilidade para usar o strace, ptrace, truss, etc.
- -r :: relaxe a segurança. Faça um binário redistribuível que executa em sistemas diferentes executando o mesmo sistema de pacote ( :-D ).
- -h :: ajuda.
Executando
Após criar o binário, você pode executar das seguintes formas:
./seu_script.sh.x
Ou
$
bash -c seu_script.sh.x
Ou ainda, colocar no seu PATH e executar:
seu_script.sh.x
Extra: encriptando arquivo de texto
Dica rápida para criptografar um arquivo de texto, você pode fazer da seguinte forma, usando o
Vim (vi):
Opção:
-x
vim -x senhas_bla.txt
Processo:
- Irá pedir a "palavra passe" duas vezes, digite a mesma;
- Edite o arquivo e saia (não precisa editar, mas é necessário sair SALVANDO);
- Após isso, ele já está "criptografado";
- Se tentar editar com o Vim (vi), será solicitado a senha;
- Se der um cat no arquivo, irá aparecer criptografado.
Conclusão
Era isso pessoal, espero que seja útil!!
Fonte:
Abraço.
Bem, desde que o script 'compilado' contenha o fonte, não vejo quaisquer problemas e ainda pode ser interessante para executar scripts naquele S.O. O que me desanimou foi de fato "...Infelizmente, não lhe dará qualquer velocidade ou melhoria como um programa C verdadeiro faria", eu realmente estava contando com isso, :/
----
Só um adendo: o fato de gerar um executável a partir de um script não significa 'criptografar' o código fonte mas sim um processo de tradução de shell script a linguagem C que posteriormente de máquina. ;)
De todo modo, uma ótima dica.