早在版本更新前的一次资源更新的时候,我这边就注意到master db的改动了,新增了一个cdb,编码不明,但应该就是用来新版本的加密版db。当时故障原因是一直以来masterdb manifest只有一行,所以我直接拆逗号,但这一次cdb在unity bundle前面,于是提取失败cron爆炸
当时改完了正规按行读取后就等着新版本了,想着肯定会大改这部分。于是 8/3 的 10002700 更完,一周后1.6就更新了
下完dmm版扔进dnspy,直接看到这么个切换cdb的代码
而当跟随这个OpenCustomVFS之后,发现他调用了一个 coneshell.dll 里面的函数,而这个dll只有一个导出入口,作用是循环输出一个数组里的函数指针
然后就是和dll战了几天,本来想研究透内部逻辑的,然后星月佬一句“你调用不就完了,linux还有wine”,于是…我就扭头去模拟调用了()
不过就算是调用,也要摸好半天各种函数。打开cdb我模拟了半天也没成功,那天我就直接睡了,后来Utaha写了个另一个版本的代码给读出来了,然后调用 sqlite3_backup_init 直接保存出来db了。
就在研究cdb的时候,我又注意到另一个事情:服务器一直在报代理失效,判定原因是返回200但无body内容。而我手动curl的却发现代理没有问题,排查了好久,最后把完整的header和body都带上,果然0长度了。也就是说1.6不仅改了db,还改了通信。那天发现到这里我就去上跑步机了,在跑步时候我就发的“我有种预感,我一会儿还会碰到一个coneshell的调用”。跑完下来继续研究发现果然,unpack里还是一个外部调用。
刚开始本想直接拆一个客户端的响应,但是一直都是unpack出错,最后Utaha给我提说是有一个初始化的函数,输入了udid和随机32B。于是发觉拆解已有响应好像还不如直接自己构造客户端容易
摸了半天之后才算摸清了各个函数的用途与参数
然后经过一通猜测body并对比已有的请求大小,构造出了一堆请求后,才终于看到服务器返回的不是错误的212字节而是492字节了,也就是说构造成功了,接下来就是扔给dll 解包了
但是当我直接扔给了 _g 的时候,他依然给我返回了-1……想了二十分钟整理了下逻辑,意识到如果是游戏正常运行的话,是pack之后等待响应然后紧跟着unpack的,这里会不会有内部状态的改变?于是在unpack之前我又调用了一次pack,这次res正确返回了解包长度,成功了!
于是美滋滋完成编译,rpm源还只有x64 wine,又去找了个一键x86 wine编译在服务器跑了一个小时才跑完。然后就直接扔上去了,于是service back online(
后话:
我挂上了新版本cdb代码,原本猜测的是Hatsune’s Notes现有版本估计就完全死了。但是14号 继续用着呗
更新后发现怎么还有bundle版本的db,虽然有点奇怪cy为什么还不停用传统db,不过他有我就这几天其他几位大佬依然在缓慢地彻底研究内部逻辑,我这种不会的咸鱼只能在旁边膜了
8/22 后记2
你西歪太拼了,我这刚完成没几天,现在有了cdb ver.3了,怕是下版本实装
8/28 后记3
cy昨天更了167了,cdb ver3 online
我这种菜渣,拆是不可能拆的,这辈子也看不懂汇编的,您们谁大能收了西歪吧
等一个最终提交,这破游戏我研究也就到这了,打扰了,告辞
cy,我前天拆cdb的时候,你偷看了吧
想运行一下大佬的项目,但是Coneshell_call卡在auto _a = (IntPtr()()) _fx00();不知道是不是coneshell.dll的问题,大佬方便传一份你用的文件吗,感谢
https://github.com/esterTion/unity-texture-toolkit/blob/master/redive/Coneshell_call/coneshell_cdb_ver3.7z
打包里面有
谢谢大佬,换了还是同样的问题,估计什么地方我弄错了qwq
大佬,请问一下您做的公主连结资源站内可以加装一下游戏剧情内无角色立绘的空白背景吗,跪求QAQ
This post helps a lot. When I searched for cdb (maybe compressed db?) and coneshell, google bring me to here. This and your ‘unity-texture-toolkit’ are greatly helpful. Recently, I have deeply dived into KR version app and resources. Thank you for your post and endeavor.
Wait… KR version uses coneshell too???
Stopped checking TW ver a while ago, did they use cdb as well?
Also, I guess “c” is for crypted or ConeShell
Actually not. There was no ‘Coneshell’ folder on it. I have tried to disassemble KR version app, but many functions remains blank. I could access on the JP version of the project and read through the codes from it, with help of Vibbit. Then, I faced the cdb. There was no relation on cdb and KR ver., sorry 🙂 But, with your post, I could quickly know how it works, and with your toolkit, I could know how cdn stores the data.
I just download the master.mdb file from rooted android and it costs a lot. So, I am going to find an automatic update ways as you did. Maybe I could trace your works. 🙂
我自己是有找到 疑似的地址
https://api-pc.so-net.tw/information/detail/420/1/10/10?list_category=1&rnd=120645794
但似乎連不進去? 不知道是否台版的地址不能從外部連進去呢?
整理邮件才来回复,抱歉
访问通知页面需要特定UA,这是我反代的配置
請問esterTion大大 台版redive有機會能有個像這樣的公告頁面嗎?
https://redive.estertion.win/game_notice/
又或者可以提供連結呢?
你好! 最近有個遊戲的global-metadata.dat想破解 想要遊戲裡的圖片進行攻略與翻譯 是否能請大大幫我破解呢?~
像我這種鹹魚
沒了global-metadata.dat還真不知道該怎麼辦 orz
metadata.dat藏到程序里了,参考 https://github.com/Perfare/Il2CppDumper/issues/63
那篇我有看到 可是不知道怎麼導出來 今天下班再嘗試看看 感謝
你要拆着研究还是直接dmm版看c# dll就完事了,还简单
不好意思 dmm版是什麼?
看C# DLL的話以前玩白貓的APK是用過 .NET Reflector
另外再補問,只是要看globametadata的話會需要去研究coneshell.dll嗎?那個我完全不知道是什麼 orz
https://dmg.priconne-redive.jp/
conshell负责通信和cdb,其他部分不用,提取metadata按照issue里搜文件头的反就可以,一直到那段结尾是一堆xx FF FF FF 然后一个文件长度,把长度扔掉就行
so檔打開照著issue有搜到 不過不會反 (太菜了
現在嘗試看DMM不過不開VPN會顯示「ページを表示できませんでした」
開了直接Access拒否 囧
搞定了正在下載遊戲檔案了
https://i.imgur.com/Kqjzys6.png
Assembly-CSharp.dll
該不會就這麼簡單就是看這個DLL吧
看來沒那麼簡單 有保護的 打開來很多東西都不給看
再次受挫…
新的1.6.5加了壳,比较难受了
Android Republic也還沒看1.6.5的MOD
估計提取metadata也是受阻了
dmm版怎么说呢,是pc版(需要下载dmm game player),好处就是可以直接给unity的dll打断点,还有就是资源文件直接在appdata里有……
虽然文件名是被加密了,但是还是能还原的的。
大佬们都是如何拆二进制的那几个,skel动画也是,根本不会……
skel动画是spine库实现的,参考
https://redive.estertion.win/spine/
和
https://redive.estertion.win/spine/still/
(spine-ts的SkeletonBinary是我自己照着其他语言的写的解析器,官方只提供c和c#的二进制解析器)
cdb是不是一种远古的数据库结构
利用wiki搜能搜到只有日文版本的cdb解释
然后我找了一下能看到部分格式说明:
http://www.unixuser.org/~euske/doc/cdbinternals/index.html
但是看不懂,能用dnspy把hsa的key可提取出来已经是我最大的努力了。
我是制作了一个pcr的wiki:pcrwiki.liantui.moe
之前是使用sqlite文件的,但好像很蠢,准备换成sql文件
手动很累,不知道该如何订阅大佬的sql来自动更新,感觉需要大量的工作。
cdb应该意思只是 crypted database,是cy自己搞了一个加密+压缩,解密后用了sqlite vfs虚拟文件系统进行加载,里面最后还是标准sqlite3 db
vfs标准接口在 https://www.sqlite.org/c3ref/vfs.html ,但其实没啥用,知道是个标准接口也没地方操作
我这边进行完提取然后用brotli压缩了, https://redive.estertion.win/db/redive_jp.db.br
检测更新用 https://redive.estertion.win/last_version_jp.json 就可以了
头疼,大佬压缩完的br文件,我利用google的js解压失败了……
以及之前大佬的 github 上给了我个 Coneshell_call.exe 的c源码,但是自己编译缺少几个include……Orz
大佬仓库里的sql能用吗?我在想,简单点,直接用这个算了……
唔,为啥会失败,我这一点问题都没有啊