如何在Python中解密无IV的AES加密游戏JSON文件?
游戏JSON文件解密问题求助
- 个人用途修改游戏(开启鼠标控制、移除菜单/对话限制),需解密游戏内的JSON文件
- 目标JSON文件打开显示乱码,尝试Shift JIS编码转换无效
- 在游戏目录找到
Decryption.js文件,包含256位AES密钥decryptionAESKey和长字符串decryptionSource,不清楚后者用途 - 尝试用Python的
cryptography和PyCryptodome库做AES-CBC解密,先后遇到数据长度不是块长度的倍数及多种编码解码错误;已假设Hex编码、CBC模式、PKCS7填充,仍无法解决
可行的解决思路
- 先排查
decryptionSource的作用:它大概率是CBC模式需要的IV(初始化向量),先尝试将其Hex解码或Base64解码为字节,作为解密的IV参数 - 检查加密文件的结构:用十六进制编辑器查看文件,确认是否存在自定义文件头(比如固定长度的前缀),如果有,需先截取掉头部再进行解密
- 确认密钥的正确转换方式:确保
decryptionAESKey转换为正确的字节格式——如果是Hex字符串,用bytes.fromhex(decryptionAESKey)转换;如果是Base64字符串,用base64.b64decode(decryptionAESKey),不要直接将字符串按默认编码转字节 - 调整填充方式:如果PKCS7填充无效,试试PKCS5填充(两者在128位块大小下兼容),或者直接查看
Decryption.js中的代码,确认是否使用了自定义填充逻辑 - 核对加密模式:JS中的AES实现有可能用ECB模式(虽然不推荐,但部分旧游戏会用),可以尝试切换模式测试;也可以检查是否使用了GCM等带认证的模式,这类模式需要额外处理认证标签
- 直接复用JS解密逻辑:把
Decryption.js中的解密代码提取出来,用Node.js运行解密——游戏本身的解密逻辑就是JS写的,直接复用能避免语言转换带来的编码、格式问题
内容的提问来源于stack exchange,提问作者Thanos
相关产品推荐
相关产品推荐

