Como posso criptografar ou tornar meu script de shell ilegível?


9

Como criptografar ou embaralhar meu script de shell para que fique ilegível a olho nu? Qualquer um dos métodos seria aceitável, forneça etapas específicas.


Na minha opinião, o shc tem algumas falhas: tenho um projeto em andamento no github (obash) onde tento abordar essas questões. Você pode gostar de ver se combina melhor com você do que com shc.
9137 louvel600

Respostas:


11

SHC

Você pode tentar as etapas descritas neste site, intituladas: Como criptografar o script Bash Shell no Linux usando SHC . Este artigo discute o uso de uma ferramenta chamada SHC - Shell script Compiler .

Recursos de URL

Este é um executável que você precisará criar usando o gcc / g ++.

Uso

$ ./shc -f random.sh

Depois de executá-lo, seu script de shell random.shserá convertido neste arquivo:

-rwx-wx--x. 1 ramesh ramesh 11752 Mar 27 01:12 random.sh.x

Isso é infalível?

Não, existe uma boa análise do método usado pela ferramenta SHC, que mostra que ela não é excessivamente forte e pode ser contornada se você souber o que está fazendo. O artigo foi publicado no site linuxjournal.com, intitulado: Paranoid Penguin - Limitações do shc, um utilitário de criptografia de shell .

NOTA: Essas classes de ferramentas provavelmente são melhor descritas como ofuscadores.


@ Sim Obrigado. Existe alguma maneira de descriptografar esse script ???
Ram

@ Ram - sim, isso não é de forma alguma infalível. O que você está tentando esconder? Informações de usuário / senha ou apenas como o script funciona?
slm

@ sim estou tentando esconder como o script funciona?
Ram

@ Ram - OK, provavelmente é bom para isso, eu não o recomendaria por tentar ocultar senhas. Quando tentei este aplicativo, ele estava se comportando um pouco estranho no meu computador. Eu tentava, mas os executáveis ​​resultantes estavam sendo lançados como se fossem em segundo plano, e eu tive que executar o comando fgpara trazê-lo para o forground e, em seguida, funcionou bem. Eu ainda estou procurando alternativas.
slm

9
Apesar do nome, o SHC não criptografa o script de maneira significativa. A criptografia implica que ela é descriptografada antes do uso. Se o script puder ser executado, ele deverá ser decriptografado primeiro e poderá ser extraído nesse ponto. Transformar um programa para dificultar a compreensão sem alterar seu comportamento é chamado ofuscação. É muito, muito, raramente vale a pena, e para um script de shell, é uma superestimação grosseira de sua utilidade.
Gilles 'SO- stop be evil' 'em

29

Se você deseja criptografar um script de shell, use GPG . Quem quiser executar seu script, é claro, precisará decifrá-lo primeiro.

Se você deseja que alguém seja capaz de executar o script, mas não o leia, é um problema completamente diferente que não tem nada a ver com criptografia. Isso se chama ofuscação .

Se você tiver uma senha ou outras informações confidenciais nesse script, nenhuma ofuscação ocultará. Mais cedo ou mais tarde, o script usará a senha para fazer algo e, nesse momento, a senha aparecerá claramente para quem a procurar.

Se você deseja ocultar o funcionamento do seu script porque tem medo de que alguém o copie, esqueça. Ninguém se importa.

Se você deseja ocultar seu script porque tem vergonha de sua qualidade, corrija-o.

Se você deseja ocultar como o script funciona, porque deseja ocultar o que ele faz, não é possível. Alguém pode olhar para o seu script enquanto ele é executado e observar o que está fazendo.

Se você leu até aqui e ainda deseja "criptografar" seu script, está entendendo mal algo importante. Não envie seu script para ninguém, nem envie em texto sem formatação.


4
+1 para 'ninguém liga'. Só que alguns afazeres cuidado - eu iria dar uma olhada em um script shell ofuscado e pensar "nenhuma maneira no inferno que eu vou correr esse no meu sistema".
cas

1
Desculpe, as pessoas se importam e é importante. Você tem uma perspectiva e existe uma perspectiva alternativa. Ambos terão compradores. Enquanto isso, a resposta abaixo funciona bem para mim, para começar. Na maioria das vezes, queremos proteger contra hackers / usuários casuais. Entenda bem que determinados hackers vão quebrar tudo.
precisa

@anil Você está apenas protegendo contra pessoas que não seriam inteligentes ou competentes o suficiente para fazer qualquer coisa com o código-fonte. Pode fazer você se sentir melhor, mas não o faz mais seguro.
Gilles 'SO- stop be evil'

@ Gilles talvez eu tenha lido errado. Na verdade, estou tentando me proteger contra pessoas que são competentes para fazer algo com o código-fonte, caso o tenham (código-fonte = conteúdo do script). Somente essas pessoas podem não saber como invadir um arquivo criptografado sem ter muitos problemas para descobrir como. Contra os realmente determinados - concordo que não existem defesas realmente boas.
anil

11

Entendi isso enquanto pesquisava na Internet, cortesia de Claudio P.

  1. Escreva seu script (script-base.sh)

    #!/bin/sh 
    echo "Hello World" 
    
  2. Criptografe seu script (forneça uma senha):

    openssl enc -e -aes-256-cbc -a -in script-base.sh > script-enc 
  3. Escreva o Wrapper (script-final.sh):

    #!/bin/sh 
    openssl enc -d -aes-256-cbc -a -in script-enc | sh - 
    
  4. Execute "script-final.sh", digite a senha e o script será executado sem gravar o script de texto sem formatação no disco.


1

Basicamente, você pode ofuscar, mas não compilar seu script. A razão simples é que os scripts de shell são interpretados comandos individuais que precisam ser executados um a um pelo sistema, e que você pode ver esses comandos como eles são executados um a um pelo sistema com o sh -xsinalizador (e talvez também o comando -v bandeira)

Para a maioria dos programadores, isso será suficiente para entender o que está acontecendo.

Você pode ofuscar suas variáveis ​​e fluxo geral, se desejar, mas não pode ofuscar os comandos individuais executados pelo seu programa - que para scripts shell geralmente são todos eles.

A solução mais simples é provavelmente reescrever o script de shell em uma linguagem compilada como C.


1
Mesmo um binário compilado pode ser desmontado e com engenharia reversa, se um for determinado o suficiente.
Joseph R.

3
Tudo executável pode ter engenharia reversa. A exigência aqui foi ele deve ser ilegíveis a olho nu
Thorbjørn Ravn Andersen

Eu sei. Só estou deixando um recado para futuros leitores.
11743 Joseph R.

-2

tente enviar seu script para este site se desejar ocultá-lo da exibição pública.

Enquanto muitos podem discordar da idéia de criptografar ou ofuscar o código fonte de um script escrito em um idioma interpretado, entendo por que as pessoas querem fazer isso.

como alguém que teve seu trabalho roubado muitas vezes, simplesmente não me importo se "ofuscação" ou "criptografia" é um tabu. Contanto que meu script esteja protegido e funcione como antes da criptografia, eu tenho bastante conteúdo. nunca mais permitirei que outra pessoa pegue minhas idéias e continue com elas. e não, escrever meu script em uma linguagem compilada não é uma opção. Eu não sei como.

de qualquer forma, se você não quiser usar o site mencionado acima, tente a versão mais recente do shc. Acredito que eles o tenham atualizado no github para resolver as muitas preocupações de segurança que outros mencionaram. digite o seguinte no google " shc github " e você verá várias opções disponíveis que poderá experimentar.

boa sorte!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.