Ofuscar código de Python

Fariba Laiq 10 octubre 2023
  1. Use la codificación Base64 para ofuscar el código de Python
  2. Use PyArmor para ofuscar el código de Python
Ofuscar código de Python

La ofuscación de código significa cifrar o convertir el código a un formato que sea difícil de entender para los humanos. Realizamos esta tarea a sabiendas para evitar la ingeniería inversa de un atacante y proteger la propiedad intelectual y los secretos comerciales.

Python ofrece múltiples formas de ofuscar el código.

Use la codificación Base64 para ofuscar el código de Python

El base64 es un módulo en Python que codifica y decodifica datos una vez que los datos se transforman en objetos similares a bytes. Codificar el código de Python puede ser un truco útil para ofuscar el código y evitar que los humanos lo lean y lo entiendan por seguridad.

En el siguiente código, importamos el módulo base64 y codificamos la declaración print('Delftstack') utilizando el método b64encode(). Debemos pasar la cadena en formato UTF-8 al método.

También podemos descifrar el código usando el método b64.decode() pasando el texto codificado a este método. Finalmente, podemos ejecutar el código descifrado utilizando los métodos eval() y compile().

Código de ejemplo:

# Python 3.x
import base64

code = "print('Delftstack')"
print("Code:", code)
encrypted_code = base64.b64encode(code.encode("utf-8"))
print("Obfuscated code:", encrypted_code)
mydecode = base64.b64decode(encrypted_code)
print("Decrypted Code:")
eval(compile(mydecode, "<string>", "exec"))

Producción :

#Python 3.x
Code: print('Delftstack')
Obfuscated code: b'cHJpbnQoJ0RlbGZ0c3RhY2snKQ=='
Decrypted Code:
Delftstack

También podemos importar un archivo .py completo que contenga el código y codificarlo usando la técnica base64 de la siguiente manera. El archivo My_Script.py contiene el código print('hello world').

# Python 3.x
import base64

file = open("My_Script.py")
encrypted_code = base64.b64encode(file.read().encode("utf-8"))
print("Encrypted Code:", encrypted_code)

Producción :

#Python 3.x
Encrypted Code: b'cHJpbnQoJ2hlbGxvIHdvcmxkJyk='

Use PyArmor para ofuscar el código de Python

Los programas de Python también se pueden cifrar con PyArmor. Es una herramienta de línea de comandos que ofusca el código, vincula los scripts ofuscados a máquinas reparadas e incluso puede hacer que caduquen los scripts ofuscados.

Para usar el PyArmor, primero debemos instalarlo usando el siguiente comando.

#Python 3.x
pip install pyarmor

Aquí, ofuscaremos el siguiente código en un archivo llamado MyScript.py. Tenemos que poner el archivo .py dentro de una carpeta aparte.

# Python 3.x
print("Hello World")

El comando pyarmor ofuscate MyFolder/MyScript.py ofuscará el archivo .py anterior. Podemos ver el archivo de salida dentro de la carpeta dist con el mismo nombre de archivo.

Producción :

#Python 3.x
from pytransform import pyarmor_runtime
pyarmor_runtime()
__pyarmor__(__name__, __file__, b'\x50\x59\x41\x52\x4d\x4f\x52\x00\x00\x03\x06\x00\x33\x0d\x0d\x0a\x09\x30\xe0\x02\x00\x00\x00\x00\x01\x00\x00\x00\x40\x00\x00\x00\xc2\x00\x00\x00\x00\x00\x00\x18\x58\xc1\xa9\xb3\xd3\xa5\x4a\x59\xc7\xef\x90\xbd\x03\x26\xa0\x44\x00\x00\x00\x00\x00\x00\x00\x00\x75\x29\x30\x1b\x83\xa8\x1a\x8c\x19\x5d\xf5\xfb\x82\xd2\xde\xf9\x3e\x55\x2a\x65\x05\x6c\xd5\x40\xf1\x45\xaf\x5a\x5e\xce\x5b\x94\xe6\xb5\x2d\xbf\x91\x08\x47\x5a\x41\x2a\x8e\x86\x28\x08\x76\x35\x77\xbf\x3f\x52\x28\x03\xbb\xcf\xd4\xac\xa5\x1e\x8a\x4d\xfe\xc4\x48\x04\xb7\x8f\xfb\x10\xa7\x25\x05\x97\x80\xfa\x74\x96\x4b\x61\x88\x8f\x98\x96\x1e\xa5\x3d\x98\x2e\xe0\x1e\x19\xa2\x15\x94\x8b\xc2\x5c\x2a\x1e\x2c\x6f\x46\x28\x08\x85\x3f\x0d\x8a\xd8\xb5\x9c\xcc\xee\x8e\xff\x6f\x31\xb3\x02\x53\xbd\x88\x4a\x98\x84\x61\xd5\xe9\xea\x66\x75\x69\x1c\xd2\x5d\x47\x5e\x5b\xc8\x2d\x5f\x01\x74\xaa\xf6\x3b\xfc\xd0\x9f\xfd\x9c\x27\x35\x2b\xbe\x41\xa6\xc1\x88\x79\xfc\xb3\xe8\xa7\x65\x19\xed\x8d\x85\xb1\x07\x35\x96\x4d\xea\x32\x71\xba\x63\xb0\x11\xaf\x31\x05\xe9\xa0\xba\xaa\x77\x96\x43\xeb\x4d', 2)
Fariba Laiq avatar Fariba Laiq avatar

I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.

LinkedIn