uglify compressor compress bash shell obfuscation minify

bash - compressor - uglify



Cómo minimizar/ofuscar un script de bash (7)

Por supuesto, un archivo bash no puede ser realmente confuso y siempre será legible. Y no quiero envolverlos en algún paquete binario. Y el cambio de nombre de las variables locales no valdría la pena.

Pero, ¿existe un simple ofuscador o minificador bash confiable que al menos elimine toda la sangría, todas las líneas vacías y todo el espacio en blanco sin romper nada? ¿Y especialmente los comentarios y partes comentadas del script que pueden contener documentos o información confidencial?

Tendría miedo de las líneas grep / sed simples para hacer esto porque " HEREDOCs " no deben modificarse, por supuesto, por lo que es necesario un poco de análisis real.

Tal vez haya una herramienta para hacer esto, ¡eso sería genial!


: P aqui hay algo gracioso.

digamos que su script se llama origin y el ofuscado se llama obsf .

Aquí está el origin :

#!/bin/sh echo "fooo"

aqui esta obsf

$ echo "echo $(base64 origin)" > obsf $ cat obsf echo IyEvYmluL3NoCmVjaG8gImZvb28iCg== $ chmod +x obsf

Ahora rm origin y ejecute obsf esta manera:

$ sh obsf | base64 -d | sh fooo

je: 3


A pesar de que esta es una vieja pregunta, parece ser popular en Google. También estaba buscando un minifer / ofuscador de bash, y no me gustó el de la respuesta.

Yo tampoco quería agregar gibberish, o compilar el script. Así que escribí uno que hizo lo que quería en Perl y lo puse en GitHub en https://github.com/Aralhach/bashobfus/tree/master
Puede:

  • Aplanar la muesca
  • Eliminar comentarios de línea completa (excepto el hashbang inicial (#!)) Y líneas en blanco
  • Renombra todas las variables en minúscula en declaraciones básicas (para evitar el cambio de nombre de variables como PATH), para bucles, acceso a matrices y declaraciones de ''lectura''.

Puede haber algún caso en el que falle, pero lo probé con un script bash bastante grande, y aparecieron los casos enumerados de sustitución de variables. También deja las variables entre comillas simples ('') solo - esto apareció cuando se imprime un script AWK - pero se reemplaza entre comillas simples ('') cuando la declaración ya está entre comillas dobles (") - esto apareció cuando se imprime un Declaración MySQL .

Esto me hace pensar que he cubierto todos los grandes casos de uso, pero me he equivocado antes. Si encuentra algún error, no dude en informarnos (o corregirlo! D). También estaba pensando en agregar una función para unir líneas cortas en una con ";" pero los casos eran demasiados para analizar al hacer mi fecha límite.

Espero que la gente lo encuentre útil!


Aquí hay una herramienta que creé para la minificación de scripts de bash: https://github.com/precious/bash_minifier : intenta eliminar todos los comentarios y tantos espacios / tabulaciones / nuevas líneas como sea posible. También está disponible como servicio aquí https://bash-minifier.appspot.com/ .

Para minimizar su script bash ejecute este comando:

python minifier.py /path/to/shell/script.sh


Archivo original script.sh :

#!/usr/bin/env bash echo "foo"

Crear other.sh

$ echo ''#!/usr/bin/env bash'' > other.sh $ echo "echo ''$(base64 script.sh)'' | base64 -d | sh" >> other.sh $ chmod +x other.sh

Resultado ( cat other.sh ):

#!/usr/bin/env bash echo ''IyEvdXNyL2Jpbi9lbnYgYmFzaAplY2hvICJmb28iCg=='' | base64 -d | sh

Tratar:

$ ./other.sh foo


Basado en la idea c00kiemon5ter, aquí tienes el script

Sus retorcidas mentes recursivas lo amarán, ya que este no es el guión original, sino el ofuscado (ofuscado (original))

#!/bin/bash # # Usage: # obfuscate scrript.sh > script_obfuscated.sh # PIXIE=$(mktemp) base64 -d >${PIXIE}<<DIXIE IyEvYmluL2Jhc2ggClBJWElFPSQobWt0ZW1wKQpiYXNlNjQgLWQgID4ke1BJWElFfTw8RElYSUUK SXlFdlltbHVMMkpoYzJnS2FXWWdXeUFnTFdZZ0lpUXhJaUJkSUFwMGFHVnVDbU5oZENBOFBGQkpX RWxGSUFvaklTOWlhVzR2WW1GegphQ0FLVUVsWVNVVTlYQ1FvYld0MFpXMXdLUXBpWVhObE5qUWdM V1FnSUQ1Y0pIdFFTVmhKUlgwOFBFUkpXRWxGQ2lRb1ltRnpaVFkwCklDUXhLUXBFU1ZoSlJRcHpi M1Z5WTJVZ1hDUjdVRWxZU1VWOUNuSnRJQzF5WmlCY0pIdFFTVmhKUlgwS1VFbFlTVVVLWlhocGRD QXcKQ21acENtTmhkRHc4VGtWU1JBb2dJQ0IxYzJGblpUb2diMkoxYzJOaGRHVWdjMk55YVhCMENn b2dJQ0JYYVd4c0lHZGxibVZ5WVhSbApJQ0p6WTNKcGNIUXViMkp6YUNJS1RrVlNSQW89CkRJWElF CnNvdXJjZSAke1BJWElFfQpybSAtcmYgJHtQSVhJRX0K DIXIE source ${PIXIE} rm -rf ${PIXIE}


La minificación y la ofuscación de un script de shell son dos cosas diferentes.

Minificación significa reducir el tamaño de un script eliminando todos los caracteres innecesarios del código fuente sin cambiar su funcionalidad. La ofuscación por otra parte significa hacer que el guión sea difícil, si no imposible, de leer.

Minificación:

Para minimizar una secuencia de comandos grande, puede ejecutar el siguiente código contra la secuencia de comandos real que desea reducir:

#!/bin/sh Script=${1} if [ ! -z "${Script}" ] && [ -f ${Script} ] ; then CurrenTime=$(date | sed -e ''s~ ~_~g'' -e ''s~:~~g'') cp ${Script} ${Script}_${CurrenTime} #### Remove all empty lines #### Remove lines that begin with spaces and a comment sign # #### Remove all comment lines (meaning, lines that begin with a "#") awk '' (/.*/ || /#!/) && (!/^#$/) && (!/^#[[:blank:]]/) && (!/^#[a-z]/) && (!/^#[A-Z]/) && (!/^##/) && (!/^/t#/) && (!/^[[:space:]]*$/) && ( /^#.*!/ || !/^[[:space:]]*#/) '' ${Script} | sed ''s_^[[:space:]]*__g'' > ${Script}.tmp 2>/dev/null #'' ${Script} > ${Script}.tmp 2>/dev/null (comment out the above line and uncomment this line if your HEREDOCS are affected) ExitCode=$? if [ ${ExitCode} -eq 0 ] && [ -s ${Script}.tmp ] ; then echo echo "SUCCESS: Your newly [ minified ] script can be found here [ ${Script}.tmp ]." echo "Review the script [ ${Script}.tmp ] and if happy with it, replace your original script with it!" echo "NOTE: Your original script [ ${Script} ] was backed up as [ ${Script}_${CurrenTime} ]!" echo exit 0 else echo echo "FAILURE: Unable to [ minify ] the specified script [ ${Script} ]!!!" echo exit 2 fi else echo echo "USAGE: ${0} <your-script>" echo exit 3 fi

Tenga en cuenta que la minificación tiende a marcar la diferencia solo si el script que se está minando es grande ... con varios cientos o incluso miles de líneas. Pude recortar algunos megabytes de una secuencia de comandos utilizando el código anterior.

Ofuscación:

Una vez que se completa la reducción anterior, puedes detenerte allí mismo si lo que buscas es la reducción de tamaño. Sin embargo, si después de la reducción, también desea ofuscar su script, tiene opciones.

La forma más sencilla de ofuscar su script es mediante el uso de herramientas de cifrado como Openssl.

To encrypt your script using Openssl: 1. cat <your-script> | openssl aes-128-cbc -a -salt -k "specify-a-password" > yourscript.enc OR 2. openssl aes-128-cbc -a-salt -in <path-to-your-script> -k "yourpassword" To decrypt a script using Openssl (notice the ''-d''): 1. cat yourscript.enc | openssl aes-128-cbc -a -d -salt -k "specify-a-password" > yourscript.dec OR 2. openssl aes-128-cbc -a -d -salt -in <path-to-your-script> -k "yourpassword" > yourscript.dec

Encriptación / ofuscación:

  1. Si su objetivo final es hacer que a otros les resulte difícil leer su script, intente pegarlo aquí para que se genere una copia cifrada para usted.
  2. En caso de que cambie de opinión sobre SHC, puede descargar la última versión aquí .