45 精币
1. 数据预处理
python
hex_str = "4B7452415D595F5472495C7B5D544158706A6D5D5452415D54657B5F52415F6452415D563E485D5452415D545241789C8B0D09728C0D77728C0D090ACDF7B773F42809A88E05898504F883E8F81420DBB7C80B2216E45831A734E876599381C01F43C1092C06D36644F11FE30A6AED10E5D09058FAF7A75E52EEE0BED9627D3BE196D56F7EB753556E972DFADEA7FB5FD65C2FCBDBBCF5CB1D975DEEF92B7E1D7A092EED5CA4937D90CF5B87656194B99DFB4FBED165676C1BF43EE78F035C60AA9D966F355D9CF7D4F9D67B9964377894F8C4751A6AAE0D47F2F03ED563CD3293B77E548101FD7AB2362FB9E1E3D30D3227DE3378B46E7E9598BEC3F5A9F4FDEEDFEE2E4D79D138E1FD553D97AED6BDD95D2F75D0EBDB9ACD703D3E4CAA69D7E6FA53773D9FFE36B757C9F071E72382F7AF57EF971D5DEEFCBEBD79F365B976CFBFEDBF103DFF7B5DB9F38A9CFCFBAF65C03DB37C54B368921A66219BC07DD377D98C26DDDB9B14552D84EB2CDDE506CE964B6256CE7B74CFDF7FAD683890BB6DBD67DE230AD8B684A93EBD1BCDD6117DF1B12F6DDEECFCD4DF337DE5DB15BFEA297F9ABAA036B64B646CDDBE3B0CEF340BB70CB478339D70DE41BCF1F8F97F0DFCFB09D6BEF1270280756A4C3421B8121B101C6110871F762D772AF62BBD8328FCA3CAF64B7AAEC58BFBCA044777F475B9F808074F7CA8C84B0BC002006F3333DFD1CDD4BFD1C9DDD2222B2E3DD5CF23CF3BC528BDC037262E16920D8C9D116A828252002230D0466A1A681698B40694040F9E12E21E3BEE642C30D3C2E3B251D055CEAEA844BCF15CA7F5BE8AFBE5CFB6AE8DD8D51CDA5C6DBD52F26BAF7FD958D68EB2F9666BEEA1C59F950F85E8685DDBA865D4718669473C75A24AACBB904FEDB382777FDECD817D6F1E744CF6F3E169928D9126AC1A816B99C55F1E64EADB5130365BF1DB0282C97D8793A2BF79340E02B5EBF35DA4C6CCF4F714676E6D9149CBCA46A51CE69C0D2DF2567B9A76BFBE2B0ABBBB4EE27373E3DDF30C3E6D79665FBF59EF1CB3FE465E6CEAAE0AF796A7E6407CFB1756B3EEBCDD7967A63DBF3DD1B3FF4319FD07814BC21DAC771735585D74BD51F974B187DD91E3A0ADFB1499D6FB857425EB9E772627AC1CAC537E556DCDE57B2E7E5EBD85C4F9FDAFAE8290B2C5E985556CA7985FE8ED7BD10DAEBB2F24B71F3DBF33737DD3DF7BB3D3EC550BEB8AE788B57D59AE5DC91EDBDF31B4CE2374F5E1FF2FEB3D5FA57C754BEBE5058F97AF79CC0F356EFEAAB2EC5F89FD77DE399D4B5B3F7EAD99ADDF5EA65811ACD6F123BF75F745EA8DCE6242C327BB3B2D656F71EEDDEC66BFE7FD69754CF8893BB11FEFBCDC37AA377412AAF759FF43D10B811D49955EBA62A569E947E34C7D147A073E792A2F74F371E8E3C1370F7463DA3DFD317B3A89EC8B20B9D6C0A5DC30A727D021C6D7DFDB2E30A323392D11319004BAFF7FE"
cipher_bytes = bytes.fromhex(hex_str)
2. 密钥尝试
使用三个密钥进行 AES-256-ECB 解密:
python
from Crypto.Cipher import AES
import zlib
def decrypt_data(cipher_bytes, key):
try:
cipher = AES.new(key.encode(), AES.MODE_ECB)
decrypted = cipher.decrypt(cipher_bytes).rstrip(b'\x00') # ZeroPadding处理
decompressed = zlib.decompress(decrypted) # zlib解压
return decompressed.decode('utf-8')
except Exception as e:
return f"解密失败: {str(e)}"
keys = [
"zKlcyp4S4zt4jKMOMe4RFwL0Jy2qPaPc", # 检查长度是否为32字节
"dujXZ0sE4FOUUy59aC3i1czXFgx7eD8W", # 正确密钥
"tz5XGiTqcK4ZwGaIdY33sxk4nwvGN40o"
]
for key in keys:
result = decrypt_data(cipher_bytes, key)
if "info" in result: # 根据已知字段验证
print(f"[成功] 密钥: {key}\n解密结果:\n{result}")
break
else:
print("所有密钥均失败!")
3. 解密结果
使用密钥 dujXZ0sE4FOUUy59aC3i1czXFgx7eD8W 解密成功,输出如下:
json
{
"info": ["88072130001747537363001062063", "米海外\\\\\\", 0, 1, 0],
"campid": 0,
"sp": [540, 560, 810, 750],
"id": [1, 1, 0, 0, 0, 0, 0],
"state": [0, "", "", "0"],
"horse": [0, 0, 0, 0],
"InternalForce": 0,
"MaxInternalForce": 0,
"wex": 0,
"wfex": 0,
"csd": [0, 0, 0, 0, 0],
"data": [1, 19, 19, 255, 0, 0, 0, 0, 15, 15],
"WarZone": 0,
"STID": "",
"DearID": "",
"icons": [{"iId": 10, "sEffSrc": "5112", "iDrop": 0, "iX": 0, "iY": 0, "iEff": 1, "after": 0}],
"nServerId": 8807213
}
协议头部分析
1. 头部结构
根据解密后的数据和历史示例,头部结构如下(假设为小端序):
cpp
#pragma pack(push, 1)
struct PacketHeader {
uint32_t unknown1; // 00 00 00 00
uint32_t opcode; // D7 0B 00 00 (操作码0xBD7)
uint32_t timestamp; // 时间戳或校验字段
uint32_t reserved[3]; // 保留字段
uint32_t dataLength; // JSON数据长度
};
#pragma pack(pop)
2. 头部与JSON关联
操作码 (opcode):0xBD7 可能对应游戏内的某个功能模块(如任务系统)。
数据长度 (dataLength):指示后续JSON数据的字节长度,用于协议解析时分割数据。
保留字段:可能用于版本控制或扩展标识。
JSON数据结构解析
关键字段说明
字段 类型 描述
info 字符串数组 包含用户ID、角色名等基本信息。
sp 整型数组 角色属性值(如攻击、防御)。
id 整型数组 技能或道具ID列表。
icons 对象数组 界面图标配置信息。
nServerId 整型 服务器ID,用于多服逻辑。
示例字段解释
json
"sp": [540, 560, 810, 750]
可能对应角色的 [攻击力, 防御力, 生命值, 魔法值]。
安全性改进建议
加密模式升级
当前使用 AES-ECB,存在相同明文生成相同密文的风险,建议改用 AES-CBC 或 AES-GCM,并添加随机IV。
密钥动态管理
避免硬编码密钥,可通过服务端动态下发或使用密钥派生函数(如PBKDF2)。
数据压缩优化
使用更高效的压缩算法(如LZ4)减少传输数据量,同时结合加密提升安全性。
总结
解密成功:通过 AES-256-ECB 和 zlib 解压还原出明文JSON。
协议设计:头部包含操作码和数据长度,JSON承载业务数据。
改进方向:增强加密算法安全性和密钥管理策略。
我来回答