Criptografando Shell Script

Publicado por Carlos APC em 20/01/2014

[ Hits: 21.962 ]

 


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

Atualização do Kernel no Ubuntu Server 14.04 LTS

YouTube sem som em vídeo HTML5 no Firefox [Resolvido]

Adicionar IP Secundário no CentOS 7

Guardião Itaú Linux 2014

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

Leitura recomendada

Antico - Um leve Window Manager em QT4 para Linux

Instalador automatizado do mensageiro instantâneo Emesene

Gerenciando processos no Linux

Ubuntu, porque todos estão mudando?

Utilize SD cards no Aspire 5050 (com adaptador ENE Technology Inc) no Ubuntu

  

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