![9d5b76892ea084ad7e7d90a45826be6c.png](https://i-blog.csdnimg.cn/blog_migrate/bb7f120e610a2df4d3e5ffa39b571760.png)
官方的加密在UnrealPak里 它有自己的单独的exe,独立程序(但是它还是依赖引擎的,因为没引擎你打包加密什么资源呢)
![50340a32a5a7de47aac7f68e28cc51df.png](https://i-blog.csdnimg.cn/blog_migrate/70f17bfb99504f371a09c9c24edb6662.jpeg)
![8896c5b79ea2becc874a8ae3165cc937.png](https://i-blog.csdnimg.cn/blog_migrate/e60b67c0d7045f4bde66cc399ae16f0a.jpeg)
如果你单独运行该exe 会报错告诉你没有可打包资源
![be3157cd5a4501226900d675036b8263.png](https://i-blog.csdnimg.cn/blog_migrate/7115f243656c9df55e400e792537f432.png)
在EngineSourceProgramsUnrealPakPrivateUnrealPak.cpp里
![67bcef420c8cf0a97b567137f47bb14e.png](https://i-blog.csdnimg.cn/blog_migrate/b10599e41a2d73898b0f3beb6837e523.jpeg)
![d5f76e35422471b112f5481acafcbf2c.png](https://i-blog.csdnimg.cn/blog_migrate/c70f3e61c2051efe93e76610691cac21.jpeg)
ue4靠用户给定的两个素数(这两个素数一定得是16进制的而且不能相同),计算出私钥公钥和系数。如果你没有给定两个十六进制的素数那么从Primes.inl里随机选中两个。
![08b4686969ff3d6f751be98f5be77231.png](https://i-blog.csdnimg.cn/blog_migrate/32e88cade122b077875fa84194938840.jpeg)
根据给给定的素数进行计算
![b7f163243351361956ed18235130669d.png](https://i-blog.csdnimg.cn/blog_migrate/d8ad1aa10617aded8dd7495827434b4c.jpeg)
![7c794328937381f2730c18e250b5d2bb.png](https://i-blog.csdnimg.cn/blog_migrate/f2f0d8964dc90c333a937e244915f417.jpeg)
![4b2c1a2c0e0708883fb0185ddfc776c6.png](https://i-blog.csdnimg.cn/blog_migrate/fc0be7f76b490068bfc9037d822c5aef.png)
![87e40ff3352342af2356d3955ba7c8f1.png](https://i-blog.csdnimg.cn/blog_migrate/4f82e1d70b1dae6954c6ecbdb24e7a6b.jpeg)
保存到某个文件
![e5b6a33440e0b87e4e15d3fe5a39ee62.png](https://i-blog.csdnimg.cn/blog_migrate/41c0d4467b171badb4b770c012dfa6fe.jpeg)
计算出来秘钥对Pak进行加密还需要配置文件,在打包时候会首先对配置读取如果你的私钥公钥和系数不是通过ue4的加密算法计算出来的那么就会出错
![64df042c4a9b670b6a8aa14fc0622b1f.png](https://i-blog.csdnimg.cn/blog_migrate/3c8defad632a64d26d53e4c144a76ac4.jpeg)
![778467baf8ed53e942a5cf01292343cc.png](https://i-blog.csdnimg.cn/blog_migrate/1c1ba6afde7b36e6c737b144173ea51c.jpeg)
![a5e724d2a0007fd1fbb1371c88d48e07.png](https://i-blog.csdnimg.cn/blog_migrate/67022d7129e2814f0944bc9816a6418c.jpeg)
说完计算通过两个素数计算rsa相关系数但是没有说pak加密的aes 这个aes可以自己设置,并不需要计算,pak在揭秘时会用到aes,aes不能少于32位
![bacc8d3638f4e2850c81a37dfdbf6eea.png](https://i-blog.csdnimg.cn/blog_migrate/4ed20a9dba50910b4f93cddbdf71ac61.jpeg)
![8b4a1f49301bd4837411806699b71438.png](https://i-blog.csdnimg.cn/blog_migrate/458dd4099ece368d5f37f7810230c397.jpeg)
PrepareEncryptionAndSigningKeys函数是对pak加密做前期准备判断是否正确使用加密。
配置文件
config下
![637f26fac95f0a4f4976d1802366cf1d.png](https://i-blog.csdnimg.cn/blog_migrate/fa4a36eaab40cb36c1915c3055731531.jpeg)
![807018d8492dcc56332bc03696807363.png](https://i-blog.csdnimg.cn/blog_migrate/68b823fe8e523eed4aa8bc5af987a59e.jpeg)
这样就可以加密了,在EngineSourceRuntimePakFile模块里 我们可以找到加载pak 揭秘pak等。揭秘我就不说了,大家可以用ue4的模板实验比如加载第三人称模板也是需要pak揭秘挂载的。
这些加密的东西放在那里了呢 在UELinkerFixups.cpp里能找到,在exe启动时会自己从这里查到秘钥
更可怕的是打包的exe里依然能解析出公钥 系数和aes,从而根据ue4生成rsa秘钥的算法依然可以解析出pak,堡垒之夜就无法从exe里看到任何秘钥东西,可见是更改过源码的,所以想加密好点还是改源码吧,在从UELinkerFixups.cpp读取秘钥的那个函数自己再加密一次这才能更安全。加密还是有很多东西用了openssl的算法,具体的细节还是读源码unrealpak为好,毕竟ue4最好的文章就是源码了。