某火热区块链游戏(mir4)的一次通信协议分析
看雪论坛作者ID: kbb
游戏名:Mir4(传奇4)
准备工作:
1、平台:iOS 14.3越狱环境
2、工具:hopper,ida,frida
3、知识:需要对c++虚表有一定的了解,UE4dump和ProtoDump需要
思路
既 然是网络层分析 , 那么第一步肯定是抓包分析一下 。 逆 向基础的 wirashark,charles 这些就不做介绍了。
这一块就不贴图了 , 抓包分析后得知:
-
网络交互是走的tcp连接;
-
协议是基于protobuf;
-
通信过程加密了,前几个包是明文包,后续加密了,看了一下位数,不像是非对称加密,因为长度不符合,还是需要验证一下。
protoc --d ecode_raw < 二级制文件 //可以直接解析proto协议
切入点寻找
首先我们是要对游戏网络交互进行分析,那么需要对UE4虚幻引擎有一定的了解。
通过查阅相关资料得知虚幻引擎是通过'UNetDriver'进行网络交互的,而'UNetDriver'是在'UWorld'下,那么我们就需要对游戏先进行sdk dump拿到实例化对象。
然后拿到UNetDriver后,可以在ida里面跟到相应的网络流程,加密等。
那么ue4dump是怎么做的呢?首先安卓平台有一个开源的ue4dumper,我们可以参阅一下: UE4Dumper。
核心原理就是找到GNamesArray,GObjectsArray,GWorld这三个内存位置,然后进行遍历读取。
现有的资料基本都是基于ue4.23版本的,4.25有一点改动:
-
GNamesArray > FNamePool
-
GObjectsArray > TUObjectArray
关于GWrold的寻找,论坛已经又相关帖子了,不再说明,主要说一下自己摸索的剩下两个关键字的寻找。
FNamePool
我们首先在源码里找到FNamePool的初始化函数,在附近看看有没有相关关键字可以定位的。
/UnrealEngine/Engine/Source/Runtime/Core/Private/UObject/UnrealNames.cpp
FNamePool::FNamePool();
运气比较好,可以看到有字符串:
也就是说,我们在hopper中找到字符串并查找相关引用,就可以得到FNamePool:
找到函数顶部,按X查找引用:
然后随便找一个进入,看看调用是什么:
这里解释一下, 在C++面向对象中,一般的X0就是this指针,那么这个函数调用了我们的FNamePool::FNamePool(),传入的x0对象就是fnamepool的地址,也就是:0x1065c2000+0x1c0 = 0x1065c21c0
剩下TUObjectArray基本也一样。 然后自己改一改UE4Dumper就可以拿到完整的sdk了:
验证想法
后续补充,包括怎么寻找切入点,算法还原,,包括怎么样dump出proto文件等,一时半会写不完。
dump出的proto文件类似下面:

E N D

看雪ID:kbb
https://bbs.pediy.com/user-home-585132.htm
*本文由看雪论坛 kbb 原创,转载请注明来自看雪社区
往期推荐
2. 内核漏洞学习-HEVD-NullPointerDereference
3. 一个数据加密恶意样本分析
5. office 分析笔记 —— rtf解析器(wwlib)的不完全解读
6. 某系统漏洞挖掘之固件分析
点击下方“阅读全文”了解更多
- 看雪2022 KCTF 春季赛 | 第六题设计思路及解析
- CNVD-2018-01084 漏洞复现报告(service.cgi 远程命令执行漏洞)
- 从零开始复现 DIR-815 栈溢出漏洞
- 看雪2022 KCTF 春季赛 | 第二题设计思路及解析(含视频)
- 智能电表安全之通讯分析
- [VNCTF2022]gocalc0复现
- 2022 CTF babyarm 内核题目详细分析
- Go解析
- 刚入行时分析的病毒重现
- 记一次新型变种QakBot木马分析
- [VNCTF2022]InterestingPHP复现
- 分析一道简单安卓中级题
- 虎符网络安全赛道 2022-pwn-vdq-WP解题分析
- 『直播中』从unidbg trace log中还原被ollvm混淆的非标准算法
- 分析一个安卓简单CrackMe
- NtSockets - 直接与驱动通信实现sockets
- JLink固件漏洞
- CVE-2022-0995分析(内核越界 watch_queue_set_filter)
- ZJCTF2021 Reverse-Triple Language
- Docker-remoter-api渗透