某火热区块链游戏(mir4)的一次通信协议分析

VSole2022-01-13 16:25:32

游戏名:Mir4(传奇4)

准备工作:

1、平台:iOS 14.3越狱环境

2、工具:hopper,ida,frida

3、知识:需要对c++虚表有一定的了解,UE4dump和ProtoDump需要

思路

既然是网络层分析,那么第一步肯定是抓包分析一下。逆向基础的wirashark,charles这些就不做介绍了。

这一块就不贴图了,抓包分析后得知:

  • 网络交互是走的tcp连接;
  • 协议是基于protobuf;
  • 通信过程加密了,前几个包是明文包,后续加密了,看了一下位数,不像是非对称加密,因为长度不符合,还是需要验证一下。

protoc --decode_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.cppFNamePool::FNamePool();

运气比较好,可以看到有字符串:

也就是说,我们在hopper中找到字符串并查找相关引用,就可以得到FNamePool:

 

找到函数顶部,按X查找引用:

然后随便找一个进入,看看调用是什么:

这里解释一下, 在C++面向对象中,一般的X0就是this指针,那么这个函数调用了我们的FNamePool::FNamePool(),传入的x0对象就是fnamepool的地址,也就是:0x1065c2000+0x1c0 = 0x1065c21c0

剩下TUObjectArray基本也一样。然后自己改一改UE4Dumper就可以拿到完整的sdk了:

验证想法

后续补充,包括怎么寻找切入点,算法还原,,包括怎么样dump出proto文件等,一时半会写不完。

dump出的proto文件类似下面:

通信协议
本作品采用《CC 协议》,转载必须注明作者和本文链接
在以往的僵尸网络清除行动中,政府首先监控 C&C 服务器证明恶意软件造成社会损失,随后获取法律许可进行定点清除。例如 2020 年微软清除了 TrickBot 在全球的 128 台 C&C 服务器中的 120 台。 被动监测 C&C 服务器的方式,如节点注入,可能无法准确了解僵尸网络的规模并且需要大量的逆向分析工作。 主动监测 C&C 服务器的方式,如渗透测试、域名扣押,通常容易被攻击者察觉。
三菱MELSOFT协议为三菱PLC私有组态协议,用于编程软件与三菱PLC通信。针对该协议公开资料并不多,本次主要对该协议进行分析,并基于分析结果对三菱PLC进行MELSOFT协议模糊测试。
三菱MELSOFT协议为三菱PLC私有组态协议,用于编程软件与三菱PLC通信。针对该协议公开资料并不多,本次主要对该协议进行分析,并基于分析结果对三菱PLC进行MELSOFT协议模糊测试。
通过查阅相关资料得知虚幻引擎是通过'UNetDriver'进行网络交互的,而'UNetDriver'是在'UWorld'下,那么我们就需要对游戏先进行sdk dump拿到实例化对象。
Modbus Slave是一个模拟工业领域通信协议Modbus从站的上位机软件,主要用于测试和调试Modbus从设备。该软件7.4.2以及以前的版本,在注册时,未对注册码长度进行安全检查,存在缓冲区溢出漏洞,导致软件崩溃。影响范围Modbus Slave 7.4.2以及以前的版本复现环境操作系统:Win7 sp1 32位操作系统分析工具:IDA、OD、Windbg、Procexp漏洞分析分析时使用的版本为7.1.2.1357。
一种全新的内存马
2022-12-13 10:56:20
前言WebSocket是一种全双工通信协议,即客户端可以向服务端发送请求,服务端也可以主动向客户端推送数据。这样的特点,使得它在一些实时性要求比较高的场景效果斐然。主流浏览器以及一些常见服务端通信框架都对WebSocket进行了技术支持。版本2013年以前还没出JSR356标准,Tomcat就对Websocket做了支持,自定义API,再后来有了JSR356,Tomcat立马紧跟潮流,废弃自定义的API,实现JSR356那一套,这就使得在Tomcat7.0.47之后的版本和之前的版本实现方式并不一样,接入方式也改变了。
研究员针对大疆无人机进行多方面研究,如对其通信协议量身定制了一种模糊测试方法,共找到 16 个安全漏洞,并发现其设备跟踪协议存在隐私漏洞。
针对大疆通信协议定制了模糊测试方法
最新研究表明,移动网络运营商(MNOs)使用的现代通信协议中的高影响力漏洞可以被用来拦截用户数据并进行假冒欺诈和拒绝服务(DoS)攻击。 这项发现是伦敦网络安全公司Positive Technologies上周发布的《2020年LTE和...
VSole
网络安全专家