Majsoul Wrapper项目中ActionPrototype协议解密技术解析
在分析Majsoul Wrapper项目时,我们发现其网络协议中ActionPrototype层的数据采用了特殊的加密处理方式。本文将详细解析这一加密机制及其解密方法。
协议结构分析
原始协议数据包采用Protobuf格式,其结构主要包含三个关键部分:
- 方法名(.lq.ActionPrototype)
- 消息名(ActionDiscardTile)
- 经过加密的二进制数据
典型的数据包示例如下:
010a132e6c712e416374696f6e50726f746f74797065122508021211416374696f6e4469736361726454696c651a0e957c636850ae4e9c75ca999edf93
加密机制详解
通过逆向工程分析,我们发现数据部分采用了XOR异或加密算法,并配合特定的密钥序列。加密过程具有以下特点:
- 使用9字节的固定密钥序列:
[0x84, 0x5e, 0x4e, 0x42, 0x39, 0xa2, 0x1f, 0x60, 0x1c]
- 加密过程中引入了数据长度和位置相关的动态因子
- 采用循环方式应用密钥
解密算法实现
以下是完整的Python解密函数实现:
def decode(data: bytes):
keys = [0x84, 0x5e, 0x4e, 0x42, 0x39, 0xa2, 0x1f, 0x60, 0x1c]
data = bytearray(data)
k = len(keys)
d = len(data)
for i, j in enumerate(data):
u = (23 ^ d) + 5 * i + keys[i % k] & 255
data[i] ^= u
return bytes(data)
算法工作流程:
- 将输入数据转换为可变的bytearray
- 计算数据长度d
- 对每个字节:
- 计算动态因子u:(23 XOR d) + 5*位置索引 + 密钥字节
- 对原始数据字节执行XOR操作
- 返回解密后的bytes对象
实际应用示例
对于示例中的加密数据部分957c636850ae4e9c75ca999edf93
,解密过程如下:
- 首先进行Base64解码(如果数据以Base64形式存在)
- 然后应用上述decode函数
- 最后才能用Protobuf反序列化得到结构化数据
技术总结
Majsoul Wrapper项目中的这种加密方式属于轻量级的混淆方案,主要特点包括:
- 结合了固定密钥和动态因子
- 每个字节的加密因子与数据长度和位置相关
- 实现简单但能有效防止简单的协议分析
这种设计在游戏协议中较为常见,既保证了基本的数据安全,又不会带来太大的性能开销。理解这一机制对于开发游戏辅助工具或进行协议分析具有重要意义。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考