maimaiDX-Api/Standalone/DecryptTitleServerTraffic.py

71 lines
2.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 解密从 HDD 抓包得到的数据
# 兼容 PRiSM 和 CN 2024
# 完全 Standalone不依赖于其他文件
import base64
import zlib
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad, pad
# CN 2024
AES_KEY_SDGB_1_40 = "n7bx6:@Fg_:2;5E89Phy7AyIcpxEQ:R@"
AES_IV_SDGB_1_40 = ";;KjR1C3hgB1ovXa"
# 国际服 PRiSM
AES_KEY_SDGA_1_50 = "A;mv5YUpHBK3YxTy5KB^[;5]C2AL50Bq"
AES_IV_SDGA_1_50 = "9FM:sd9xA91X14v]"
class AESPKCS7:
# 实现了 maimai 通讯所用的 AES 加密的类
def __init__(self, key: str, iv: str):
self.key = key.encode('utf-8')
self.iv = iv.encode('utf-8')
self.mode = AES.MODE_CBC
# 加密
def encrypt(self, content: str) -> bytes:
cipher = AES.new(self.key, self.mode, self.iv)
content_padded = pad(content.encode(), AES.block_size)
encrypted_bytes = cipher.encrypt(content_padded)
return encrypted_bytes
# 解密
def decrypt(self, encrypted_content: bytes) -> str:
cipher = AES.new(self.key, self.mode, self.iv)
decrypted_padded = cipher.decrypt(encrypted_content)
decrypted = unpad(decrypted_padded, AES.block_size)
return decrypted
def main_sdga():
# 填入你的想解密的数据的 base64 编码
base64_encoded_data = "KSGm2qo7qVHz1wrK15PckYC5/kLjKcTtEXOgHeHt1Xn6DPdo3pltoPLADHpe8+Wq"
aes = AESPKCS7(AES_KEY_SDGA_1_50, AES_IV_SDGA_1_50)
# 首先解码 base64
decodedData = base64.b64decode(base64_encoded_data)
# 然后解密数据PRiSM 是先压缩再加密which is 正确做法)
decryptedData = aes.decrypt(decodedData)
# 解压数据
decompressedData = zlib.decompress(decryptedData)
print(str(decompressedData))
def main_sdgb():
# 填入你的想解密的数据的 base64 编码
base64_encoded_data = "eJyrTVvpuGwCR32OdodwtVXZ7/Ofmfhin7k/K61q3XNoad1rAPGwECU="
aes = AESPKCS7(AES_KEY_SDGB_1_40, AES_IV_SDGB_1_40)
# 首先解码 base64
decodedData = base64.b64decode(base64_encoded_data)
# 然后解压数据CN 2024 是加密后再压缩(纯傻逼
decompressedData = zlib.decompress(decodedData)
# 最后解密数据
decryptedData = aes.decrypt(decompressedData)
print(str(decryptedData))
if __name__ == "__main__":
main_sdga()