UnrealPak功能介紹(包含打包簽名加密)
版本:4.17
轉載請註明出處:https://zhuanlan.zhihu.com/p/34617967點贊是我最大的動力~
[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=<密鑰>
直接在命令行指定密鑰進行加密。

Pak包解壓
沒有加密Pak包解壓
<Pak文件路徑> -Extract <解壓路徑>
加密過的Pak包解壓(和簽名無關,不需要公私密鑰和.sig文件)
在<PakFileName> -Extract <ExtractDir>後面添加指定密鑰的命令如:
1. -encryptindex -encryptionini -enginedir="<引擎路徑>" -projectdir="<項目路徑>" -platform=Windows
2. -aes=<密鑰>
也可選擇在encryptionini文件填好。
對於上述命令一些單獨的功能建議可以寫成批處理文件。

4.19更新

集成到了項目設置中,功能和之前的沒有太大變化,上面描述的基本囊括了這裡能設置的。
第一部分為256位AES加密設置,點擊按鈕即可自動生成一個256位的密鑰。
後面的選項依次是:
- 加密Pak中的ini文件
- 加密Pak中的文件序列
- 加密Pak中的UAsset文件
- 加密Pak中所有文件
第二部分是RSA簽名,點擊按鈕即可生成公鑰私鑰的底數和指數,選項為是否開啟打包簽名。
進行操作後Config目錄下生成DefaultCrypto.ini文件

轉載請註明出處:https://zhuanlan.zhihu.com/p/34617967
點贊是我最大的動力~
推薦閱讀:
