求助,拉取爱丽丝圣礼数据包的办法

【公式ゲーム】あいりすミスティリア!~少女のつむ …

如题,我想了解一下该游戏的数据包该怎么拉取,万分感谢

挺适合练手的游戏,我这里只给出一些解密函数,其他的自己抓包写

资产

import hashlib
import struct
import hmac
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad

if __name__ == "__main__":
    k = hmac.new(b"dB3aqcLtAmBd", b"RWd3NusabzRc", hashlib.sha256).digest()

    with open("003le.encrypted", "rb") as f:
        d = f.read()

    if len(d) > 4:
        l = struct.unpack("<I", d[:4])[0]
        if l + 4 == len(d):
            d = d[4:]

    dec = unpad(AES.new(k, AES.MODE_CBC, iv=d[:16]).decrypt(d[16:]), 16)

    with open("003le", "wb") as f:
        f.write(dec)

数据表

import hashlib
import hmac
import base64
import json
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad


def read_7bit(f):
    res = 0
    shift = 0
    while True:
        byte = f.read(1)
        if not byte:
            return None
        b = ord(byte)
        res |= (b & 0x7F) << shift
        if (b & 0x80) == 0:
            break
        shift += 7
    return res


def decrypt_master(fp):
    k = hmac.new(
        "dB3aqcLtAmBd".encode("utf-8"), "RWd3NusabzRc".encode("utf-8"), hashlib.sha256
    ).digest()

    with open(fp, "rb") as f:
        l1 = read_7bit(f)
        s1_b64 = f.read(l1).decode("utf-8")
        l2 = read_7bit(f)
        s2_b64 = f.read(l2).decode("utf-8")
    with open(fp + ".json", "w", encoding="utf-8") as f:
        json.dump(
            json.loads(
                unpad(
                    AES.new(k, AES.MODE_CBC, base64.b64decode(s2_b64)[:16]).decrypt(
                        base64.b64decode(s2_b64)[16:]
                    ),
                    AES.block_size,
                )
                .decode("utf-8")
                .strip()
            ),
            f,
            indent=4,
            ensure_ascii=False,
        )


if __name__ == "__main__":
    decrypt_master("mAbyssholeBosses")

老代码写的乱,但补全配置后应该能将就着用,用不了我也不管,当个思路(
视频文件头的XorKey = b’\xd5\xc5\xc4\xb7’

def decryptdata(data: bytes, aeskey=aeskey) → bytes:
cipher = AES.new(aeskey, AES.MODE_CBC)
return cipher.decrypt(data)[16:]

如果你明白CBC以及iv到底是什么以及在干什么,那么这么写也是没问题的,但不建议在正规项目用(