SHC - Compilador de Shell Script
Seguramente que en algún momento de tu trabajo informático te hayas encontrado con que te gustaría codificar, ofuscar o incluso encriptar tus scripts de bash.
La solución se llama Shell script Compiler.
En Debian la instalación es muy sencilla:
sudo apt -y install shc
Para otras distribuciones que no dispongan de este programa o si queréis compilarlo vosotros mismos, lo podéis obtener en su git: https://github.com/neurobin/shc
SHC es un compilador de scripts de shell genérico. Procesa el script que se indique en la línea de comando y produce código fuente en C.
Despues ese código fuente generado lo compila y se genera un binario.
El binario compilado seguirá dependiendo de la shell especificada en la primera línea del código de shell, por lo que shc no crea binarios completamente independientes, simplemente codifica y encripta el script.
Otra de sus ventajas es la capacidad de poder indicar una fecha de caducidad al binario generado.
Creación de un Script y Compilación
Vamos a crearnos un script en bash y generaremos su binario.
Además de compilar un fichero, voy a aprovechar para contaros una forma de ordenar un array desde bash y además eliminar los valores duplicados...
Ahora podemos usar este script de varias formas desde la shell:
# Creamos un ARRAY de marcas de coches
COCHES=(ford renault open tesla seat)
# Le pasamos el array completo al script y devuelve valores ordenados
./array-sort.sh ${COCHES[@]}
ford open renault seat tesla
# Guardar el resultado en el mismo arrray 'COCHES'
COCHES=( $(./array-sort.sh ${COCHES[@]}) )
# Tambien funciona pasandole una serie de valores como parametros:
./array-sort.sh 99 3 56 14 2
2 3 14 56 99
# Ordenar valores de un Array y otros valores extra indicados
./array-sort.sh ${COCHES[@]} bmw toyota bmw toyota
bmw ford open renault seat tesla toyota
Compilamos el script
Lo primero que haremos será ver las opciones que nos proporciona shc, para ello escribimos shc -h, para que nos muestre la ayuda.
Muestro solamente algunas de las opciones que se pueden usar:
Para compilar nuestro script de nombre "array-sort.sh" escribiremos:
Ahora vamos a ver como se comportan los dos binarios creados a partir del mismo script:
# Ejecución del Binario obtenido
./array-sort 0 39 32 23
0 23 32 39
# Ejecución del Binario al indicamos que caducó en el 2010
./caducado 0 39 32 23
./caducado: has expired!
Este programa ya no funciona
Como el programa está 'encriptado', no podremos obtener ningún dato del mismo incluso si ejecutamos el comando strings sobre él.
Además, si alguien intentase realizar un dump & trace para obtener alguna traza, el programa se auto protege y aborta la ejecución.