求助,千嬌百妹的spine提取

妹妃色舞今天开服了,得知消息后就前去解包。大部分内容都在安装包里,直接解压后用as能直接打开。但是,我翻遍了全部图像也没看见人物或皮肤的纹理图。热更新内容只有不到90m,也是没见到有用的图片。
进入游戏内设置,可以下载到游戏的R18额外内容包。找到了皮肤,约会,大破等R18版的spine内容,所以只差角色立绘的spine。
后续又重新翻了好几次,但还是没有找到。
这是游戏的下载地址: [下載] 千嬌百妹 | 台版 - QooApp 遊戲庫

1 个赞

游戏用的1.5.2的YooAsset,可以自己写还原脚本,也可以用我写好的

还原后找到spine文件,只是64字节处理了下

def dec(e: str, d: str):

    with open(e, 'rb') as f:
        enc = f.read()

    data = bytearray(enc)
    byte = min(len(data), 64)

    for i in range(byte):
        data[i] ^= 0xFF

    with open(d, 'wb') as f:
        f.write(data)


if __name__ == "__main__":
    dec("spine.bundle",  "d")


5 个赞

非常感谢!

你好大佬,询问下有没有懒人包,感谢。

今天热更后加入了一个新角色和她的皮肤


本体长这样(角色编号R020)
但是热更文件里没有找到她的立绘spine文件,但有她的大破spine文件。
没有出新的安装包。问问各位大佬怎样才能找到本体的spine文件
游戏从平台下架了,但官方给了游戏安装包的链接: https://d.qoo-apk.com/open/dc/apk/692040df0d3e3ee9a66b864bdb36c867.apk


这个吧,我记得之前就有

是热更文件里的吗

找到了,感谢指路

还原是怎么操作的 下载脚本放到Assets文件夹运行没反应

问ai :face_with_monocle:
感谢yjzyl9008大佬造的轮子。
妹妃色舞_YooAsset_Extract_豆包.zip (6.9 KB)

大佬,我想尝试寻找游戏游戏剧情文本。

但是发现有些文本文件被套了一层base64。进行解码后依然是乱码,怀疑还有加密,在ida中寻找了一下并未找到相应函数。现在不知道怎么办了,可以看一下吗?

文本文件解包后在Assets\Res\table中,怀疑dialogue_cn.json就是剧情文本,但是有base64。
dialogue_cn.zip (910.1 KB)

也有明文的对话,但是很少。
role_cv_cn.zip (21.7 KB)

这是一部分样例:
table.zip (6.8 KB)

晚点我看看。

粗略看了下在lua里面,lua在src.bundle,实际的解密还在dll里面

localFileName = rawpath('table/' .. tmpTableName .. '.json')

想问下这个lua是在哪里找到的?我找了安装包和安装目录都没找到。data/data和Android/data都找了。

1

是我有没仔细看了 :smiling_face_with_tear:,抱歉打扰了,我再去看看。

我直接给出解密代码好了,用的AES_GCM

import base64
import hashlib
import zlib
import json
from Crypto.Cipher import AES



with open("dialogue.json", 'r', encoding='utf-8-sig') as f:
    b64 = "".join(line.strip() for line in f)
data = base64.b64decode(b64)
# 密钥组件, 随机数, 认证标签, 密文
key_comp, nonce, tag, ct = data[:16], data[16:28], data[28:44], data[44:]
cipher = AES.new(base64.b64decode("/I0NTvnHjOjaxyWwy36I6g==") + key_comp, AES.MODE_GCM, nonce=nonce)
cipher.update(hashlib.md5(key_comp + nonce).hexdigest().encode('utf-8'))

with open("dialogue.json", 'w', encoding='utf-8') as f:
    f.write(json.dumps(json.loads(zlib.decompress(cipher.decrypt_and_verify(ct, tag), wbits=16+zlib.MAX_WBITS)), indent=4, ensure_ascii=False))
1 个赞

我还在找大佬就解出来了 :joy:

很抱歉又打扰你,可以请教一下怎么定位的吗?

我看是aes所以在ilcpp中直接搜索aes关键尝试寻找,但是都没找到。看了你的解密脚本后尝试寻找了GCM关键字但是只找到了Org_BouncyCastle_Crypto_Tls_DefaultTlsCipherFactory__CreateCipher_Aes_Gcm,想跟交叉引用但没有找到别的。

游戏从TextAsset里面加载dll,解密函数就在里面,其实看dump出的cs文件大小就知道不正常,再者直接搜skill,damage,calculate这类常用关键词也没结果