看雪论坛作者ID:kbb
准备工作:
3、知识:需要对c++虚表有一定的了解,UE4dump和ProtoDump需要既然是网络层分析,那么第一步肯定是抓包分析一下。逆向基础的wirashark,charles这些就不做介绍了。
protoc --decode_raw < 二级制文件 //可以直接解析proto协议首先我们是要对游戏网络交互进行分析,那么需要对UE4虚幻引擎有一定的了解。
通过查阅相关资料得知虚幻引擎是通过'UNetDriver'进行网络交互的,而'UNetDriver'是在'UWorld'下,那么我们就需要对游戏先进行sdk dump拿到实例化对象。
然后拿到UNetDriver后,可以在ida里面跟到相应的网络流程,加密等。
那么ue4dump是怎么做的呢?首先安卓平台有一个开源的ue4dumper,我们可以参阅一下:UE4Dumper。核心原理就是找到GNamesArray,GObjectsArray,GWorld这三个内存位置,然后进行遍历读取。现有的资料基本都是基于ue4.23版本的,4.25有一点改动:关于GWrold的寻找,论坛已经又相关帖子了,不再说明,主要说一下自己摸索的剩下两个关键字的寻找。FNamePool
我们首先在源码里找到FNamePool的初始化函数,在附近看看有没有相关关键字可以定位的。/UnrealEngine/Engine/Source/Runtime/Core/Private/UObject/UnrealNames.cpp
FNamePool::FNamePool();
也就是说,我们在hopper中找到字符串并查找相关引用,就可以得到FNamePool:这里解释一下, 在C++面向对象中,一般的X0就是this指针,那么这个函数调用了我们的FNamePool::FNamePool(),传入的x0对象就是fnamepool的地址,也就是:0x1065c2000+0x1c0 = 0x1065c21c0剩下TUObjectArray基本也一样。然后自己改一改UE4Dumper就可以拿到完整的sdk了:验证想法
后续补充,包括怎么寻找切入点,算法还原,,包括怎么样dump出proto文件等,一时半会写不完。看雪ID:kbb
https://bbs.pediy.com/user-home-585132.htm
*本文由看雪论坛 kbb 原创,转载请注明来自看雪社区点击下方“阅读全文”了解更多
文章来源: http://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458418348&idx=1&sn=b4c8f8df947179b93ea406c029f1fefc&chksm=b18f4c2686f8c53076349f7668c1f628c2b27c1dae331608e7fac1dddc58c0649e0cdab11787#rd
如有侵权请联系:admin#unsafe.sh