Este artigo irá ajudá-lo a criar um arquivo binário do seu Shell Scripting, para que ninguém possa ver o código-fonte do seu script e podemos usá-lo como um comando. Para criar um arquivo binário a partir de um script, usamos o compilador SHC
shc , um compilador de Shell Script, produz o código-fonte em C. O código fonte gerado é então compilado e vinculado para produzir um executável binário separado.
O binário compilado continuará a ser dependente do shell especificado na primeira linha do código de shell (ou seja, shebang) (ou seja, #!/bin/sh
), portanto shc não cria binários completamente independentes.
O próprio shc não é um compilador como o gcc, ele codifica e criptografa um script em shell e gera o código-fonte em C com o recurso de expiração adicionado. Em seguida, ele usa o compilador do sistema para compilar um binário separado que se comporta exatamente como o script original. Após a execução, o binário compilado irá descriptografar e executar o código com a opção shell -c
.
No Gentoo e similares, use o portage que o shc já está disponível na árvore:
emerge dev-util/shc
Para outras distribuições, exemplo derivadas do APT , instale primeiro as dependências necessárias:
sudo apt-get install libc6-dev # Debian, Ubuntu, Mint, ...
sudo yum install glibc-devel # RHEL, CentOS, Fedora, ...
Depois baixe o pacote, decompacte e compile o código:
wget https://github.com/neurobin/shc/archive/release.zip
cd shc-*
make
sudo make install
Crie um arquivo teste pra ver como funciona: vim script.sh
#!/bin/bash
echo -e "Os 3 primeiros caracteres de cada arquivo/diretório de local, são:\n"
for i in *; do
echo "$i" | cut -c 1-3 | tr '\n' '\ '
done
echo
Depois use o shc para transformar em binário:
shc -f script.sh -o binario
E apenas rode o programa: ./binario
Se você tentar ver o conteúdo do arquivo binario , verá tudo codificado, exemplo:
cat binario
...
@x@�@�@�@�@�@�@�@�@�@�H�H��/H��t��H���5�/�%�/@�%�
�@����%�/h
�0����%�/h
�����%r/h�����%j/h������%b/h
...
Para mais informações e opções via linha de comando, utilize a ajuda e o manual:
shc --help
man shc
https://neurobin.org/projects/softwares/unix/shc/
Ficou alguma dúvida ? Comente!