求魔物娘TD解包教學

r18_10015_1

r18_10121_1

r18_10042_1

r18_10140_2

r18_10148_2

r18_10276_2

python腳本
這次處理紅色大肉棒問題 : )

python.part1.rar (6 MB)

python.part2.rar (5.4 MB)

DMM版遊戲資源清單取得(2025.10.31版本)

Fiddler分析取得DMM版遊戲資源清單URL

https://assets.game-monmusu-td.net/assetbundles/ver_f866b3b5ac/webgl_r18/ablist.json

遊戲資源清單生成URL思路

json文件中
可看到兩個陣列參數 path 與 hash
AB包文件名稱就是兩者合併而來
unity3d file name = hash + path

比如
“hash”: “3331c9be6f5da9df24f5e8e85ddf3b4d”,
“path”: “857a708cf90a7e8371a786438c997343.bytes”,
unity3d file name = hash + path
= 3331c9be6f5da9df24f5e8e85ddf3b4d + 857a708cf90a7e8371a786438c997343.bytes
= 3331c9be6f5da9df24f5e8e85ddf3b4d857a708cf90a7e8371a786438c997343.bytes

由Fiddler分析可知每個AB包文件名前面加上前綴URL可得實際下載地址
base url =

https://assets.game-monmusu-td.net/assetbundles/ver_10004/webgl_r18/

unity3d file name = hash + path
full url = base url + unity3d file name = base url + hash + path
https://assets.game-monmusu-td.net/assetbundles/ver_10004/webgl_r18/3331c9be6f5da9df24f5e8e85ddf3b4d857a708cf90a7e8371a786438c997343.bytes

遊戲資源清單生成URL - python腳本

python 腳本
讀取 ablist.json 文件
讀取 data陣列 , 截取同一個括弧下 “hash”: " 與 ", 之間的字串 , 存於變數 {hash}
讀取 data陣列 , 截取同一個括弧下 “path”: " 與 ", 之間的字串 , 存於變數 {path}
再加上前綴URL https://assets.game-monmusu-td.net/assetbundles/ver_10004/webgl_r18/
新URL = https://assets.game-monmusu-td.net/assetbundles/ver_10004/webgl_r18/ + 變數 {hash} + 變數 {path}
逐行生成

比如

“path”: “857a708cf90a7e8371a786438c997343.bytes”,
“hash”: “3331c9be6f5da9df24f5e8e85ddf3b4d”,
截取字串後
變數 {hash} = 3331c9be6f5da9df24f5e8e85ddf3b4d
變數 {path} = 857a708cf90a7e8371a786438c997343.bytes
新URL = https://assets.game-monmusu-td.net/assetbundles/ver_10004/webgl_r18/ + 變數 {hash} + 變數 {path}
新URL = https://assets.game-monmusu-td.net/assetbundles/ver_10004/webgl_r18/3331c9be6f5da9df24f5e8e85ddf3b4d857a708cf90a7e8371a786438c997343.bytes

生成ablist_url.txt

運行json2url.bat
自動運行json2url.py
自動生成ablist_url.txt

wget下載遊戲資源URL

將ablist_url.txt拿去餵wget
運行wget.bat
自動開始下載遊戲資源
AB包 : 69685 Files (20.3GB)

Raz版AssetStudio抽出AB包資源

AB包路徑 \assetbundles\ver_10004\webgl_r18
輸出設定 : Group exported assets by container path
依照AB內自帶遊戲資源路徑生成目錄分類
Filter Type : AudioClip , TextAsset , Texture2D

python腳本批次處理spine文件後綴思路

SPINE Version : 3.8.79

.atlas.prefab —> .atlas
.prefab —> json
.skel.prefab —> .skel

python腳本批次處理spine文件後綴

運行01_spine_rename.bat
自動運行spine_rename.py
自動修改spine文件後綴

python腳本
自動瀏覽子目錄下所有檔案
自動修正spine文件副檔名
.atlas 與 .skel 為 spine文件
直接修改不用詢問
*.bat 與 *.py 文件
列入例外則不做修改

以ANCII CODE讀取字串
字串中同時有 .png 和 format: RGBA8888
判斷為atlas文件

CASE 1
若atlas文件沒有副檔名
則加上副檔名 .atlas
如 sample —> sample.atlas

CASE 2
若atlas文件有多個副檔名
如 sample.atlas.prefab
則去掉 .prefab 變成 sample.atlas
如 sample.atlas.prefab —> sample.atlas

CASE 3
若atlas文件有多個副檔名
如 sample.atlas.asset
則去掉 .asset 變成 sample.atlas
如 sample.atlas.asset —> sample.atlas

CASE 4
若atlas文件有多個副檔名
如 sample.atlas.atlas
則去掉 .atlas 變成 sample.atlas
如 sample.atlas.atlas —> sample.atlas

CASE 5
若atlas文件副檔名為.bin
則將.bin 修改為 .atlas
如 sample.bin —> sample.atlas

以ANCII CODE讀取字串
字串中同時含有 字串 “skeleton” 和 字串 }
字串 “skeleton” 在內文中
“skeleton”
} 在字串尾部
判斷為json文件

CASE 6
若json文件沒有.json副檔名
則加上副檔名 .json
如 sample —> sample.json

CASE 7
若json文件有多個副檔名
如 sample.json.prefab
則去掉 .prefab 變成 sample.json
如 sample.json.prefab —> sample.json

CASE 8
若json文件有多個副檔名
如 sample.json.asset
則去掉 .asset 變成 sample.json
如 sample.json.asset —> sample.json

CASE 9
若json文件有多個副檔名
如 sample.json.json
則去掉 .json 變成 sample.json
如 sample.json.json —> sample.json

CASE 10
若json文件副檔名為.prefab
則將.prefab 修改為 .json
如 sample.prefab —> sample.json

以HEX讀取字串BINARY文件
BINARY文件中同時含有 HEX 33 2E 38 2E 37 39 (3.8.79) 與 72 6F 6F 74 (root)
判斷為skel文件

CASE 11
若skel文件沒有副檔名
則加上副檔名 .skel
如 sample —> sample.skel

CASE 12
若skel文件有多個副檔名
如 sample.skel.prefab
則去掉 .prefab 變成 sample.skel
如 sample.skel.prefab —> sample.skel

CASE 13
若skel文件有多個副檔名
如 sample.skel.asset
則去掉 .asset 變成 sample.skel
如 sample.skel.asset —> sample.skel

CASE 14
若skel文件有多個副檔名
如 sample.skel.skel
則去掉 .skel 變成 sample.skel
如 sample.skel.skel —> sample.skel

CASE 15
若skel文件副檔名為.prefab
則將.prefab 修改為 .skel
如 sample.prefab —> sample.skel

CASE 16
若skel文件副檔名為.bin
則將.bin 修改為 .skel
如 sample.bin —> sample.skel

python腳本批次處理spine圖檔尺寸大小

運行02_png_resize.bat
自動運行png_resize.py
自動修改PNG圖檔尺寸以符合atlas文件定義

python腳本批次處理spine文件紅色馬賽克思路

經過多次測試後
修改atlas文件中MaskMosaic字串後面第2、3、4行內容
如 xy: 1370, 1845 改成 xy: 1,1
如 size: 347, 199 改成 size: 1,1
如 orig: 349, 201 改成 orig: 1,1

圖片的 XY 座標起點通常位於左上角
其中 X 軸從左向右延伸 , Y 軸從上向下延伸

x , y : 1 , 1 表示由圖片中左上角座標 1 , 1 當起點
size : 1 , 1 表示由圖片中左上角座標 1 , 1 開始移動
從X軸從左向右延伸 1 像素 , 此時座標 2 , 1
從Y軸從上向下延伸 1 像素 , 此時座標 2 , 2
(這邊的X軸定義向右為正值 , Y軸定義向下為正值)
座標 (1,1) (1,2) (2,1) (2,2) 圍成 1 x 1 的正方形

這個正方形就是紅色馬賽克的圖檔範圍大小
通常這一區塊位於整個PNG圖檔左上角透明區域

orig同size
一開始只修改其中一個
後來發現有些Spine打開後發現圖片會錯位
經過多次測試後
xy size orig 都要一起修改
基本上圖片會錯位情況降為0%

紅色馬賽克物件名稱為MaskMosaic
有多塊紅色馬賽克遮罩的話
物件名稱後面加上數字
MaskMosaic1 , MaskMosaic2 , …等

因為紅色馬賽克MaskMosaic這個物件不能刪除
否則開啟skel文件會出錯 (skel文件內骨架名稱有MaskMosaic)

對於紅色馬賽克MaskMosaic這個物件
只能縮小物件範圍大小
範圍放在圖檔透明區域
效果呈顯出來變成 1 x 1 像素的透明遮罩
紅色馬賽克看起來就消失了

因要修改atlas文件
所以python腳本修改前
會生成備份文件 *.atlas.bak

不改成 0 x 0
是因為SPINE PRO開啟後不會圖片不會錯位
頂多出現警告
說偵測到圖片大小變更 (忽視即可)

實際使用SPINE PRO測試後
發現在使用材質解包器時圖片切片會輸出不完整
只能使用未修改過的atlas文件輸出切片
紅色馬賽克遮罩只能使用SPINE PRO刪除物件
修改過的atlas文件可以在官方版和非官方版Viewer上觀看
這是沒問題的 : )

python腳本批次處理spine文件紅色馬賽克

運行03_remove_mosaic.bat
自動運行remove_mosaic.py
自動修改atlas文件
自動修改MaskMosaic字串後面第2行內容
自動修改MaskMosaic字串後面第3行內容
自動修改MaskMosaic字串後面第4行內容
若字串已為 xy: 1,1 、size: 1,1、orig: 1,1 或不存在則跳過修改
修改前自動生成 *.atlas.bak 備份文件
修改後覆蓋原檔 *.atlas 文件

修改後查看色色SPINE
大致上都看不到紅色馬賽克區域了 : )

瀏覽子目錄下所有 *.atlas 檔案

CASE 1
搜索 MaskMosaic1 字串
修改 MaskMosaic1 字串後面第2行內容
如 xy: 1370, 1845 改成 xy: 1,1
若字串已為 orig: 1,1 或 不存在 則跳過修改
修改 MaskMosaic1 字串後面第3行內容
如 size: 347, 199 改成 size: 1,1
若字串已為 size: 1,1 或 不存在 則跳過修改
修改 MaskMosaic1 字串後面第4行內容
如 orig: 349, 201 改成 orig: 1,1
若字串已為 orig: 1,1 或 不存在 則跳過修改
修改後覆蓋原檔 *.atlas 文件
原 *.atlas 檔案 生成備份檔 *.atlas.bak
若未做任何修改 , 則不生成備份檔 *.atlas.bak

CASE 2
搜索 MaskMosaic2 字串
修改 MaskMosaic2 字串後面第2行內容
如 xy: 1370, 1845 改成 xy: 1,1
若字串已為 xy: 1,1 或 不存在 則跳過修改
修改 MaskMosaic2 字串後面第3行內容
如 size: 347, 199 改成 size: 1,1
若字串已為 size: 1,1 或 不存在 則跳過修改
修改 MaskMosaic2 字串後面第4行內容
如 orig: 349, 201 改成 orig: 1,1
若字串已為 orig: 1,1 或 不存在 則跳過修改
修改後覆蓋原檔 *.atlas 文件
原 *.atlas 檔案 生成備份檔 *.atlas.bak
若未做任何修改 , 則不生成備份檔 *.atlas.bak

CASE 3
搜索 MaskMosaic3 字串
修改 MaskMosaic3 字串後面第2行內容
如 xy: 1370, 1845 改成 xy: 1,1
若字串已為 xy: 1,1 或 不存在 則跳過修改
修改 MaskMosaic3 字串後面第3行內容
如 size: 347, 199 改成 size: 1,1
若字串已為 size: 1,1 或 不存在 則跳過修改
修改 MaskMosaic3 字串後面第4行內容
如 orig: 349, 201 改成 orig: 1,1
若字串已為 orig: 1,1 或 不存在 則跳過修改
修改後覆蓋原檔 *.atlas 文件
原 *.atlas 檔案 生成備份檔 *.atlas.bak
若未做任何修改 , 則不生成備份檔 *.atlas.bak

CASE 4
搜索 MaskMosaic4 字串
修改 MaskMosaic4 字串後面第2行內容
如 xy: 1370, 1845 改成 xy: 1,1
若字串已為 xy: 1,1 或 不存在 則跳過修改
修改 MaskMosaic4 字串後面第3行內容
如 size: 347, 199 改成 size: 1,1
若字串已為 size: 1,1 或 不存在 則跳過修改
修改 MaskMosaic4 字串後面第4行內容
如 orig: 349, 201 改成 orig: 1,1
若字串已為 orig: 1,1 或 不存在 則跳過修改
修改後覆蓋原檔 *.atlas 文件
原 *.atlas 檔案 生成備份檔 *.atlas.bak
若未做任何修改 , 則不生成備份檔 *.atlas.bak

CASE 5
搜索 MaskMosaic5 字串
修改 MaskMosaic5 字串後面第2行內容
如 xy: 1370, 1845 改成 xy: 1,1
若字串已為 xy: 1,1 或 不存在 則跳過修改
修改 MaskMosaic5 字串後面第3行內容
如 size: 347, 199 改成 size: 1,1
若字串已為 size: 1,1 或 不存在 則跳過修改
修改 MaskMosaic5 字串後面第4行內容
如 orig: 349, 201 改成 orig: 1,1
若字串已為 orig: 1,1 或 不存在 則跳過修改
修改後覆蓋原檔 *.atlas 文件
原 *.atlas 檔案 生成備份檔 *.atlas.bak
若未做任何修改 , 則不生成備份檔 *.atlas.bak

CASE 6
搜索 MaskMosaic6 字串
修改 MaskMosaic6 字串後面第2行內容
如 xy: 1370, 1845 改成 xy: 1,1
若字串已為 xy: 1,1 或 不存在 則跳過修改
修改 MaskMosaic6 字串後面第3行內容
如 size: 347, 199 改成 size: 1,1
若字串已為 size: 1,1 或 不存在 則跳過修改
修改 MaskMosaic6字串後面第4行內容
如 orig: 349, 201 改成 orig: 1,1
若字串已為 orig: 1,1 或 不存在 則跳過修改
修改後覆蓋原檔 *.atlas 文件
原 *.atlas 檔案 生成備份檔 *.atlas.bak
若未做任何修改 , 則不生成備份檔 *.atlas.bak

CASE 7
搜索 MaskMosaic7 字串
修改 MaskMosaic7 字串後面第2行內容
如 xy: 1370, 1845 改成 xy: 1,1
若字串已為 xy: 1,1 或 不存在 則跳過修改
修改 MaskMosaic7 字串後面第3行內容
如 size: 347, 199 改成 size: 1,1
若字串已為 size: 1,1 或 不存在 則跳過修改
修改 MaskMosaic7 字串後面第4行內容
如 orig: 349, 201 改成 orig: 1,1
若字串已為 orig: 1,1 或 不存在 則跳過修改
修改後覆蓋原檔 *.atlas 文件
原 *.atlas 檔案 生成備份檔 *.atlas.bak
若未做任何修改 , 則不生成備份檔 *.atlas.bak

CASE 8
搜索 MaskMosaic8 字串
修改 MaskMosaic8 字串後面第2行內容
如 xy: 1370, 1845 改成 xy: 1,1
若字串已為 xy: 1,1 或 不存在 則跳過修改
修改 MaskMosaic8 字串後面第3行內容
如 size: 347, 199 改成 size: 1,1
若字串已為 size: 1,1 或 不存在 則跳過修改
修改 MaskMosaic8 字串後面第4行內容
如 orig: 349, 201 改成 orig: 1,1
若字串已為 orig: 1,1 或 不存在 則跳過修改
修改後覆蓋原檔 *.atlas 文件
原 *.atlas 檔案 生成備份檔 *.atlas.bak
若未做任何修改 , 則不生成備份檔 *.atlas.bak

CASE 9
搜索 MaskMosaic 字串
修改 MaskMosaic 字串後面第2行內容
如 xy: 1370, 1845 改成 xy: 1,1
若字串已為 xy: 1,1 或 不存在 則跳過修改
修改 MaskMosaic1 字串後面第3行內容
如 size: 347, 199 改成 size: 1,1
若字串已為 size: 1,1 或 不存在 則跳過修改
修改 MaskMosaic1 字串後面第4行內容
如 orig: 349, 201 改成 orig: 1,1
若字串已為 orig: 1,1 或 不存在 則跳過修改
修改後覆蓋原檔 *.atlas 文件
原 *.atlas 檔案 生成備份檔 *.atlas.bak
若未做任何修改 , 則不生成備份檔 *.atlas.bak

SPINE文件目錄

SPINE文件主要在這3個目錄內
\extract\resources\advscene\texture\character\chr_poses (角色全身表情差分圖) (3.17GB)
\extract\resources\advscene\texture\character\r18_scenes (角色H SCENE) (3.61GB)
\extract\resources\character (角色SD小人) (848MB)

SPINE 版本 : 3.8.79

遊戲資源AB包與抽出資源懶人包載點詳情

遊戲資源AB包與抽出資源懶人包 (RAR密碼 : 1234)
assets.game-monmusu-td.net_20251104.rar (43.1GB)

Google Drive載點

Mega.nz載點

百度盤載點

2 个赞

您好老大!我想利用您的懒人包文件导出GIF图,因此下载使用了Spine Viewer,但发现会出现引人注目的黑边,请教老大指导!

rev10361_02_260227022720_1f201c_10

rev10379_01_260227023842_55db81_10好像还会有奇怪的黑色光晕……?

你都找到这了再搜一搜历史帖子吧
搜出来比直接告诉你收获更大

1 个赞

对不起我的问题,只需要开启“渲染–预乘alpha通道就行了”

请请教大佬,按照步骤到wget那步了,但是403拒绝访问,是哪一步出了问题呀

(后来编辑)啊啊搞定了,ver后面的抄错了,正确下载了,谢谢大佬

26.04.30用fiddler没有抓取到ablist.json,求解惑

我还遇到了这个问题,虽然我已

经下载了提示的core,但弹窗仍然存在

1.确认下载的.NET版本:8.0.x系列;
2.检查下载的.NET类型:运行桌面应用需要 .NET Desktop Runtime 8.0.x。
下载后,大概如下图1.1所示。
图1.1 桌面运行时示例

可以了,但还是抓不到ab包,请问有什么需要注意的地方

教程应该没问题,也有最近的回帖成功过。如果您指的是ablist.json抓取,尽量确保只打开该游戏,重新刷新网页,进入游戏内,打开游戏图鉴之类的,或者尝试新获取一个角色。看一看Fiddler有没有类似的ablist.json文件。

dmm网页端打开f12不就得了。webgl_r18换成android_r18和windows_r18就是三端的。。

换了Microsoft Edge浏览器,抓到了,可能是谷歌没清缓存吧,具体原因不太清楚

能具体说说么,我看了您发布在github上的相关项目,但不知道从何下手

都看到代码了还有什么好解释的。。。
你都抓到了清单文件我就不信你抓不到任意一个资源的下载url
拼个字符串而已没那么复杂如果你不做动态cdn地址解析和动态获取资源清单的url

        cdn = f'{BASE_URL}/ver_{ablist["baseVersion"]}/webgl_r18'

        url_list = []
        for asset in ablist["data"]:
            url = f'{cdn}/{asset["hash"]}{asset["path"]}'
            name = asset["path"].split("/")[-1]
            url_list.append({"url": url, "name": name})

1.用.py文件的话,直接问AI怎么用就可以了,要安装依赖库的话,pip不可用的话,用python -m pip替代pip执行。
2.接着抓包做的话,您的Fiddler其实已经展示下载链接的拼接方法,如图1.1 黄色勾划的部分(把前面传输协议头加上)。


然后编写wget代码,可以参考以下帖子,或者问AI。

whomepack 那边已经直接给你代码了

像这种直接有网页端的游戏,浏览器自带的开发人员工具(F12),会比抓包工具来的快

这个游戏除了剧情文本和数据表是需要md5动态拼接,其他的稍微看看就能知道是怎么拼的

至于获取ablist,构建下载链接的版本号,一个再响应很前面,一个在ablist里面