有大佬可以看看这个游戏怎么加密的吗

通过网盘分享的文件:DungeonWithin-v0.1.13-full-apkvision.rar
链接: 百度网盘 请输入提取码 提取码: 2g8c
–来自百度网盘超级会员v5的分享

文件也不大,直接dump内存切一下。通过网盘分享的文件:decrypted.zip
链接: 百度网盘 请输入提取码

1 个赞

安卓游戏可以内存转储吗:thinking:

要静态分析的话,分析 SeekableAesStream 相关函数,前面的准备流程就不赘述。libil2cpp.so蛮大的,加载费时间 :innocent:。

脚本主体
#!/usr/bin/env python3
PASSWORD = "DUNGEONWITHIN_SECURE_KEY"
SALT = bytes.fromhex("1A2B3C4D5E6F7A8B9C0D1E2F3A4B5C6D")

def derive_key(password: str, salt: bytes, iterations: int = 100, key_len: int = 16) -> bytes:
    data = password.encode("utf-8") + salt
    for _ in range(iterations):
        data = hashlib.sha1(data).digest()
    return data[:key_len]

def build_keystream(length: int, key: bytes) -> bytes:
    bs = 16
    out = b""
    nblocks = (length + bs - 1) // bs
    for i in range(nblocks):
        ctr = struct.pack("<Q", i + 1) + b"\x00" * 8
        out += AES.new(key, AES.MODE_ECB).encrypt(ctr)
    return out[:length]

def decrypt(ciphertext: bytes) -> bytes:
    key = derive_key(PASSWORD, SALT)
    ks = build_keystream(len(ciphertext), key)
    return bytes(c ^ k for c, k in zip(ciphertext, ks))