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 😀

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 😀

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 😀


44 comentarios

  1.   Xykyz dijo

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

    1.    KZKG^Gaara dijo

      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.

      1.    morfeo dijo

        NO! No guardes tus passwords en scripts!
        http://technosophos.com/content/dont-script-your-password-add-simple-prompts-shell-scripts

        1.    KZKG^Gaara dijo

          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 😀

          Saludos

        2.    Usemos Linux dijo

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

          1.    msx dijo

            Pero no provee una ejecución automática y desatendida como sí lo hace de la otra forma. 🙂

      2.    Willians Vivanco dijo

        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?

        1.    KZKG^Gaara dijo

          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.

          1.    morfeo dijo

            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!!

          2.    Willians Vivanco dijo

            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.

          3.    msx dijo

            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.

          4.    msx dijo

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

    2.    morfeo dijo

      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)

      1.    Willians Vivanco dijo

        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.

  2.   Hyuuga_Neji dijo

    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…

    1.    KZKG^Gaara dijo

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

      1.    comentarista dijo

        ¿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.

        1.    msx dijo

          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!

  3.   Gabriel dijo

    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.

    1.    KZKG^Gaara dijo

      ¿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á 😀

      Bienvenido al blog, un placer leerte 😉

  4.   Percaff_TI99 dijo

    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 !!!

    1.    KZKG^Gaara dijo

      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 😀
      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 🙂

  5.   ratakruel dijo

    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.

    1.    KZKG^Gaara dijo

      Sí, ya más de uno me lo han dicho LOL!!
      Gracias por tu comentario 🙂

  6.   eVeR dijo

    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

  7.   Usemos Linux dijo

    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.

    1.    KZKG^Gaara dijo

      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 😀

      Saludos amigo

  8.   codelab dijo

    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

    1.    F3niX dijo

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

      1.    msx dijo

        @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 😉

    2.    KZKG^Gaara dijo

      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.

  9.   Percaff_TI99 dijo

    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!!!

    1.    KZKG^Gaara dijo

      Vale con gusto, haré un post sobre eso 😉

  10.   Makubex Uchiha dijo

    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

  11.   marcos dijo

    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

    1.    KZKG^Gaara dijo

      ¿Tienes instalado xclip?

  12.   SynFlag dijo

    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.

  13.   juan david dijo

    amigos sucede que cuando ofusco mi script el me crea el nuevo script con terminacion e x, lo ejecuto y hasta hay perfecto. Pero cuando lo llevo a otro equipo con linuz no se ejecuta, ya tiene todos los permisos, creo un lanzador y le digo que es una aplicacion en terminal, pero no funciona, por fa espero pronta respuesta

    1.    KZKG^Gaara dijo

      ¿Lo compilaste y lo estás ejecutando en un sistema con la misma arquitectura? O sea, te dará error si lo compilaste para ofuscarlo en un sistem 32bits, y luego intentas ejecutarlo en un 64bits, o viceversa. ¿entiendes?

      1.    juan david dijo

        No pero ya prove formateando el mismo equipo, con el mismo sistema operativo y no se ejecuta, ni siquiera manda un error.
        lo llame por consola de esta forma : sudo /home/operaciones/script.x y me sale este error

        /home/operaciones/script.x: �e��}8-����q�,�K�

        todo un caso

        1.    KZKG^Gaara dijo

          Intenta ejecutarlo SIN compilar a ver si es algún error en el code

    2.    Nick dijo

      Para que puedas ejecutar el script ofuscado en otros equipos tienes que compilarlo con la opción “-r Relax security. Make a redistributable binary”, de lo contrario, solo se ejecutará en el equipo donde se ofuscó el script con SHC.
      Ejemplo:

      shc -r -f script.sh

  14.   william dijo

    Hola, tengo una consulta, el shc se puede instalar en cualquier tipo de distribución Linux?, por ejemplo red hat, como sería la instalación para éste?
    Gracias!

  15.   ruyzz dijo

    Hola a todos me ha servido bastante vuestros comentarios, pero tengo el siguiente problema, al realizar la ofuscacion no me funciona en un mismo sistema pero de diferente arquitectura, osea si lo hago en 32 bits no puede correr en 64 bits. ¿Alguien sabe si realmente se puede correr en diferentes arquitecturas (32 y 64 bits)?

Deja un comentario

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

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.