想請問D M M 的ルミナ R18圖片解密

如題 pc-play.games.dmm.co.jp/play/luminaprognosis_x/

我用charle 取得的資源: ttps://drive.google.com/drive/folders/1ltSytA3E60qemg2jtRGj-OzhqjAEGEZ0?usp=drive_link

自己有在 5ch 看到別人討論 是 XOR 加密 ? 但是實力不足無法確認

(只會用 xortool 最簡單功能測試猜測… 但是沒測出來.)

希望有高手能幫忙看看 謝謝 (主要目的還是收集自己抽的角色的圖片 自己也有課金一點 不過覺得官方經營的挺隨便的 感覺課不下去了 … -----遊戲活動兌換物一下就換光了 遊戲下半也不新增新兌換物…)

from pathlib import Path
from typing import Union, Tuple
from numpy import uint8, frombuffer as npbuff, tile as npfill

def Decrypt(fp: Path, klen: int = 32):
    with open(fp, 'rb') as f:
        if f.read(4).startswith((b'\xFF\xD8\xFF', b'\x89PNG')): return
        f.seek(0)
        darr = npbuff(f.read(), dtype=uint8)
        dlen = len(darr)
        basekey = f'{dlen}2fjaykPFd6bAJn59beX5TWDQzsEW'.encode('utf-8')
        keylen = len(basekey)
        key = bytearray(klen)
        o, t = 0, 0
        for i in range(klen):
            o = key[i] = basekey[t] ^ o
            t = (t + 1) % keylen
        karr = npbuff(key, dtype=uint8)
        data = (darr ^ npfill(karr, (dlen // klen) + 1)[:dlen]).tobytes()
        if not data[:4].startswith((b'\xFF\xD8\xFF', b'\x89PNG')):
            print(f'解密错误 --- {fp.as_posix()}')
            return
    with open(fp, 'wb') as f:
        f.write(data)

def batch(img_path: str = '', ext: Union[str, Tuple[str, ...]] = ('.png', '.jpg'), subfolder: bool = False):
    path = Path(img_path) if img_path else Path.cwd()
    need = [i for i in (path.rglob('*') if subfolder else path.glob('*')) if i.suffix.endswith(ext)]
    for i in need:
        Decrypt(i)

if __name__ == '__main__':
    path = r'D:\测试' # 指定图片所在文件夹
    ext = ('.png', '.jpg') # 指定要解密的文件类型后缀
    subfolder = True # 是否查找子文件夹内的文件
    batch(path, ext, subfolder)

代码就这样, 如果有解密错误的文件, 你可以上传到谷歌云盘, 我有空会检查下

用大佬的程序解密后发现文件不全,cg图片是一组的循环重复,推测可能是游戏自身对抓包进行了某些限制?