スクリプト暗号化キーを使用してコンパイルする

エクスポートダイアログには、ゲームをリリースするときに、256ビットAESキーでスクリプトを暗号化するオプションがあります。これにより、スクリプトがプレーンテキストで保存されず、一部のスクリプトキディが簡単にリッピングできないようになります。もちろん、キーはバイナリに保存する必要がありますが、コンパイルされ、最適化されており、シンボルがなければ、それを見つけるのに多少の努力が必要です。

これが機能するためには、同じキーを使用してソースからエクスポートテンプレートを構築する必要があります。

ステップ・バイ・ステップ

  1. HEXで256ビットAESキーを生成します。this service のaes-256-cbcバリアントを使用できます。

    または、OpenSSLを使用して自分で生成することもできます:

    openssl enc -aes-256-cbc -k secret -P -md sha1 > godot.gdkey
    

    これは godot.gdkey ファイルに以下を出力するはずです:

    salt=5786FE8B91CA048A
    key=D2F90FCC4FCA64B8990F916EF5A73230C1841601D1EA06B2380EC0F530E4EF85
    iv =047C353AEC9E6C211515E3341BF9C61B
    

    出力をファイルにリダイレクトせずにキーを生成できますが、その方法でキーを公開するリスクを最小限に抑えることができます。

  2. 次のように、このキーをGodotのコンパイルに使用するコンソールの環境変数として設定します:

    export SCRIPT_AES256_ENCRYPTION_KEY="your_generated_key"
    
    set SCRIPT_AES256_ENCRYPTION_KEY=your_generated_key
    
  3. Godotエクスポートテンプレートをコンパイルし、エクスポートプリセットオプションでカスタムエクスポートテンプレートとして設定します。

  4. エクスポートプリセットの スクリプト タブで暗号化キーを設定します:

    ../../_images/script_encryption_key.png
  5. プロジェクトをエクスポートします。ゲームは暗号化されたスクリプトで実行されるはずです。

考えられるエラー

以下のようなエラーが表示された場合、キーがGodotビルドに適切に含まれていなかったことを意味します。Godotはエクスポート中にスクリプトを暗号化しますが、実行時にそれらを読み取ることはできません。

ERROR: open_and_parse: Condition ' String::md5(md5.digest) != String::md5(md5d) ' is true. returned: 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