《夜行档案》解包求助

这是内测安装包下载链接,夜行档案游戏下载安装-夜行档案安卓版游戏下载地址_管理资源吧
游戏已经没了,没有热更新
好像不是u3d游戏,解压以后是dat文件

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

def Decrypt(bundle: Union[Path, str]):
    with open(bundle, 'rb') as f:
        size = 0xDC
        darr = npbuff(f.read(size), dtype=uint8)
        karr = npbuff(bytes(i ^ j for i, j in zip(b'Unit', darr[:4])), dtype=uint8)
        data = (darr ^ npfill(karr, (size // 4) + 1)[:size]).tobytes()
        if not data.startswith(b'UnityFS\x00'):
            print(f'解密错误 ---- {bundle}')
            return
        data += f.read()
    with open(f'{bundle}.dec', 'wb') as f:
        f.write(data)

def batch(bundle_path: str = '', ext: str = '*.dat', subfolder: bool = False):
    path = Path(bundle_path) if bundle_path else Path.cwd()
    need = [i for i in (path.rglob(ext) if subfolder else path.glob(ext))]
    for i in need:
        Decrypt(i)

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

它只是xor了文件前220字节

1 个赞

image

检查是不是unity游戏很简单, 查看apk里的lib文件夹看看里面有没有libil2cpp.so
image

1 个赞

学到了,谢谢大佬!

请问相关的解密逻辑是在哪个文件里查看的?

ida 逆向 libil2cpp.so, 然后自己找解密代码并解析, 不过对于xor加密可以靠硬猜