首页
社区
课程
招聘
[原创]虚幻4(ue4)引擎加密pak解包教程(初学者向x64源码逆向)
发表于: 2019-11-19 20:39 19674

[原创]虚幻4(ue4)引擎加密pak解包教程(初学者向x64源码逆向)

2019-11-19 20:39
19674

遇到了喜欢的游戏,想提取壁纸,于是找quickbms等虚幻4引擎解包工具。无奈游戏加密,无法解包。不知密钥情况下,也没在网上找到现成的加密pak解包工具。想到Unreal4已经开源,就尝试着自己找一下密钥,也算是对照源码的x64逆向分析调试。以前接触的OllyDbg都是32位程序,64位稍有不同,这篇教程也算是我的初次接触x64dbg笔记了,包括了我对源码和编译器优化特征的理解,以及如何定位源码和反汇编代码的想法。

本教程仅适用于非魔改版引擎和未加壳源码对照分析,以ue 4.23为例。
注意,此教程仅用于逆向学习分析,请勿用于各种侵权行为。

完全初学者应该也能很容易看明白,欢迎大家讨论交流,如有错误请多指教~
本文内容与我在隔壁发的完全一样。

我用的vscode,搜索关键字decrypt。我们发现FAES:: Key结构,就是加密key,去epic官网查[5]发现是aes256加密。注意游戏版本要与源码版本一致,否则源码有可能修改对不上,还有此处不讨论魔改版ue4和程序加壳等问题。

看见void DecryptData(uint8* InData, uint32 InDataSize, FGuid InEncryptionKeyGuid)函数,右键findallreference找到相关信息,寻找切入点,我们看到文件IPlatformFilePak.cpp文件中void FPakFile::LoadIndex(FArchive* Reader)函数有fatal error的log,这个可以成为我们的关键点(因为是fatal,一般都会保留log,其他的log可能就没有编译到程序中[1])

(为了减少break,在setting中只勾选entry和attach breakpoint,但是不知为什么还是在raiseerror中断?)右键搜索all module,reference string "Corrupted index offset in pak file.",可以定位void FPakFile::LoadIndex(FArchive* Reader)函数了。

这部分最复杂也最麻烦,主要因为编译器的优化将很多函数变成了inline,
函数前面不一定非得有push rbp,mov rbp,rsp这种典型的语句,而且并不一定函数一定会有call,但是多个嵌套一般最多有嵌套个数个call。还有要 记住x64与x86反汇编的不同,基本上都是__fastcall, 前四个参数为rcx,rdx,r8,r9(c++ this指针为rcx [2]),剩下的从右向左push,被调用者清理堆栈 [3]。

我们的目的是定位void DecryptData(uint8* InData, uint32 InDataSize, FGuidInEncryptionKeyGuid)FAES::DecryptData(InData,InDataSize, Key),函数找到KEY这个数据结构。不需要弄清楚加密原理(其实也没什么必要,应该是调用了标准的aes256加密算法),因此对照源码关注Jump类指令即可,一般JGE为if(a<b), JNE为if(!a)。

有时也可以通过观察源码和反汇编看到跳过大段内容来定位。具体本例的切入点:

观察源码bool bFisrtPass=True,同时看x64dbg中的反汇编 mov r12b,1 猜测r12b可能代表了bFisrtPass(编译器优化局部变量不一定调用堆栈,有些直接就用寄存器了)

一直往下拉吧,观察r12b相关的,看见test r12b,r12b 这个就是检查r12b是否为0,因此推断出下一句为if (!bFirstPass),因为jne跳转后直接cmd顺腾摸瓜同时定位了if (Info.bEncryptedIndex)

对照源码DecryptData输入3个参数和反汇编mov edx, lea r8, mov rcx 也是3个参数,因此推测光标处的call即为DecryptData函数。Decrypt条件语句中只有一个call因为GetData直接取值了。

DecryptData函数在反汇编中就比较混乱了,因为出现了大量的inline函数,好多小的跳转,我们先找大的跳转来定位。可以在graph视图下粗鲁看,然后在cpu中标记。



[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2019-11-19 20:56 被devseed编辑 ,原因: 少一张插图
收藏
免费 5
支持
分享
最新回复 (4)
雪    币: 378
活跃值: (159)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢 大佬分析分享
2019-11-20 02:55
0
雪    币: 26205
活跃值: (63302)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
3
感谢分享!
2019-11-20 09:43
0
雪    币: 6890
活跃值: (3171)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
感谢大佬分享自己的分析
2019-11-20 10:19
0
雪    币: 9
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
小白表示看不懂
2023-7-17 16:01
0
游客
登录 | 注册 方可回帖
返回
//