为补丁分析对齐结构体列表



我目前正在逆向工程一个定期更新的多人游戏。网络协议使用自定义序列化框架,我现在能够恢复关于正在交换的消息的大量信息。对于每条消息,我可以检索所述消息的完整结构和该消息的类型(例如。身份验证、聊天、移动…)。然而,我遇到的一个问题是消息和消息类型经常被添加和删除,而且消息可能有添加或删除的字段。消息和消息类型的总体顺序保持不变

!我现在正在寻找一种方法,如何最好地利用信息,我必须匹配更新的消息结构的旧的,我已经确定了一些消息和字段的含义。也就是说,给定如下两组消息,我如何传输已经逆向工程的信息(新消息中的注释)?

旧消息:

Authentication:
message Login:
opcode: 1
fields:
- string mail
- string password
message LoginResponse:
opcode: 2
fields:
- string token
Chat:
message ChatSend:
opcode: 3
fields:
- string channel
- string message
message ChatReceive:
opcode: 4
fields:
- string channel
- string user
- string message

新消息:

Type1: # Authentication
message Unk1: # Login
opcode: 1
fields:
- string unk1 # mail
- string unk2 # password
_ string unk3 # new field

message Unk2: # LoginResponse
opcode: 2
fields:
- string unk1 # token
Type2: # new Type
message Unk3:
opcode: 3
fields:
- Vec3 unk1
- float unk2
Type3: # Chat
message Unk4: # ChatSend
opcode: 4
fields:
- string unk1 # channel
- string unk2 # message
message Unk5: # new message
opcode: 5
fields:
- string unk1
- string unk2
message Unk6: # ChatReceive
opcode: 6
fields:
- string unk1 # channel
- string unk2 # user
- string unk3 # message

一些附加信息:大约有60种不同类型的消息,每种消息类型最多有大约100条消息。此外,我也欢迎伪代码或python的解决方案。

更好和更可持续的解决方案是重新设计生成消息的系统,使其与名称和格式保持一致。这将使它更具可扩展性。

如果这确实不是一个选项,这里有一个可能的算法,您可能想通过使用Levenshtein等库计算字符串差异来探索。这里,让我们关注最外层的数据(类型)。只需对内部数据(消息和字段)执行相同的概念。

假设这些是新旧消息中类型之间的匹配:

tbody> <<tr>O2把O4
旧消息 新消息 备注
O1N1
N2
N3
陶瓷
O3它们
删除
O5删除
N6
O6N7
N8

相关内容

  • 没有找到相关文章

最新更新