游戏素材文件解密
...大约 1 分钟
游戏素材文件解密
注意
这是Python
文档,并非Lua
文档!
此脚本用于解密迷你世界的各种加密素材
使用之前请确保已经安装Python3
并配置好环境变量Python
脚本由Four_cps编写
效果演示
解密后:
用到的库
import os
import struct
import six
import shutil
其中six
库需要手动安装,请在命令行
中输入以下代码:
pip install six
使用方法
- 新建文件夹,将
Python
脚本和需要解密的图片一并放在文件夹里,可同时解密多张图片 - 运行
Python
脚本 - 脚本运行完毕后会在当前目录下生成一个名为
_decrypted
的文件夹,解密的图片就在里面
Python
脚本
import os
import struct
import six
import shutil
D8_KEY = b"\xd6\x02\x08\x00\xf4\xfe\xff\x3f\x01\x00\x00\x00\xd0\xca\x01\x00"
OUT_PATH = os.path.join(os.curdir, "_decrypted")
def decrypt_folder(path):
for file_name in os.listdir(path):
if not file_name[0] == "_":
if os.path.isdir(file_name):
decrypt_folder(os.path.join(path, file_name))
else:
try:
decrypt_file(os.path.join(path, file_name))
except:
decrypt_folder(os.path.join(path, file_name))
def decrypt_file(path):
with open(path, "rb") as f:
sign = f.read(4)
if sign == b"\xff\xd9\xff\xd8":
file_size = os.path.getsize(path)
enc_size = struct.unpack(">i", f.read(4))[0]
enc_data = f.read(enc_size)
no_enc_data = f.read(file_size - enc_size - 8)
out_path = os.path.join(OUT_PATH, path[2:])
if not os.path.exists(os.path.dirname(out_path)):
os.makedirs(os.path.dirname(out_path))
with open(out_path, "wb") as of:
for i in range(0, enc_size):
dec_byte = enc_data[i] ^ D8_KEY[i & 0xf]
of.write(six.int2byte(dec_byte))
of.write(no_enc_data)
print("Decrypted encrypted file:" + path)
elif sign == b"\xff\xd9\xff\xd7":
print("Ignored encrypted file:" + path)
else:
f.close()
out_path = os.path.join(OUT_PATH, path[2:])
if not os.path.exists(os.path.dirname(out_path)):
os.makedirs(os.path.dirname(out_path))
shutil.copyfile(path, out_path)
print("Copied non-encrypted file:" + path)
decrypt_folder(os.curdir)
Powered by Waline v2.14.7