Compilation avec une clé de cryptage des scripts

La boîte de dialogue d'exportation vous donne la possibilité de crypter vos scripts avec une clé AES 256 bits, lors de la livraison de votre projet. Cela garantira que vos scripts ne sont pas stockés en texte brut et ne peuvent pas être facilement extraits par certains script kiddie.

Bien sûr, la clé doit être stockée dans le binaire, mais si elle est compilée, optimisée et sans symboles, il faudrait un certain effort pour la trouver.

Pour que cela fonctionne, vous devez créer les modèles d'exportation à partir des sources, avec cette même clé.

Avertissement

Cela ne fonctionnera pas si vous utilisez des modèles d'export précompilés, officiels. Il est absolument nécessaire de compiler vos propres modèles d'export pour utiliser le chiffrement PCK.

Pas à pas

  1. Generate a 256-bit AES key in hexadecimal format. You can use the aes-256-cbc variant from this service.

    Alternatively, you can generate it yourself using OpenSSL command-line tools:

    openssl rand -hex 32 > godot.gdkey
    

    La sortie dans godot.gdkey devrait être similaire à :

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

    Vous pouvez générer la clé sans rediriger la sortie vers un fichier, mais de cette façon, vous pouvez minimiser le risque d'exposer la clé.

  2. Définissez cette clé comme variable d'environnement dans la console que vous utiliserez pour compiler Godot, comme ceci :

    export SCRIPT_AES256_ENCRYPTION_KEY="your_generated_key"
    
  3. Compilez les modèles d'exportation Godot et définissez-les en tant que modèles d'exportation personnalisés dans les options d'exportation prédéfinies.

  4. Set the encryption key in the Script tab of the export preset:

    ../../_images/script_encryption_key.png
  5. Exporter le projet. Le jeu devrait maintenant fonctionner avec des scripts cryptés.

Dépannage

Si vous obtenez une erreur comme ci-dessous, cela veut dire que cette clé n'a pas été proprement inclue dans votre compilation de Godot. Godot crypte les scripts durant l'exportation, mais ne peut pas les lire lors de l'exécution.

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