UnrealPak功能介紹(包含打包簽名加密)

版本:4.17

轉載請註明出處:zhuanlan.zhihu.com/p/34

點贊是我最大的動力~

[EngineDIR]EngineSourceProgramsUnrealPakPrivateUnrealPak.cpp有UnrealPak的入口函數,詳細邏輯查看UnrealPak.cpp文件源碼。

無參數時提示

("No pak file name specified. Usage:");(" UnrealPak <PakFilename> -Test");(" UnrealPak <PakFilename> -List");(" UnrealPak <PakFilename> <GameUProjectName> <GameFolderName> -ExportDependencies=<OutputFileBase> -NoAssetRegistryCache -ForceDependsGathering");(" UnrealPak <PakFilename> -Extract <ExtractDir>");(" UnrealPak <PakFilename> -Create=<ResponseFile> [Options]");(" UnrealPak <PakFilename> -Dest=<MountPoint>");(" UnrealPak GenerateKeys=<KeyFilename>");(" UnrealPak GeneratePrimeTable=<KeyFilename> [-TableMax=<N>]");(" UnrealPak <PakFilename1> <PakFilename2> -diff");(" UnrealPak -TestEncryption");(" Options:");(" -blocksize=<BlockSize>");(" -bitwindow=<BitWindow>");(" -compress");(" -encrypt");(" -order=<OrderingFile>");(" -diff (requires 2 filenames first)");(" -enginedir (specify engine dir for when using ini encryption configs)");(" -projectdir (specify project dir for when using ini encryption configs)");(" -encryptionini (specify ini base name to gather encryption settings from)");(" -encryptindex (encrypt the pak file index, making it unusable in unrealpak without supplying the key)");

普通打包

示例:(由Project Launcher打包日誌中複製而來)

CommandUtils.Run: Run: <引擎路徑>EngineBinariesWin64UnrealPak.exe <項目路徑>SavedStagedBuildsWindowsNoEditor<項目名>ContentPaks<Pak文件名>-create=<引擎路徑>EngineProgramsAutomationToolSavedLogs<PakList_<Pak文件名>.txt>-enginedir="<引擎路徑>" -projectdir="<項目路徑>" -platform=Windows -abslog="<引擎路徑>EngineProgramsAutomationToolSavedLogs<PakLog_<Pak文件名>.log>" -order=<項目路徑>BuildWindowsNoEditorFileOpenOrderCookerOpenOrder.log -UTF8Output -tempfiles=<引擎路徑>TempFiles -multiprocess -patchpaddingalign=2048

說明:

1.<PakFilename> -Create=<ResponseFile>

該選項代表生成Pak文件,後面指明PakList文件,包含了要打包的資源文件列表,由Cook,Chunk生成,內容示例如下:

2.-enginedir="<引擎路徑>" -projectdir="<項目路徑>" -platform=Windows

與查找密鑰有關

3.-abslog=

指定打包日誌文件路徑

4.-order=

Cooker烘焙時的順序文件

5.-UTF8Output

UTF8輸出

6.-tempfiles=

烘焙文件臨時存儲

7.-multiprocess

多線程

8.-patchpaddingalign=

數據塊對齊

其他功能

1.-generatepatch=

打Patch包時會添加的參數,後面指定要比較的Release文件

2.-compress

壓縮資源文件,勾選compress content會添加

3.<PakFilename> -Test

測試Pak文件能否打開(測試了是否加密)

4.-TestEncryption

測試簽名效率

Pak包簽名和加密

無論是生成或者解壓Pak包,都可以有以下中指定密鑰的選項,代碼在最一開始就通過以下命令行解析密鑰

簽名:(最終會生成Pak文件同名的.sig簽名文件,如果的缺失.sig文件,程序無法運行,簽名不影響Pak包解壓)

1.GeneratePrimeTable=<KeyFilename> [-TableMax=<N>]

生成素數表到指定文件中,[-TableMax=<N>]用於指定最大數,默認為10000。

生成的素數後續用到。

2.GenerateKeys=<KeyFilename> P=0x<素數1> Q=0x<素數2> [-NoVerifyPrimes]

指定兩個素數生成公私密鑰,-NoVerifyPrimes可有可無,如果有將檢查PQ是否為素數,可能花費時間。

如果不加-NoVerifyPrimes且PQ有一個不是素數,則會隨機選擇兩個素數再生成公私密鑰,花費時間比較長。

生成的公私密鑰後續用到。

3.-encryptionini -enginedir="<引擎路徑>" -projectdir="<項目路徑>" -platform=Windows

配合使用,為Pak包RSA簽名,在<項目路徑>ConfigDefaultEncryption.ini文件中查找RSA簽名的密鑰,如果沒有找到簽名的公私密鑰,那麼生成PAK包時不會被簽名。

4.-sign=0x<私鑰指數>+0x<私鑰底數>+0x<公鑰指數>

直接在命令行指定公私密鑰進行簽名。

5.-sign=<KeyFileName>

從KeyFileName中讀取公私密鑰。

加密:(不會生成Pak文件同名的.sig簽名文件,Pak包需要提供AES密鑰才能解壓)

1.-encryptindex -encryptionini -enginedir="<引擎路徑>" -projectdir="<項目路徑>" -platform=Windows

配合使用,AES加密文件索引,在<項目路徑>ConfigDefaultEncryption.ini文件中查找AES的密鑰,如果沒有找到則不會加密,AES密鑰長度至少32個字元(256位),否則報錯。

2.-encryptindex

該選項可以在Project Setting -> Packaging - > Encrypt the pak index....配置

3.-encryptionini

該選項可以在Project Setting -> Packaging - > Encrypt ini files inside pak files配置,添加該選項將會單獨加密ini文件,如果沒有加密使用-encryptindex選項,但使用了該選項,則提供AES密鑰解壓時,Pak包其他文件可以被解壓,但ini文件無法解壓。

4.-encrypt

該選項應該需要手動指定(未在界面設置中找到),使用該選項將加密Pak包指定文件。

5.-aes=<密鑰>

直接在命令行指定密鑰進行加密。

DefaultEncryption.ini文件示例

Pak包解壓

沒有加密Pak包解壓

<Pak文件路徑> -Extract <解壓路徑>

加密過的Pak包解壓(和簽名無關,不需要公私密鑰和.sig文件)

在<PakFileName> -Extract <ExtractDir>後面添加指定密鑰的命令如:

1. -encryptindex -encryptionini -enginedir="<引擎路徑>" -projectdir="<項目路徑>" -platform=Windows

2. -aes=<密鑰>

也可選擇在encryptionini文件填好。

對於上述命令一些單獨的功能建議可以寫成批處理文件。

生成公私密鑰


4.19更新

集成到了項目設置中,功能和之前的沒有太大變化,上面描述的基本囊括了這裡能設置的。

第一部分為256位AES加密設置,點擊按鈕即可自動生成一個256位的密鑰。

後面的選項依次是:

  1. 加密Pak中的ini文件
  2. 加密Pak中的文件序列
  3. 加密Pak中的UAsset文件
  4. 加密Pak中所有文件

第二部分是RSA簽名,點擊按鈕即可生成公鑰私鑰的底數和指數,選項為是否開啟打包簽名。

進行操作後Config目錄下生成DefaultCrypto.ini文件

轉載請註明出處:zhuanlan.zhihu.com/p/34

點贊是我最大的動力~

推薦閱讀:

TAG:虛幻4遊戲引擎 | 遊戲開發 | 遊戲編程 |