Majsoul Wrapper项目中ActionPrototype协议解密技术解析

Majsoul Wrapper项目中ActionPrototype协议解密技术解析

majsoul_wrapper 自动化雀魂AI的SDK,实时解析雀魂对局信息,并模拟鼠标动作出牌 majsoul_wrapper 项目地址: https://gitcode.com/gh_mirrors/ma/majsoul_wrapper

在分析Majsoul Wrapper项目时,我们发现其网络协议中ActionPrototype层的数据采用了特殊的加密处理方式。本文将详细解析这一加密机制及其解密方法。

协议结构分析

原始协议数据包采用Protobuf格式,其结构主要包含三个关键部分:

  1. 方法名(.lq.ActionPrototype)
  2. 消息名(ActionDiscardTile)
  3. 经过加密的二进制数据

典型的数据包示例如下:

010a132e6c712e416374696f6e50726f746f74797065122508021211416374696f6e4469736361726454696c651a0e957c636850ae4e9c75ca999edf93

加密机制详解

通过逆向工程分析,我们发现数据部分采用了XOR异或加密算法,并配合特定的密钥序列。加密过程具有以下特点:

  1. 使用9字节的固定密钥序列:[0x84, 0x5e, 0x4e, 0x42, 0x39, 0xa2, 0x1f, 0x60, 0x1c]
  2. 加密过程中引入了数据长度和位置相关的动态因子
  3. 采用循环方式应用密钥

解密算法实现

以下是完整的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)

算法工作流程:

  1. 将输入数据转换为可变的bytearray
  2. 计算数据长度d
  3. 对每个字节:
    • 计算动态因子u:(23 XOR d) + 5*位置索引 + 密钥字节
    • 对原始数据字节执行XOR操作
  4. 返回解密后的bytes对象

实际应用示例

对于示例中的加密数据部分957c636850ae4e9c75ca999edf93,解密过程如下:

  1. 首先进行Base64解码(如果数据以Base64形式存在)
  2. 然后应用上述decode函数
  3. 最后才能用Protobuf反序列化得到结构化数据

技术总结

Majsoul Wrapper项目中的这种加密方式属于轻量级的混淆方案,主要特点包括:

  • 结合了固定密钥和动态因子
  • 每个字节的加密因子与数据长度和位置相关
  • 实现简单但能有效防止简单的协议分析

这种设计在游戏协议中较为常见,既保证了基本的数据安全,又不会带来太大的性能开销。理解这一机制对于开发游戏辅助工具或进行协议分析具有重要意义。

majsoul_wrapper 自动化雀魂AI的SDK,实时解析雀魂对局信息,并模拟鼠标动作出牌 majsoul_wrapper 项目地址: https://gitcode.com/gh_mirrors/ma/majsoul_wrapper

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

申珂律Alanna

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值