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

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)
1 个赞