CRYENGINE V Assetフ ァイルの暗号化

Assetファイルの入ったPAKファイルをEncryptすることで解凍ソフトなどで、開くことができない状態にできます。

Signingすることで解凍ソフトなどで、内容は見ることはでき、内容を変更することができない状態にもできます。

暗号化キーを設定
Guide to releasing EaaS-based projects (3.8.6)
http://docs.cryengine.com/pages/viewpage.action?pageId=21890874

実行環境
CRYENGINE 5.1

/Tools/PakEncrypt/KeyGen.exe実行。
key.dat” と”key.h”を作成する必要がある。
2016-03-19 16_46_03-PakEncrypt

“key.dat”ファイルを紛失した場合、それを使用して暗号化されているすべてのPAKファイルはもう復号化することはできません。


生成されたkey.hファイルを開く。(notepad++とかでいい)
(GameSDKの場合)Code\Game\GameDll\startup\GameStartup.cpp ファイルを開く。
テンプレートのゲームプロジェクト場合も同じファイル)。
2016-06-21 08_24_58-CRYENGINE - Microsoft Visual Studio

GameStartup.cppファイルから次の行を探します。(GameSDKの場合。テンプレートのゲームプロジェクト場合は無し。)
#define USE_RSA_KEY

#define USE_RSA_KEY 1 に設定
GameStartup.cppファイルのキーをkey.hから生成されたキーに書き換え。({}の内容のみ書き換え)
2016-06-21 08_24_58-CRYENGINE - Microsoft Visual Studio_2

テンプレートのゲームプロジェクト場合は、生成されたkey.hファイルをコピペで良いのかな?よくわかりませんが最後の行にkey.hの内容をコピペして、__PUBLICKEY__H__1にしてビルドしてもエラー、警告は出なかったです。

CVARのホワイトリストの設定
/Code/GameSDK/GameDll/GameStartup.cpp
CCVarsWhiteList :: IsWhiteListed


暗号化したいAssetのPAKファイルを作成する

encryptまたSigningを作成するをためにPAKファイルが必要です。PAKファイルを先に作成してください。

Signing サイニング
PAKファイルは、プロジェクトによってロードすることができ、また( zipファイルとして)他のツールで開くこともできます。
“Signing”されたPAKファイルは、内容を変更することができません。(エンジンが、ファイルをロードすることを拒否する。)

encrypt 暗号化
暗号化されたAsset PAKファイルは、プロジェクトによってロードすることができますが、他のツールで開くことができません。
これらは暗号化されている(ただし、エンジンによって実行時に復号化することができる)ので、PAKファイル 内部のAssetには、簡単にアクセスすることはできません。
ただし、100%安全ではなく、メインメモリから暗号化されたデータを読み取る等で、解読出来るようです。

該当の部分
Since the engine can decrypt the encrypted assets at run-time off-line, this is not a 100% secure way to protect your assets if the project is intended to be run off-line.
Consider though, that if at some point an asset is displayed on screen, an attacker can recover the asset data using (for example) a graphics profiler such as RenderDoc or PIX regardless of any encryption, or read the decrypted data from main memory with a debugger.

ファイル名(フォルダ名は除く)は、Signingの一部であるため、SigningまたはencryptされたPAKファイルは、Signing,encrypt後に名前を変更することはできません。

encryptまたSigningのPAKファイルを作成

暗号化PAKファイルを作成
pushd \CRYENGINE_5.1\Tools\PakEncrypt\

暗号化
PakEncrypt.exe “\Assets\Objects.pak” “\Assets\PakEncrypt\Encrypt_Objects.pak”

Signing
PakSign.exe “\Assets\Objects.pak” “\Assets\PakEncrypt\Signing_Objects.pak”

Tools\PakEncrypt\PakEncrypt.exe “PAKファイルフルパス.pak” “暗号化後のPAKファイルのフルパス.pak”


dist/ParseBuild/ParseBuild.exe実行
dist/ParseBuild/ParseBuild.exe “PAKファイルのあるフォルダ へのフルパス” “出力フォルダへのフルパス”

コマンドプロンプトでParseBuildのヘルプファイル作成
ParseBuild.exe -h > ParseBuild.txt

pushd F:\ProgramFile\CRYENGINE_Launcher\Crytek\CRYENGINE_5.1\Tools\PakEncrypt\dist\ParseBuild
ParseBuild.exe encrypt “F:\Users\Blank_Cpp\Assets” “F:\Users\Blank_Cpp\Assets\test”


 

The Menu Bar
http://docs.cryengine.com/display/SDKDOC2/The+Menu+Bar#TheMenuBar-TheFileMenu

Preparing a Level for Playing
http://docs.cryengine.com/display/SDKDOC2/Preparing+a+Level+for+Playing

Release project with .pak encryption
http://www.cryengine.com/community/viewtopic.php?f=291&t=129297

分かりづらい文だとは思いますが公開します。

コメントを残す