Ofuscar código python con Intensio-Obfuscator

Intensio-Obfuscator es una herramienta, todavía en beta, para ofuscar código fuente en python. Reemplaza el nombre de las variables, clases y funciones por caracteres aleatorios de longitud definida, elimina comentarios, saltos de línea y agrega a cada línea un script aleatorio con valores siempre diferentes. Requiere Python >= 3.5 pero puede ofuscar python 2.x y 3.x.

Instalación

git clone https://github.com/Hnfull/Intensio-Obfuscator.git
cd Intensio-Obfuscator/intensio/

Caraterísticas

Param. Descripción
Replace Cambia todos los nombres de las variables, clases y funciones definidas y elimina los saltos de línea.
Padding Añade scripts aleatorios después de cada línea y elimina todos los saltos de línea.
Remove Borra todos los comentarios y los saltos de línea.
Secret Sólo para curiosos :)
Mixer lower
Genera palabras con 32 caracteres que reemplazan variables, clases y funciones definidas en el código fuente y en scripts aleatorios si se especifican las características 'replace' o 'padding'.
Mixer medium Genera palabras con 64 caracteres que reemplazan variables, clases y funciones definidas en el código fuente y en scripts aleatorios si se especifican las características 'replace' o 'padding'.
Mixer high Genera palabras con 128 caracteres que reemplazan variables, clases y funciones definidas en el código fuente y en scripts aleatorios si se especifican las características 'replace' o 'padding'.

Uso

-h, --help              -> show this help message and exit.
-f, --onefile           -> if only one file.
-d, --multiplefiles     -> if multiple files (project).
-i, --input             -> source file or directory - if multiple files indicate a directory that contain all your files.
-c, --code              -> language used in input file or directory. value: [python]
-o, --output            -> output file or directory that will be obfuscated - if multiple file indicate a empty directory that will contain all your files.
-m, --mixer             -> length level of variables mix output. values: [lower,medium,high]
-r, --replace           -> activate the 'replace' obfuscation feature.
-p, --padding           -> activate the 'padding' obfuscation feature.
-rm, --remove           -> activate the 'remove' obfuscation feature.
-s, --secret            -> activate the 'secret' bullshit feature.

Se pueden excluir variables, clases o funciones para que no sean tratadas por 'replace' editando intensio/exclude_python_words.txt.
Si por el contrario quieres incluir variables, clases o funciones que no están incluidos en la función 'replace', edita intensio/include_python_words.txt.

Es importante no poner los mismos nombres de variables locales, clases o funciones que los de keywords y/o librerías importadas de python.

Ejemplos
  • Múltiples archivos básico: python3.x intensio_obfuscator.py -d -i test/python/multiplefiles/basic/input/basicRAT -c python -o test/python/multiplefiles/basic/output/basicRAT -m lower -r -rm
  • Múltiples archivos avanzado: python3.x intensio_obfuscator.py -d -i test/python/multiplefiles/advanced/input/basicRAT -c python -o test/python/multiplefiles/advanced/output/basicRAT -m high -r -p -rm
  • Si solo se trabaja con un archivo el comando es el mismo que para varios, simplemente no hay que apuntar a un directorio sino a un archivo de Python directamente con los parámetros -i y -o, luego cambiar el parámetro -d por el parámetro -f.
Posibles fallos
  • Si una variable, clase o función tiene un nombre idéntico a una palabra entre '' o "" en una función print(), el texto tendrá el mismo valor que las variables, clases o funciones mezcladas.
  • Si una variable, clase o función tiene un nombre idéntico con una palabra después de # (comentario), el texto tendrá el mismo valor que las variables, clases o funciones mezcladas, pero si está entre """ or ''' sin una variable antes no se realiza ninguna sustitución.
  • Si se nombró una variable, clase o función de la misma manera que alguna palabra clave de python o nombre de función/clase de librerías de python importadas, puede aparecer un error. Hay que editar intensio/excluded_python_words.txt para agregar las variables para no ofuscar o cambiar los nombres.
Proyecto: https://github.com/Hnfull/Intensio-Obfuscator

Comentarios