Compilación con cifrado de scripts por clave

El cuadro de diálogo de exportación te brinda la opción de cifrar tus scripts con una clave AES de 256 bits al lanzar tu proyecto. Esto asegurará que tus scripts no se almacenen en texto plano y no puedan ser fácilmente extraídos por algún script kiddie.

Por supuesto, la clave necesita ser almacenada en el binario, pero si se compila, optimiza y se eliminan los símbolos, requeriría cierto esfuerzo encontrarla.

Para que esto funcione, necesitas compilar las plantillas de exportación desde el código fuente, utilizando la misma clave.

Advertencia

Esto no funcionará si utilizas plantillas de exportación oficiales precompiladas. Es absolutamente necesario compilar tus propias plantillas de exportación para usar el cifrado PCK.

Paso a paso

  1. Genera una clave AES de 256 bits en formato hexadecimal. Puedes utilizar la variante aes-256-cbc de este servicio.

    Alternativamente, puedes generarla tú mismo utilizando las herramientas de línea de comandos de OpenSSL:

    openssl rand -hex 32 > godot.gdkey
    

    La salida en godot.gdkey debería ser similar a:

    # NOTE: Do not use the key below! Generate your own key instead.
    aeb1bc56aaf580cc31784e9c41551e9ed976ecba10d315db591e749f3f64890f
    

    Puedes generar la clave sin redirigir la salida a un archivo, pero de esta manera puedes minimizar el riesgo de exponer la clave.

  2. Establece esta clave como una variable de entorno en la consola que utilizarás para compilar Godot, de la siguiente manera:

    export SCRIPT_AES256_ENCRYPTION_KEY="your_generated_key"
    
  3. Compila las plantillas de exportación de Godot y establécelas como plantillas de exportación personalizadas en las opciones de configuración de la exportación.

  4. Establece la clave de encriptación en la pestaña Script de la configuración de la exportación:

    ../../_images/script_encryption_key.png
  5. Exporta el proyecto. El juego ahora funcionará con scripts cifrados.

Solución De Problemas

Si te encuentras con un error como los de abajo, significa que la clave no ha sido debidamente incluida en la compilación de Godot. Se están cifrando los scripts al exportar, pero no se pueden leer en tiempo de ejecución.

ERROR: open_and_parse: Condition "String::md5(md5.digest) != String::md5(md5d)" is true. Returning: ERR_FILE_CORRUPT
   At: core/io/file_access_encrypted.cpp:103
ERROR: load_byte_code: Condition ' err ' is true. returned: err
   At: modules/gdscript/gdscript.cpp:755
ERROR: load: Condition ' err != OK ' is true. returned: RES()
   At: modules/gdscript/gdscript.cpp:2135
ERROR: Failed loading resource: res://Node2D.gde
   At: core/io/resource_loader.cpp:279
ERROR: poll: res://Node2D.tscn:3 - Parse Error: [ext_resource] referenced nonexistent resource at: res://Node2D.gd
   At: scene/resources/scene_format_text.cpp:439
ERROR: load: Condition ' err != OK ' is true. returned: RES()
   At: core/io/resource_loader.cpp:202
ERROR: Failed loading resource: res://Node2D.tscn
   At: core/io/resource_loader.cpp:279
ERROR: Failed loading scene: res://Node2D.tscn
   At: main/main.cpp:1727
WARNING: cleanup: ObjectDB Instances still exist!
     At: core/object.cpp:2081
ERROR: clear: Resources Still in use at Exit!
   At: core/resource.cpp:425