Pular para o conteúdo

Criptografando Shell Script

Dica publicada em Linux / Introdução
Carlos APC Carlos_Cunha
Hits: 22.983 Categoria: Linux Subcategoria: Introdução
  • Indicar
  • Impressora
  • Denunciar

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.

Apache + PHP no Antergos (Arch Linux)

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

Ativando USB no VirtualBox 4.3

Adicionar IP Secundário no CentOS 7

Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil

Tutoriais sobre o OpenSUSE

Busque suas dúvidas no VOL e ganhe tempo

Como migrar da plataforma Windows para Linux Oracle RAC

Instalando e configurando o KDE 4.2 no Slackware 12.2

Como descobrir a versão (ou release) do seu Ubuntu Linux

#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

Entre na sua conta para comentar.