Cómo ofuscar u ocultar código de nuestros scripts Bash

A veces programamos un script en Bash y deseamos que el código de este NO esté visible, o sea, que no sea texto plano. Cuando hablamos de ocultar código el término correcto es ofuscar, en mi caso deseaba ofuscar el código de un script que hice hace algún tiempo, la utilidad que encontré para esto se llama: shc

shc nos permite ofuscar código, aquí les dejo los pasos para poder usarla:

1. Primero debemos descargarla

Descarga SHC v3.8.9

2. Una vez lo hayamos descargado hacemos clic derecho sobre el archivo comprimido y seleccionamos la opción que diga “Extraer aquí” o algo similar. Esto hará que nos aparezca una carpeta llamada shc-3.8.9, aquí les muesto un screenshot de su contenido

3. Bien, supongamos que la carpeta se encuentra en /home/usuario/Descargas/shc-3.8.9 pues abrimos una terminal y vamos a esa ruta (cd “/home/usuario/Descargas/shc-3.8.9″), y aquí empieza la instalación.

 4. En la terminal estando ubicados (como ya les dije) en la carpeta shc-3.8.9, para poder instalar esta aplicación necesitamos hacer un enlace simbólico del archivo shc-3.8.9.c a shc.c por lo que ejecutamos lo siguiente:

ln -s shc-3.8.9.c shc.c

 4. Una vez hecho el enlace ejecutamos make install con permisos de root (usaremos sudo):

 sudo make install

 4. Nos pedirá el password nuestro y se quedará esperando un momento, estará esperando que nosotros presionemos la tecla [Y] y presionemos [Enter], o sea, que le confirmemos que sí deseamos instalar el software. Una vez hecho esto se instalará sin problemas. Les dejo un screenshot de todo el proceso de preparación e instalación:

 

Como pueden ver al final me aparece un error, el error es referente a que no existe una determinada carpeta en mi sistema, si ven esto simplemente no le den importancia… aún así SHC se instaló satisfactoriamente ;)

Para que puedan ejecutar sudo make install es NECESARIO tener instalados los paquetes: gcc y make

5. Listo, esto es todo para la instalación :D

Cuando ya lo tengamos instalado solo falta aprender a usarlo. Supongamos que tenemos un script en nuestro home llamado script.sh y que su contenido es el siguiente:

#!/bin/bash
echo "Script de prueba para DesdeLinux.net"
exit

Al ejecutar este script obviamente nos mostrará en la terminal el mensaje: “Script de prueba para DesdeLinux.net” o no? … pero, ahora vamos a ofuscar ese código.

En una terminal ponemos lo siguiente y presionamos [Enter]:

shc -v -f $HOME/script.sh

Y bingo!! listo :D

Esto nos creó dos nuevos archivos junto a nuestro script, ahora tenemos script.sh.x y script.sh.x.c

script.sh.x -» Este es nuestro script en bash ofuscado, este cuando lo ejecutemos hará exactamente lo mismo que el primero que creamos, la diferencia entre estos es que el primero si lo abríamos con algún editor de texto (nano, kate, gedit, etc) podíamos ver claramente su contenido, mientras que si abrimos a script.sh.x veremos claramente que no vemos nada… LOL!!!, o sea, el código está ‘cifrado’ :)

script.sh.x.c -» Este es nuestro script pero en lenguaje C … podemos borrar este sin preocupación pues no lo necesitamos en realidad, bueno, al menos yo no lo necesitaría para nada :)

No hay mucho más que agregar en realidad en el aspecto técnico, solo aclarar que hasta donde sé con esto (ocultar u ofuscar código de scripts bash) no se está violando licencias o algo así. Aclaro esto porque hace algunos meses en Facebook cuando mencioné que había aprendido a ofuscar código bash, algunos usuarios me alertaban que esto era violar licencias o algo así… en fin, que hasta donde tengo entendido, no se viola licencias con esto ;)

Muchas gracias a Matias Gastón por haberme mencionado esta utilidad tiempo atrás

Nada más que agregar, cualquier duda o pregunta, queja o sugerencia me dejan saber.

Saludos :D


KZKG^Gaara

KZKG^Gaara: Usuario de GNU/Linux y administrador de red desde hace algunos años. Intento mantenerme en el lado oscuro de la fuerza, pues es donde está lo divertido de la vida. Administrador y Fundador de todo esto que ven, pero uno más dentro de la familia.


37 comentarios en “Cómo ofuscar u ocultar código de nuestros scripts Bash

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Current ye@r *

  1. No es que se violen licencias, es que deja de ser software libre…

    1/37
    • Sí obvio. El asunto es que hay ciertos scripts personales míos que no deseo que otros puedan ver, por ejemplo porque un script de estos tiene un password en texto plano de mi MySQL local, o algo similar.

      3/37
      • En realidad mis passwords yo los mantengo ‘ocultos’ mediante SHA (http://blog.desdelinux.net/como-saber-la-suma-md5-o-sha-de-una-palabra-oracion-o-archivo/), luego en el script mantengo el hash del password y lo que hago es comparar el password que introduzca el usuario (lo guardo con read), le saco la suma SHA y comparo ambas al final :)

        Igual muchísimas gracias por el link, ya lo ando revisando :D

        Saludos

        8/37
      • Exacto! Un shell prompt preguntando la contraseña es una buena alternativa.
        Saludos! Pablo.

        20/37
      • Pero no provee una ejecución automática y desatendida como sí lo hace de la otra forma. :)

        30/37
      • IceWeasel 10.0.12Debian GNU/Linux x64
        Willians Vivanco

        Poner las contrasennas y otros datos de acceso o comprometedores en el script es un error de los grandes. Esta informacion se ha de guardar en otro fichero, con sus debidos permisos, y asi no tendras que obfuscar tu bash script. Facil eh?

        7/37
      • El problema de tener los datos (variables de login, confs, etc) en otro archivo es que entonces el ‘sistema’ o ‘aplicación’ necesita para funcionar 2 archivos, mientras que si almaceno de forma lo más ‘segura’ posible todo en un solo archivo, pues solo necesitaría eso… un solo archivo.

        10/37
      • Es buena práctica separar la aplicación de los datos.
        O mejor dicho es una pésima practica hardcodear los datos!
        http://es.wikipedia.org/wiki/Hard_code
        Nada tiene que ver con la seguridad poner el código y los datos en un mismo archivo. Y más aun, todo lo contrario si tienes tus passwords ahi!!

        11/37
      • IceWeasel 10.0.12Debian GNU/Linux x64
        Willians Vivanco

        El costo de leer la informacion delicada de otro archivo es despreciable al lado del costo de procesador necesario para “desobfuscar” tu codigo.

        Por otra parte, estas tirando por tierra todo un paradigma de desarrollo modular, apostando a un modelo monolitico que, mas que probado, son mas los problemas que las soluciones que trae.

        15/37
      • Y además que si usás permisos que forzosamente van a involucrar a otros grupos/usuarios igualmente vas a necesitar un password inicial para ejecutar el primer script.

        31/37
      • @KZKG el comentario de arriba es en respuesta a tu comentario
        @morfeo: es absolutamente relativo a la necesidad particular.

        32/37
    • Pero si hay software libre compilado en binario (que es más que ofuscar). Que sea libre implica que se disponga además del fuente, pero nada tiene que ver con ofuscar (o compilar, que es imprescindible si quiero ejecutar un programa en C, por ejemplo)

      5/37
      • IceWeasel 10.0.12Debian GNU/Linux x64
        Willians Vivanco

        En el caso del software libre compilado, es una cuestion de exigencia del lenguaje que se utiliza (si programas en C, tienes que compilar para que tu aplicacion funcione). E igual, siempre, si de verdad es Software Libre, el codigo fuente estara disponible.

        9/37
  2. Google Chrome 22.0.1229.79GNU/Linux
    Hyuuga_NejiHyuuga_Neji

    humm denoto un cierto grado de apatía a compartir código jejeje a ver cuantos terminan por comenzar a “ofuscar sus códigos” para hacernos mas dependientes de sus soluciones…

    2/37
    • No digo que se deba ofuscar código o no … yo doy las herramientas, cada cual que las use según sus necesidades.

      4/37
      • Firefox 19.0Windows 7Aero
        comentarista

        ¿Ofuscar código en esta página?

        Creo que es un buena idea para alejar lectores, pues considero que muchas de las personas que visitamos éste blog, somos seguidores del software libre, y por ende no compartimos la práctica de ofuscar código.

        17/37
      • Obviamente no leíste la razón que argumenta KZKG y por la cual explica su necesidad de ofuscar su script.

        Gracias KZKG por compartir tu hallazgo!

        33/37
  3. Y así empiezan a circular virus en Linux…

    Personalmente JAMAS utilizaría ningún script ofuscado. No sólo por los riesgos de seguridad que implica, sino porque si tu script te es demasiado precioso para compartirlo entonces mejor metetelo en el *ulo; seguramente puedo encontrar a alguin que sí quiera compartir su conocimiento.

    12/37
    • ¿Jamás usarías un script ofuscado?, pues MUY bien por tí, yo igual JAMAS usaría un script ofuscado… el detalle está en que, yo JAMAS he compartido un script ofuscado ni mucho menos, y ahí querido amigo es donde está la equivocación presente ;)

      Siempre que hago algo en Bash lo comparto sin que me pese ni moleste, cosa que ya he hecho en muchos artículos acá :D

      Bienvenido al blog, un placer leerte ;)

      13/37
  4. Firefox 17.0Ubuntu
    Percaff_TI99

    Gabriel, KZKG^Gaara ya está compartiendo conocimiento, no está creando ningún paquete linux con scripts ofuscados lo cual si podría ser una violación de licencias, solamente pone de manifiesto aplicaciones que a uno le puede servir o no para su propio uso, no es necesario ser grosero, en cuanto a los virus en linux no es tan sencillo, aquí hay un buen articulo al respecto http://blog.desdelinux.net/virus-en-gnulinux-realidad-o-mito/.
    KZKG^Gaara me gustaría que escribieras un post sobre encfs y criptografía utilizando imágenes, es un tema que me gusta mucho.
    Saludos !!!

    14/37
    • Gracias :)
      En realidad no es que tenga suficiente conocimiento sobre encfs y criptografía, al menos no me siento con suficiente seguridad como para hacer un post y asumir las dudas que puedan tener los usuarios :D
      En este tema no es que sea yo un usuario avanzado…
      Lo más que he hecho es usando GPG cifrar archivos, y en cuanto a imágenes lo más que he hecho es ‘meter’ o esconder un archivo dentro de una imagen, logrando que obviamente cuando se abra la imagen con un visor de imágenes se muestre todo correctamente, ¿a esto te refieres?

      Una vez más muchas gracias por tu comentario :)

      22/37
  5. Si mal no recuerdo, existen campeonatos de C ofuscado, pero no vale usar un “ofuscador” sino que tienen que ofuscar sus fuentes a pelo.

    En cuanto a shc y tus script’s con passwords… muy mala manera de trabajar!

    Interesante el artículo, como siempre.

    16/37
  6. Basicamente, si compartís la aplicación sin compartir el script visible estarías violando la GPL, la cual exige que cualquier cosa generada con una aplicación GPL sea GPL. Por eso SHC genera el C, por que ese es el código que podés compartir.

    Saludos

    18/37
  7. Coincido con los comentarios de otros lectores: no sólo no es una buena práctica almacenar datos y script todo junto sino que tampoco favorece el desarrollo de software libre.
    Un fuerte abrazo! Pablo.

    19/37
    • Hola Pablo :)
      Yo tengo algún que otro script ofuscado que funciona internamente en mi laptop, lo ofusco porque simplemente no deseo que si alguien por algún motivo lograse copiar mi script hacia otro ordenador, simplemente no deseo que pueda ver lo que contiene, es una medida de ‘seguridad’ que tomo.

      Sin embargo, acá en DesdeLinux hago público todo o casi todo lo que programo en Bash que pueda resultar interesante.

      En fin, no es que yo ahora por ofuscar un script personal, por hacer esto para propósitos personales yo sea un detractor del SWL ni mucho menos :D

      Saludos amigo

      26/37
  8. Buena información. Al margen de las polémicas que se están generando en los comentarios me parece una información para seguir indagando un poco más.

    Creo que el autor en ningún momento del artículo nos dice si está bien o mal hecho o si debemos o no debemos hacerlo, simplemente nos da a conocer la herramienta con la que se puede realizar en caso de que a alguien le sea de provecho.

    Un saludo.

    codelab

    21/37
    • En los blogs Linuxeros todo es una polémica, jaja siempre ha sido así.

      23/37
      • @F3niX voy a recortar una captura de pantalla con tu comentario para ponerla cada vez que alguien haga alguna mención estúpida al tema.

        Nota: a ver cuándo te encuentro por el irc y foros de Chakra ;)

        34/37
    • EXACTO!!
      Yo simplemente les muestro/enseño/explico algo nuevo que aprendí, es decisión de ustedes usar estos conocimientos o no, yo no los obligo ni mucho menos.

      Hasta donde sé, compartir conocimiento es algo positivo no? 0_oU

      Gracias por tu comentario, es bueno saber que son más de uno o dos los que entienden el verdadero propósito de este artículo.

      25/37
  9. IceWeasel 10.0.12Debian GNU/Linux
    Percaff_TI99

    Hay me pusiste en un apriete xD, hace unas semanas vengo preparando un post que se iba a titular “Instalación y prueba de Crux” y a pesar de que la instalación la realicé con éxito soy un usuario normal y tampoco sé si podré hacer frente a las dudas de terceros, la intención es que sirva como instrumento de discusión sobre las virtudes y defectos de esta distro y las posibles soluciones a problemas que pueden surgir ayudándonos entre todos los usuarios y lectores. Cuando lo termine y lo mande a revisión ustedes (Administradores) decidirán. En cuanto al tema criptografía en imágenes era eso mismo, gracias KZKG^Gaara por contestar.

    Saludos!!!

    27/37
  10. Google Chrome 25.0.1364.160GNU/Linux
    Makubex UchihaMakubex Uchiha

    excelente tuto bro me resulto muy util :3
    para los que quieran instalarlo en manjaro linux y derivados de archlinux el paquete esta en aur con el nombre: shc

    Saludos

    29/37
  11. disculpa amigo tenia un pequeño script que convertia las MAYUSCULAS A minusculas que se tenia en el portapales(xclip)

    el script funciona normal cuando no esta ofuscado

    #!/bin/bash
    xclip -o > R1.txt
    cat R1.txt | tr [:upper:] [:lower:]
    echo “”
    rm R1.txt

    pero cuando quiero correr el script ofuscado
    me dice

    ./M2m.sh: Operation not permitted
    Terminado (killed)

    Ayuda por favore

    35/37
  12. Cabe aclarar que en realidad es un compilador de bash, como existen .bat compiler o .php.
    No se si el codigo que produce esta encriptado y ofuscado y no resiste un decompiler, habria que probar, como no es mi campo no digo que si ni que no, pero lo que veo que hace es compilar un bash, en el .c se puede ver el codigo, que, dentro de lo ofuscado veo que esta en lineas que se parecen a shell de un exploit no se si realmente estan ofuscadas, dado que, no se pide contraseña o un no se, master.config donde se defina una palabra clave previa.

    37/37

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Current ye@r *