本帖最后由 dadwasd 于 2026-3-14 18:31 编辑
《客户端行为》
在没有捋思路和剧本的情况下写的看不懂可以跟帖留言
近期针对红月客户端及服务端进行了大量得逆向工作 目前对红月客户端得渲染行为及通信(通信加密解密)行为有了大概得了解下面展开为大家介绍几点说的不对的地方可以提出
(本着学习至上,只是做技术分享,还是要支持官方的,切勿用于非法途径)
ps: 那么红月客户端是怎么渲染地图的,他是如何渲染人物及各种素材的,红月素材为什么是位图,红月原始官方到底有没有地图编辑器,为什么红月这款游戏添加新地图非常的不友好,
这不是一种溺爱而是在那个年代红月官方选择的技术栈还是很NB的但是的确存在很大争议的(现在来看)从技术选型看得出开发效率高,程序代码层面迭代快,客户端层面不是很好应该就是为了开发快所作的技术选型等等吧
正常这是因为效益大概率所有的公司都是一样的
1.红月客户端主要是用得是私有引擎 (使用了OPGL GDI32 也就是和CS1.6一样得模式) 通信模块是通用型但是使用了自己得加密通信协议(DesDll.dll 没记错他是负责通讯加密解密)
不过可以通过现在的技术完全实现整个过程了解通讯机制是没有太大问题的
正常结构是:客户端<----------->服务端(网关,DB 逻辑 等等)
有种技术叫C/S通讯中间层
服务端只进行验证
服务端<----------------------------->通讯中转(中间层)<----------------------------->客户端
通过上面的方式就可以完美的看到数据通讯的整个过程
以上是网络部分(没有对网路部分进行太多研究)
2.客户端渲染层面主要是使用了GDI双缓存技术,查阅很多资料发现 在9几年是非常流行已经前沿得技术
LoadBitmapA CreateCompatibLebitmap 大量使用这样的位图函数
在程序启动前半部分当加载Loading..... 还进行了版本检测 (这里处理了DATAs\\rdmsys.dll 数据从这一刻开始延续)
GDI双缓存技术 是垂直同步防撕裂吧(下面转折点)
那通过这样GDI的技术 首先确认了红月渲染层级是怎么识别顺序的(OBJ遮挡关系游戏开发当中也叫渲染层级 这个时候就非常清楚了但是至于地图有几层,还要后面分析 )
通过这个方向我的分析路径也非常明确了,那就是客户端所有地图数据
2-1.地图数据逆向分析
RMM (地图)
包含 Entry → 指向 LST 索引地块(他并不是我们想象中的样子他都是图号索引,索引完了再切割)
地块
LST (列表)
包含 Entry → 指向 RLE 文件
RLE (精灵图像)地上OBJ(他并不是我们想象中的样子他其实是一个完整的建筑被切割位48-24的小瓦片位图)
实际图像数据
OBJ
其实地块都有索引编号他在那个位置,包括一个建筑物他摆在位置上占了多少个地块他都是有数据的而且还是小数类型非常精确(涉及坐标)
到这里基本上有开始了一周的数据分析毕竟要转平台要使用原数据接unity(html,json)
其实走过这一路地图的渲染层级已经数据非常完整的分析出来了其实数据并不复杂比起人物数据链和数据量差太多了
知道大家同样也关心人物
其实和上面是一样的
多了很多数据链路 技能,状态,衣服颜色选择 头发颜色选择索引 等等
我制作了一个解释器 下面是数据链路图
1. RLE 文件解析器 - 精灵图像资源
文件位置 : rle.rs
-对应数据结构 :
ResourceFile - RLE 文件结构
-Resource - 单个精灵资源
包含内容 : 压缩的精灵图像数据(RGBA 格式) 这个格式不是原版应该用的格式他处理半透明灰色不好 应该用红色半透明
2. LST 文件解析器 - 资源索引列表
文件位置 : lst.rs
对应数据结构 :
List - 列表结构
ListItem - 列表项
Entry - 文件索引条目
- 包含内容 : 资源文件的索引列表(文件编号 + 索引位置)
3. RMD 文件解析器 - 模型/动画数据
- 文件位置 : rmd.rs
- 对应数据结构 :
- Rmd - RMD 文件结构
- RmdEntry - RMD 条目
- 图像信息(包含 Z 深度、绘制类型等)
- RmdAnimation - 动画数据
- RmdType - RMD 类型枚举
- 包含内容 : 动画帧、图像引用、渲染信息(通过 LST 索引指向实际的 RLE 图像)
### 4. RMM 文件解析器 - 地图数据
- 文件位置 : rmm.rs
- 对应数据结构 :
- Map - 地图结构
- MapTile - 地图瓦片
- Event - 地图**
- 包含内容 : 地图尺寸、瓦片数据、**信息、传送点和碰撞数据
其实对于客户端渲染逻辑和素材引用这块就已经结束了更多的客户端逻辑没有详细去研究因为意义不大 这部分才是精华
通过上面的一系列的分析和提取 我们已经有了全部的素材并且带有原版数据可以跨平台使用
3.代码编码风格VC++6.0 MFC 4.2 (框架)
首先红月不像现代游戏有登陆器层还有主界面层他我认为没有比其他这层那层全部都是MFC选区界面用的对话消息结构 游戏主画面用的MFC 没有所有的多余框架
我都认知他就是MFC框架 大家可以去了解
下期给大家带来现在目前端游逆向加入新地图的一些方式方法
|