…今天新出的游戏
大部分文件都能解,就是FakeHeader 但是找不到skel文件,蹲一个大佬看有什么线索。
我尝试了 qingliu 大佬之前提供的一种通过文件内容特征查找spine动画文件的方式,找到了疑似skel的文件。
这个文件中包含了atlas中所有切片名称的信息,并且开头能看到3.8.85 类似spine版本号的信息。
因此怀疑skel文件没有通过unity打包,只是更改了后缀。但遗憾的是,这个文件如果通过更改后缀的方式,仍然无法还原spine动画。很有可能是文件里内混杂了一些没必要的信息,需要删除。但到这一步我已经找不到什么线索了。
150102.rar (5.1 MB)
我上传了一个例子,看群里是否有大佬能还原skel文件。 基本上就是解包这个游戏的最后一步了。
我还是头一次遇到spine能读取,exstudio不能读取的文件。 因此测试的时候,发现exstudio无法导入,就以为skel文件是有问题的。现在看来是ex的问题。 但为什么你是可以成功导入进ex的?
这个游戏的skel动作文件它把基础人物和动作分开了,需要合并,不然只能在spine里查看,live2dviewerex会报错的,简单写了个合并脚本,操作如下。
1.提取出文件的bundles文件先把文件的伪文件头去掉放入as里面读取
2.type选择monobehaviour,然后搜索Info,将所有带有aniinfo的文件导出,这个里面记录了拆分出的两个skel文件,在bundles包里可以看到是u2d结尾的文件,文件直接导出到bundles的文件夹里面就行
3.运行脚本在bundles文件夹里面的output文件夹里面就有合并好的skel文件了,导出atlas和png文件就可以在live2dviewerex了查看了
import ujson
from pathlib import Path
def skel_merge(path):
Path.mkdir(Path(path + "/" + "output"), exist_ok=True)
path = Path(path)
for jsonfile in path.rglob("*_aniInfo.json"):
with open(jsonfile,"r",encoding="utf8") as f:
data = ujson.load(f)
skel_name = jsonfile.name.split("_aniInfo")[0] + ".skel"
_baseBytesMd5 = data["_baseBytesMd5"]
with open(str(path)+"/"+_baseBytesMd5+".u2d","rb")as f:
_baseBytesMd5_bytes = f.read()
_aniBytesMd5 = data["_aniBytesMd5"]
with open(str(path)+"/"+_aniBytesMd5+".u2d","rb")as f:
_aniBytesMd5_bytes = f.read()
f.close()
with open(str(path)+"/" +"output"+"/" +skel_name,"wb")as f:
f.write(_baseBytesMd5_bytes)
f.write(_aniBytesMd5_bytes)
f.close()
if __name__ == '__main__':
path = r"C:\Users\zjbook\Desktop\bundles"
skel_merge(path)
最终效果
感谢大佬!
学习了!
不清楚 你得看这个游戏是不是套的这种方案 每个游戏的资源策略都不一样 也有可能不是spine做的动画 不过思路可以借鉴 可以看看monobehaviour里面有没有什么线索 仅限unity引擎的游戏
大佬,不好意思,可以请问一下怎么去伪文件头吗,小白不太知道
站内搜https://live2dhub.com/t/topic/2609/16
我把带unityfs的文件全解了,但是缺了好多角色,是什么情况
怎么解的啊,可以教教么
还有一部分在apk里面
先上鎮樓圖
看到有獸娘就引起我的興趣 : )
python代碼可用
這幾天都在整理這一款遊戲
主要在分類u2d文件 (寫bat)
有空再寫怎麼整理u2d文件 (應該會寫很長)
懶人包已弄好
SPINE部分 (skel版本有5個 , 用skeletonViewer-3.8.99.jar開啟即可 , skel文件每一個一一都看過了 , 比例怪異的png已都調整好)
\unity3d\assets\objects\spine\fabao (法寶)
\unity3d\assets\objects\spine\hero (角色戰鬥小人)
\unity3d\assets\objects\spine\hero_live (角色大圖) (圖很漂亮沒話講)
\unity3d\assets\objects\spine\herohead (角色Q版頭像)
\unity3d\assets\objects\spine\other (其他)
\unity3d\assets\objects\spine\pet
\unity3d\assets\objects\spine\shenchong
語音部分 (用foobar2000 + 外掛foo_input_vgmstream.fb2k-component 開啟acb awb文件 免hca key)
\audio (角色語音 技能語音 BGM 效果音)
\audio_repeat (重複的部分)
影片部分 (技能動畫 劇情動畫 PV)
\movie (usm文件用VGMToolbox抽出為m2v 再使用ffmpeg轉成mp4)
\unity3d (其他遊戲內圖檔)
\skel+json (合併前的skel 文件 , head + body 部分 , json文件 , 使用python合併後的skel文件)
\manifest (遊戲資源清單)
6d51a5f55f9fb034d3035de92227c8c5.txt (76KB)
8575f76ae57cd05b016f5290a95ce291.txt (78KB)
(audio和movie就是用這清單還原為原始文件名)
\text (台詞)
11013c44eaacf47bd20ee999d1ca338a.txt (431KB)
631929608d158f89fa7a735144943748.txt (613KB)
\bytes (沒作用的文件)
\u2d_unkown (不曉得是什麼文件)
懶人包
com.cyou.xxygb_20240723.rar (11.1GB)
Google Drive 載點
Mega.nz 載點
百度盤 載點
链接:https://pan.baidu.com/s/1WmqdkMKWTScKuLUC0KU_JQ?pwd=1234
提取码:1234
感谢大佬
這遊戲資料分為兩部分
APK自帶 + 更新下載
使用夜神模擬器安裝APK (1.36GB)
再用夜神模擬器備份遊戲資料另存為npbk文件
npbk改後綴為rar , 再解壓縮得到vmdk文件
遊戲名稱為 : com.cyou.xxygb
(有在其他帖子詳細說明 , 可搜索帖子查看詳情)
DiskGenius (免費軟件)
用來開啟vmdk文件 (虛擬磁碟文件)
導出遊戲資料
遊戲額外下載的資料 在 \media\0\data\com.cyou.xxygb (3.63GB)
不是在\data底下
以下是文件整理步驟
Step 01
合併APK遊戲資料與追加下載遊戲資料
建立混合目錄mix(建立資料夾mix)
建立已分類目錄sort(建立資料夾sort)
\app\base.apk 解壓縮 (base.apk為遊戲安裝apk)
\app\base.apk\assets\bundles 底下文件複製一份到mix目錄下
\media\files\bundles 底下文件複製一份到mix目錄下(文件有重複的話就置換掉)
\mix 底下bytes文件 使用批次檔自動建立bytes目錄 , 再自動將bytes文件移動至bytes目錄下
move_bytes.rar (431 字节)
\mix\bytes 手動將bytes目錄移出至外面目錄sort , 避免影響等下的HEX搜索
bytes文件後面不會用到
\mix 底下會只剩u2d文件 (已分離bytes和u2d)
這些u2d文件 , 有純文本txt , AB包(unity3d) , skel(head+body) , usm , awb , acb
只是遊戲商統一更改後綴為.u2d
然後文件名又是一堆hash文件名
有點像三國志幻想大陸的模式
所以需要透過HEX搜索找出文件類別
需要使用工具Hex Editor Neo來實現
我在三國志幻想大陸那篇帖子有寫詳細過程
Step 02
開啟Hex Editor Neo
點選左下角放大鏡圖示 文件中查找(D)
類型 : 十六進制
搜索位置 : 自行添加 (我這邊設置 Y:\Nox_20240721\com.cyou.xxygb\mix )
貼上目錄路徑後 , 按下添加(A) , 再按確定 , 讓設定生效
Step 03
使用Hex Editor Neo找出unity3d文件 (Asset Bundle文件) (AB包)
Hex 搜索 55 6E 69 74 79 46 53 (UnityFS) , Hex輸入完畢後按下"查找全部"
程序會開始自動找出符合搜索條件的文件
搜索完畢後 , 按下右邊放大鏡圖示 , 導出結果 , 另存為文本文件(.txt) , 文件名我命名為unity3d.txt
unity3d.txt 記錄一堆unity3d文件的絕對路徑 , 等下拿去餵bat批次命令用
開啟unity3d.txt 另存新檔 文件編碼"UTF-16E帶簽名" 改選成"UTF-8E不帶簽名" , 存檔覆蓋原文件
這是之前親自試驗的結果 , 因為bat批次命令不認"UTF-16E帶簽名"文件編碼 , 可以認得"UTF-8E不帶簽名"文件編碼
使用BAT批次命令 , 自動分類文件
unity3d_sort.rar (1011 字节)
unity3d_sort.bat 代碼如下
MD unity3d
REM 創建文件夾 名稱為unity3d
for /f “tokens=*” %%i in (unity3d.txt) DO (
MOVE “%%~i” “unity3d”)
)
REM 讀取unity3d類型文件清單list , 然後將清單內所有文件移出至unity3d文件夾內
REM 文件清單編碼須為utf-8 未帶簽名
ren unity3d*.u2d *.unity3d
REM 批次將unity3d文件夾內u2d文件更改後綴為 .unity3d
將unity3d_sort.bat 與 unity3d.txt 一起放入\mix 目錄底下
運行unity3d_sort.bat , 自動建立目錄和移動文件 , 自動改綴(自動改副檔名)
手動將\mix\unity3d 目錄移出至外面目錄sort , 避免影響等下的HEX搜索
AB包 Asset Bundle文件(.unity3d)記得要移動出來
Hex Editor Neo是針對\mix 所有文件(含子目錄文件)去搜索
已經確定文件類別的要移出\mix外
這些AB包用Raz AssetStudio 開啟
Options —> Specify Game —> 選FakeHeader
Options —> Export options —> Group exported assets by ----> 選container path
輸出可照原遊戲路徑生成目錄名(這樣比較好整理文件)
AB包可導出PNG圖檔 純文本文字(.atlas .json)
記載使用skel文件訊息_aniInfo.json就在AB包裡
輸出類別選 TextAsset Texture2D MonoBehaviour
MonoBehaviour一定要選 (才能輸出_aniInfo.json)
Step 04
使用Hex Editor Neo找出skel文件 (檔頭 skel head部分)
這遊戲有5種spine版本 , 所以要搜索5次
Hex 搜索 33 2E 38 2E 38 35 (3.8.85) , Hex輸入完畢後按下"查找全部"
Hex 搜索 33 2E 38 2E 38 32 (3.8.82) , Hex輸入完畢後按下"查找全部"
Hex 搜索 33 2E 38 2E 39 37 (3.8.97) , Hex輸入完畢後按下"查找全部"
Hex 搜索 33 2E 38 2E 38 34 (3.8.97) , Hex輸入完畢後按下"查找全部"
Hex 搜索 33 2E 38 2E 39 39 (3.8.99) , Hex輸入完畢後按下"查找全部"
程序會開始自動找出符合搜索條件的文件
搜索完畢後 , 按下右邊放大鏡圖示 , 導出結果 , 另存為文本文件(.txt) , 文件名我命名為skel_head.txt
因為要搜索5次 , skel_head.txt , skel_head2.txt , skel_head3.txt , skel_head4.txt
然後我自己將這5個記載skel絕對路徑文件 , 整合在一起為1個 skel_head.txt
skel_head.txt 記錄一堆skel文件head部分的絕對路徑 , 等下拿去餵bat批次命令用
開啟skel_head.txt 另存新檔 文件編碼"UTF-16E帶簽名" 改選成"UTF-8E不帶簽名" , 存檔覆蓋原文件
使用BAT批次命令 , 自動分類文件
skel_head_sort.rar (838 字节)
skel_head_sort.bat 代碼如下
MD skel_head
REM 創建文件夾 名稱為skel_head
for /f “tokens=*” %%i in (skel_head.txt) DO (
MOVE “%%~i” “skel_head”)
)
REM 讀取skel類型文件清單list , 然後將清單內所有文件移出至skel_head文件夾內
REM 文件清單編碼須為utf-8 未帶簽名
本批次命令不更改後綴 , 維持為u2d , 等下python 命令會用到
因為要配合樓上大佬寫的python代碼 (透過_aniInfo.json找尋u2d skel 文件檔頭+角色技能skel)
將skel_head_sort.bat 與 skel_head.txt 一起放入\mix 目錄底下
運行skel_head_sort.bat , 自動建立目錄和移動文件 , 自動改綴(自動改副檔名)
將\mix\skel_head 目錄移出至外面目錄sort , 避免影響等下的HEX搜索
Step 05
使用Hex Editor Neo找出skel文件 (身體 skel body部分) (角色技能skel 只是不帶skel版本號)
Hex 搜索 41 6E 69 44 61 74 61 2E 62 79 74 65 73 (AniData.bytes) , Hex輸入完畢後按下"查找全部"
這邊我測次過了 , 尋找idle字串不如找AniData.bytes字串 , 搜索結果誤差會比較小
也測試過只搜索 41 6E 69 44 61 74 61 (AniData) , 找到的文件數一樣都是721個(會比實際多 但不影響)
程序會開始自動找出符合搜索條件的文件
搜索完畢後 , 按下右邊放大鏡圖示 , 導出結果 , 另存為文本文件(.txt) , 文件名我命名為skel_body.txt
skel_body.txt 記錄一堆skel文件body部分的絕對路徑 , 等下拿去餵bat批次命令用
開啟skel_body.txt 另存新檔 文件編碼"UTF-16E帶簽名" 改選成"UTF-8E不帶簽名" , 存檔覆蓋原文件
使用BAT批次命令 , 自動分類文件
skel_body_sort.rar (838 字节)
skel_body_sort.bat 代碼如下
MD skel_body
REM 創建文件夾 名稱為skel_body
for /f “tokens=*” %%i in (skel_body.txt) DO (
MOVE “%%~i” “skel_body”)
)
REM 讀取skel類型文件清單list , 然後將清單內所有文件移出至skel_body文件夾內
REM 文件清單編碼須為utf-8 未帶簽名
本批次命令不更改後綴 , 維持為u2d , 等下python 命令會用到
因為要配合樓上大佬寫的python代碼 (透過_aniInfo.json找尋u2d skel 文件檔頭+角色技能skel)
將skel_body_sort.bat 與 skel_body.txt 一起放入\mix 目錄底下
運行skel_body_sort.bat , 自動建立目錄和移動文件 , 自動改綴(自動改副檔名)
將\mix\skel_body 目錄移出至外面目錄sort , 避免影響等下的HEX搜索
目前已經將skel 文件檔頭+角色技能skel 都找出來了
這邊你可以手動都放在一起 , 等下搭配python腳本服用
\sort\skel_head
\sort\skel_body
整合成\sort\skel
後綴都保持著u2d
Step 06
使用Hex Editor Neo找出awb acb文件
找出語音部分(角色語音 技能語音 BGM 效果音)
使用Hex Editor Neo找出usm文件
找出影片部分(角色技能影片 PV)
這本來要分開寫的
但後來整理到最後
看到遊戲的audio & video 文件清單(manifest)
6d51a5f55f9fb034d3035de92227c8c5.u2d (76KB 改後綴為txt)
8575f76ae57cd05b016f5290a95ce291l.u2d (78KB 改後綴為txt)
然後可以發現audio & video u2d文件名會特別的長(兩個hash)
所以也不需要用Hex Editor Neo分類了
可以手動選取這些特別長的文件名u2d
通通放在media目錄下 , 然後再移出\mix 到\sort\media
真的要用Hex Editor Neo找的話
awb acb
Hex 搜索 41 46 53 32 (ASF2) , Hex輸入完畢後按下"查找全部"
usm
Hex 搜索 43 52 49 44 (CRID) , Hex輸入完畢後按下"查找全部"
\sort\media底下u2d文件(audio : awb acb & video : usm)
這邊我用excel寫了2個自動重命名bat批次命令
media_ren.rar (82.0 KB)
media_ren2.rar (80.1 KB)
參照6d51a5f55f9fb034d3035de92227c8c5.u2d
參照8575f76ae57cd05b016f5290a95ce291l.u2d
運行media_ren.bat 後還有剩下再運行 media_ren2.bat
u2d文件自動重新命名並自動更改後綴
此時\sort\media底下會有.awb .acb .usm .acf文件
再搭配批次命令自動依照後綴分類
move_acb_awb_usm.rar (811 字节)
move_acb_awb_usm.bat 代碼如下
MD audio
REM 創建文件夾 名稱為audio
MOVE *.acb audio
REM 移動acb文件至audio目錄內
MOVE *.awb audio
REM 移動awb文件至audio目錄內
MOVE *.acf audio
REM 移動acf文件至acf目錄內
MD movie
REM 創建文件夾 名稱為movie
MOVE *.usm movie
REM 移動usm文件至movie目錄內
自動分類完後
在手動移動至
\sort\audio
\sort\movie
語音部份 (用foobar2000 + 外掛foo_input_vgmstream.fb2k-component 開啟acb awb文件 免hca key)
foobar2000用法我在其它帖子有寫過教程 , 可搜索foobar2000 (可以導出其它聲音格式)
影片部份 (用VGMToolbox 導出m2v文件)
VGMToolbox —> Stream Tools —> Video Demultiplexer —> Options Format選USM(CRI Movie 2) —> Extract Audio and Video
會自動輸出m2d文件
然後再使用ffmpeg批次轉成mp4
這邊我用excel手寫一個批次轉檔命令並自動重新命名
m2v_bat.rar (62.0 KB)
運行m2v_to_mp4.bat後 m2v自動轉檔成mp4 (影片不再二次編碼 單純copy 轉檔速度會很快)
我這邊沒有合併語音 只有單純影片部分
Step 07
\mix底下剩下其他u2d文件
已寫好批次檔自動分類 自動新增目錄 自動更改後綴
move_other.rar (2.9 KB)
運行move_other.bat
Step 08
將剛才用Raz AssetStudio導出的_aniinfo.json文件
路徑在\assets\objects\spine
透過windows自帶搜索功能(右上角)
會找到609個文件
每1個_aniinfo.json文件會對應到2個skel文件(head + body)
head找到718個 , body找到721個
只會用到609 x 2 = 1218個 (實際上找到1439個) (多餘的就沒用到了)
將這609個_aniinfo.json文件額外複製到\sort\skel底下
_aniinfo.json文件和u2d文件放在一起
Step 09
將樓上大佬提供python腳本複制
手動生成txt文本文件
貼上後python腳本
另存文件為skel_merge.py
skel_merge.rar (1.7 KB)
python腳本中
path = r"C:\Users\zjbook\Desktop\bundles"
要改成你目前skel文件(.u2d) 和_aniinfo.json文件所在目錄
我這邊path改成
path = r"Y:\Nox_20240721\com.cyou.xxygb\sort\skel"
將skel_merge.py 放到 \sort\skel 底下
C:\Windows\System32\cmd.exe 複製一份到 \sort\skel 底下
運行cmd.exe 輸入命令python skel_merge.py
開始自動生成目錄output
自動合併head和body skel文件
自動放到output目錄底下
結果發現只生成606個skel文件
後來發現原因是有3個重複文件名 _aniinfo.json文件
只能手動先改 _aniinfo.json文件名
python腳本順利生成609個skel後 , 再手動改skel文件名
要運行.py
這邊你要先安裝好python
python在安裝時
自動添加於環境變數的選項要勾選
Add python.ext to PATH
cmd輸入python命令沒反應時
要手動環境變數設定
我的電腦 —> 內容 —> 進階系統設定 → 環境變數
看下面欄位 ----> 系統變數(S) —> 找到Path —> 編輯
新增路徑 C:\Users\你的電腦名稱\AppData\Local\Programs\Python\Python311
新增路徑 C:\Users\你的電腦名稱\AppData\Local\Programs\Python\Python311\Scripts
前面的BAT批次檔有使用到ffmpeg
也需要手動設定環境變數
我的ffmpeg.exe是放在C:\下
新增路徑 C:\ffmpeg
Step 10
前面Raz AssetStudio輸出好的spine文件在
\assets\objects\spine
先手動運行批次檔.atlas多餘後綴
修改子目錄.asset副檔名(去掉.asset後綴)
修改子目錄.txt副檔名(去掉.txt後綴)
修改子目錄.asset副檔名(去掉.asset後綴).rar (438 字节)
修改子目錄.txt副檔名(去掉.txt後綴).rar (426 字节)
\sort\skel \output底下 將合併好的skel文件
手動移動到 \assets\objects\spine底下
這邊我用excel寫了一個批次自動分類bat
skel_move.rar (74.9 KB)
讓skel文件自動到原本的目錄底下
最後用skeletonViewer-3.8.99.jar開啟即可
這遊戲就是要一直不斷分類整理
所以才要寫一堆BAT批次檔
遊戲本身沒加密
相關工具
太强大了大佬,写的很详细