Criptografando Shell Script

Publicado por Carlos A. P. Cunha em 20/01/2014

[ Hits: 21.394 ]

 


Criptografando Shell Script



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.

Outras dicas deste autor

Validando se seu certificado SSL/TLS (CRT ou PEM) e a Chave (.key) vão dar OK (match)

Java Oracle + Plugin Firefox no Antergos (Arch Linux)

Configurando Firefox em Português do Brasil no Sabayon

Alterando Software Padrão de Torrent (magnet) do Firefox/Google Chrome

Samba4 Erro no Bind(Named) zone XXX.in-addr.arpa/NONE: has no NS records [RESOLVIDO]

Leitura recomendada

Instalando apt-get no METASYS Class Mate PC

NumLock na inicialização

Instalando o R e Rstudio no Ubuntu

Configurando Cisco + NAT para LP Telefônica

Habilitando mais de 4 placas multi-seriais em kernel 2.6.13 ou superior

  

Comentários
[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.


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

Abraço


[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. ;)

De todo modo, uma ótima dica.

[4] Comentário enviado por ricardoolonca em 26/11/2014 - 10:54h

O SUID não tem efeito sobre um script Bash. Mas se esse script for compilado você poderá setar o SUID para ele.

[5] Comentário enviado por ricardoolonca em 26/11/2014 - 11:15h

Testei o uso do SUID e não funcionou.

[6] Comentário enviado por Carlos_Cunha em 25/12/2014 - 23:07h


[4] Comentário enviado por ricardoolonca em 26/11/2014 - 10:54h:

O SUID não tem efeito sobre um script Bash. Mas se esse script for compilado você poderá setar o SUID para ele.


Acredito que tenha sim, pois e para isso que server, para arquivos executáveis...

[7] Comentário enviado por Carlos_Cunha em 25/12/2014 - 23:07h


[5] Comentário enviado por ricardoolonca em 26/11/2014 - 11:15h:

Testei o uso do SUID e não funcionou.


Post ai as linhas do seu teste(setando SUID, depois como ficou e o teste)

[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).



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts