UnrealPak功能介绍

Xsens动作捕捉 2023-04-18 5259

版本:4.17
转载请注明出处:https://zhuanlan.zhihu.com/p/34617967
点赞是我最大的动力~

[EngineDIR]\Engine\Source\Programs\UnrealPak\Private\UnrealPak.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打包日志中复制而来)

UnrealPak功能介绍  第1张
CommandUtils.Run: Run: <引擎路径>\Engine\Binaries\Win64\UnrealPak.exe 

<项目路径>\Saved\StagedBuilds\WindowsNoEditor\<项目名>\Content\Paks\<Pak文件名>

-create=<引擎路径>\Engine\Programs\AutomationTool\Saved\Logs\<PakList_<Pak文件名>.txt>

-enginedir="<引擎路径>"

-projectdir="<项目路径>"

-platform=Windows

-abslog="<引擎路径>\Engine\Programs\AutomationTool\Saved\Logs\<PakLog_<Pak文件名>.log>"

-order=<项目路径>\Build\WindowsNoEditor\FileOpenOrder\CookerOpenOrder.log

-UTF8Output

-tempfiles=<引擎路径>\TempFiles

-multiprocess

-patchpaddingalign=2048

说明:

1.<PakFilename> -Create=<ResponseFile>

该选项代表生成Pak文件,后面指明PakList文件,包含了要打包的资源文件列表,由Cook,Chunk生成,内容示例如下:

UnrealPak功能介绍  第2张

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签名,在<项目路径>\Config\DefaultEncryption.ini文件中查找RSA签名的密钥,如果没有找到签名的公私密钥,那么生成PAK包时不会被签名。

4.-sign=0x<私钥指数>+0x<私钥底数>+0x<公钥指数>

直接在命令行指定公私密钥进行签名。

5.-sign=<KeyFileName>

从KeyFileName中读取公私密钥。


加密:(不会生成Pak文件同名的.sig签名文件,Pak包需要提供AES密钥才能解压)

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

配合使用,AES加密文件索引,在<项目路径>\Config\DefaultEncryption.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=<密钥>

直接在命令行指定密钥进行加密。

UnrealPak功能介绍  第3张
DefaultEncryption.ini文件示例

Pak包解压

没有加密Pak包解压

<Pak文件路径> -Extract <解压路径>

加密过的Pak包解压(和签名无关,不需要公私密钥和.sig文件)

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

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

2. -aes=<密钥>

也可选择在encryptionini文件填好。


对于上述命令一些单独的功能建议可以写成批处理文件。

UnrealPak功能介绍  第4张
生成公私密钥

4.19更新

UnrealPak功能介绍  第5张

集成到了项目设置中,功能和之前的没有太大变化,上面描述的基本囊括了这里能设置的。

第一部分为256位AES加密设置,点击按钮即可自动生成一个256位的密钥。

后面的选项依次是:

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

第二部分是RSA签名,点击按钮即可生成公钥私钥的底数和指数,选项为是否开启打包签名。

进行操作后Config目录下生成DefaultCrypto.ini文件

UnrealPak功能介绍  第6张
转载请注明出处:https://zhuanlan.zhihu.com/p/34617967

点赞是我最大的动力~

The End