DMM ミストトレインガールズ〜霧の世界の車窓から〜 X 抓包求助

ミストトレインガールズ〜霧の世界の車窓から〜 X - FANZA GAMES
抓了好几次。

https://assets4.mist-train-girls.com/production-client-web/254/src/settings.js
这里面有小人立绘

url类似于

https://assets4.mist-train-girls.com/production-client-web/254/res/raw-assets/c7/c7953369-d771-49c7-a4ed-50516fc1237d.png

不过据观察角色立绘等都不在里面,在哪里也一直没找到。

角色的url类似于

https://assets4.mist-train-girls.com/production-client-web-assets/Spines/Adventures/0/0.skel?timestamp=202507011500

CG的url类似于

https://assets4.mist-train-girls.com/production-client-web-assets/Spines/Stills/0/403999302/7.skel?timestamp=202507011500

timestamp只能确定20250701是年月日,1500没变过。
不知道有没有大佬见过这种的?

https://assets4.mist-train-girls.com/production-client-web/255/src/settings.js
https://assets4.mist-train-girls.com/production-client-web/255/src/project.js
cocos2djs这是uuid列表
不过他不是json而是直接写入了js
不过我也没看懂他packedAssets节点里的文件怎么加载的(就是没见过bushi

下载安卓版本或者pc, 这2个版本用的unity, 它只有网页端用的是c2d

安卓端清单应该就是

https://native-assets3.mist-train-girls.com/production-assets/Android/2.46.0/catalog_ex_hd_92.32.2.json.br

https://native-assets3.mist-train-girls.com/production-assets/SavedAssets/DMM/Adult/92.32.2/catalog_ex_hd_92.32.2.json.br

不过好像加密了。

没加密, 它只是brotli压缩

是我见的太少了。

上面两个好像只是CG的资源文件。

上面抓到的都是CG的资源清单。
这边提供一个提取CGurl的py

提取
import os
import json
import re

def extract_bundle_urls():
    # 配置参数
    search_str = "catalog_ex_hd"
    target_key = "m_InternalIds"
    bundle_suffix = ".bundle"
    url_prefix_base = "https://native-assets3.mist-train-girls.com/production-assets/SavedAssets/Exe/Adult/{version}/adult_spine_stills_assets_spine/"
    output_file = "output.txt"
    
    # 存储所有提取的URL
    all_urls = []
    
    # 获取当前目录下所有包含指定字符串的JSON文件
    for filename in os.listdir('.'):
        if (search_str in filename) and filename.endswith('.json'):
            print(f"处理文件: {filename}")
            
            # 提取版本号(匹配catalog_ex_hd_后的字符串,直到.json前)
            version_match = re.search(f'{search_str}_(.*)\.json', filename)
            if not version_match:
                print(f"警告: {filename} 文件名格式不符合要求,无法提取版本号,已跳过")
                continue
            version = version_match.group(1)
            url_prefix = url_prefix_base.format(version=version)
            
            try:
                # 读取JSON文件
                with open(filename, 'r', encoding='utf-8') as f:
                    data = json.load(f)
                
                # 检查是否包含目标键
                if target_key in data and isinstance(data[target_key], list):
                    # 提取包含.bundle的字符串
                    for item in data[target_key]:
                        if bundle_suffix in item:
                            # 去除'/'前包括'/'的字符
                            if '/' in item:
                                bundle_name = item.split('/')[-1]
                                # 生成完整URL
                                full_url = url_prefix + bundle_name
                                all_urls.append(full_url)
            
            except json.JSONDecodeError:
                print(f"警告: {filename} 不是有效的JSON文件,已跳过")
            except Exception as e:
                print(f"处理 {filename} 时出错: {str(e)}")
    
    # 将结果写入输出文件
    with open(output_file, 'w', encoding='utf-8') as f:
        for url in all_urls:
            f.write(url + '\n')
    
    print(f"处理完成,共提取 {len(all_urls)} 个URL,已保存到 {output_file}")

if __name__ == "__main__":
    extract_bundle_urls()

目前不知道角色立绘在哪。
文本有鉴权。

1 个赞

666这不是迷雾列车少女吗 :star_struck:

DMM web版本
這個我是用暴力破解方式,他的清單不好找
但URL很有規則所以好破

https://assets4.mist-train-girls.com/production-client-web-assets/Spines/Stills/[角色編號]/2+[角色編號]+[進化]+0+[固定數字]/still_configuration.json

[角色編號]=1~248 (當時挖的時候只有到248,剛剛測有249)
[進化]=2~4 (我猜測應該是角色進化星數什麼的,暫稱進化)
[固定數字]=105、107、205、207、305、307
[進化跟固定數字可能有其他值]

以34為例大概會這樣
Spines/Stills/34/23420105/still_configuration.json
Spines/Stills/34/23430105/still_configuration.json
Spines/Stills/34/23440105/still_configuration.json
Spines/Stills/34/23440107/still_configuration.json
Spines/Stills/34/23440205/still_configuration.json
Spines/Stills/34/23440207/still_configuration.json
Spines/Stills/34/23440305/still_configuration.json
Spines/Stills/34/23440307/still_configuration.json

https://assets4.mist-train-girls.com/production-client-web-assets/Spines/Stills/34/23420105/still_configuration.json其檔案內部

圖片

再將其組合出
https:// assets4.mist-train-girls.com/production-client-web-assets/Spines/Stills/34/23420105/1.png
https:// assets4.mist-train-girls.com/production-client-web-assets/Spines/Stills/34/23420105/1.atlas
https:// assets4.mist-train-girls.com/production-client-web-assets/Spines/Stills/34/23420105/1.skel
https:// assets4.mist-train-girls.com/production-client-web-assets/Spines/Stills/34/23420105/2m.png
https:// assets4.mist-train-girls.com/production-client-web-assets/Spines/Stills/34/23420105/2m.atlas
https:// assets4.mist-train-girls.com/production-client-web-assets/Spines/Stills/34/23420105/2m.skel
https:// assets4.mist-train-girls.com/production-client-web-assets/Spines/Stills/34/23420105/3.png
https:// assets4.mist-train-girls.com/production-client-web-assets/Spines/Stills/34/23420105/3.atlas
https:// assets4.mist-train-girls.com/production-client-web-assets/Spines/Stills/34/23420105/3.skel

光上面挖出來就高達9GB 可見量之多


缺點就是跟童話邊境一樣都是碎塊,童話是json 好合併
但這款使用skel,有沒有大佬知道skel合併或者skel to json方式

這是我暴力破解挖到的1~248角色URL
205+207我少用out=去分類,在自己補上out=吧,不然下載會全塞再一起
still URL.rar (97.9 KB)

奇怪,我用CG的资源清单下载的没有你的大,但是文件好像更多一些。

我用你的py輸出的
但都沒辦法下載
是有錯嗎?

文件名错了。

web版 png是直接抓取
unity解出來的png 檔案較小
我暴力挖的版本可能有缺

或許可以用安卓版本數字清單去填成web版本URL

网页版url
import os
import json
import re

def extract_still_config_urls():
    # 配置参数
    search_str = "catalog_ex_hd"
    target_key = "m_InternalIdPrefixes"
    start_str = "Assets"
    url_prefix_base = "https://assets4.mist-train-girls.com/production-client-web-assets/Spines/Stills/{character}/{number}/still_configuration.json"
    output_file = "output_still_configuration.txt"
    
    # 存储所有提取的URL
    all_urls = []
    
    # 获取当前目录下所有包含指定字符串的JSON文件
    for filename in os.listdir('.'):
        if (search_str in filename) and filename.endswith('.json'):
            print(f"处理文件: {filename}")
            
            try:
                # 读取JSON文件
                with open(filename, 'r', encoding='utf-8') as f:
                    data = json.load(f)
                
                # 检查是否包含目标键且为列表
                if target_key in data and isinstance(data[target_key], list):
                    # 提取以Assets开头的字符串
                    for item in data[target_key]:
                        if isinstance(item, str) and item.startswith(start_str):
                            # 按'/'分割路径
                            path_parts = item.split('/')
                            # 确保路径至少有足够的部分(倒数第二个和最后一个)
                            if len(path_parts) >= 2:
                                # 如果倒数第二个部分是"Main",则改为0
                                character = path_parts[-2] if path_parts[-2] != "Main" else "0"
                                number = path_parts[-1]
                                # 生成完整URL
                                full_url = url_prefix_base.format(character=character, number=number)
                                all_urls.append(full_url)
            
            except json.JSONDecodeError:
                print(f"警告: {filename} 不是有效的JSON文件,已跳过")
            except Exception as e:
                print(f"处理 {filename} 时出错: {str(e)}")
    
    # 将结果写入输出文件
    with open(output_file, 'w', encoding='utf-8') as f:
        for url in all_urls:
            f.write(url + '\n')
    
    print(f"处理完成,共提取 {len(all_urls)} 个URL,已保存到 {output_file}")

if __name__ == "__main__":
    extract_still_config_urls()

可以提取出still_configuration.json的url。有4个失败了,与其他url格式不同。