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.
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.
[2] Comentário enviado por Carlos_Cunha em 21/01/2014 - 16:52h
[1] Comentário enviado por ranzes em 21/01/2014 - 16:45h:
Já conhecia o programa é velhinho.
Mas para mim vai contra a filosofia de opensource. não vejo motivo para compilar um shellscript.
Beleza, eu fui conhece esse ano :-D
Não concordo, uma coisa é quando vc cria/desenvolve algo que será aberto e que pretende que seja usado/continuado, agora como disse no inicio, se for fazer algo para alguém que não seja um software para qualquer um e sim para um unico uso(exemplo script e backup que vc não quer que seja alterado para não "estragar" o mesmo).
Para isso que serve esse processo.
[3] Comentário enviado por DavidsonDFGL em 27/06/2014 - 21:33h
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. ;)
[8] Comentário enviado por ricardoolonca em 26/12/2014 - 13:51h
Fiz um script que usa o comando "id" e "whoami". Em ambos diz que sou um usuário normal, e não root. Estou de férias e não tenho como reproduzir os testes agora.
[9] Comentário enviado por Carlos_Cunha em 10/01/2015 - 19:26h
[8] Comentário enviado por ricardoolonca em 26/12/2014 - 13:51h
Fiz um script que usa o comando "id" e "whoami". Em ambos diz que sou um usuário normal, e não root. Estou de férias e não tenho como reproduzir os testes agora.
Amigo, esta certo, vc não virara o usuário que esta executando por isso seu ID não muda, ele sera executa como se fosse o usuário em questão mas vc não via esse usuário.
[10] Comentário enviado por pbonfanti em 12/06/2018 - 13:48h
Muito bom o artigo, agora mesmo tive de rodar um "script" desses mas não sabia com que ferramenta foi construído.
É desagradável trabalhar em linux com um script "caixa preta" , mas pelo menos fica excluída a possibilidade de me culparem por qualquer efeito colateral, já que não posso alterar nada em sua execuçao (nem saber o que ele executa).