找回密码
 立即注册
查看: 304|回复: 0

UnrealPak功能介绍

[复制链接]
发表于 2022-8-1 19:36 | 显示全部楼层 |阅读模式
[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打包日志中复制而来)


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生成,内容示例如下:


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=<密钥>
直接在命令行指定密钥进行加密。



DefaultEncryption.ini文件示例

Pak包解压
没有加密Pak包解压
<Pak文件路径> -Extract <解压路径>
加密过的Pak包解压(和签名无关,不需要公私密钥和.sig文件)
在<PakFileName> -Extract <ExtractDir>后面添加指定密钥的命令如:
1. -encryptindex -encryptionini -enginedir="<引擎路径>" -projectdir="<项目路径>" -platform=Windows
2. -aes=<密钥>
也可选择在encryptionini文件填好。

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



生成公私密钥

<hr/>4.19更新


集成到了项目设置中,功能和之前的没有太大变化,上面描述的基本囊括了这里能设置的。
第一部分为256位AES加密设置,点击按钮即可自动生成一个256位的密钥。
后面的选项依次是:

  • 加密Pak中的ini文件
  • 加密Pak中的文件序列
  • 加密Pak中的UAsset文件
  • 加密Pak中所有文件
第二部分是RSA签名,点击按钮即可生成公钥私钥的底数和指数,选项为是否开启打包签名。
进行操作后Config目录下生成DefaultCrypto.ini文件


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-15 12:54 , Processed in 0.121590 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表