众所周知
-
UE的游戏构建时会用 AES 密钥对资源文件进行加密,生成加密的 pak/数据包。
-
游戏运行时拿到内置的 AES key,在内存中解密后使用资源。
但AES是对称加密算法 , 因此如果密钥直接打包在客户端,攻击者能直接提取并解密资源
虽然提高了攻击成本,但不能完全阻止有心人
我们有时可以借助像AES_Finder等工具 快速定位 , 但有的游戏不一定都能通过工具找到 , 那就需要手动定位
世界上没有绝对安全的系统 只要是人做的东西 必定会有漏洞
凡是有加密那必然就有解密 有解密那必然能定位到关键解密函数
首先 , 从UE源码中定位到相关函数 DecryptData
在这上面有一个GetPakEncryptionKey 获取秘钥
转到该函数定义 发现有字符串 直接可以通过字符串定位到此处
Failed to find requested encryption key %s
IDA静态分析后 到Debug动态调试 动静结合,天下无敌!
跳转到R8的内存地址 就获取到AES秘钥了
第二种方法
搜索EncryptedIndex
PakFile_HashPrimaryIndex
第二个Call 断点 进去后就能找到AES秘钥
参考链接: