关于交错战线l2d的提取,我看了好像是BS包(没有见过)有大佬可以教教怎么解包L2D吗或者解一份出。我更希望大佬能授之以渔

这里是安装包https://apps.qoo-app.com/en/app/22989

就是未加密的常规Unity包,用文本编辑器或者你顺手的工具把文件头UnityFS前面的数据删掉就行了

更正,只读取出来了一半文件,我再看看

再次更正,搞明白了,他把多个unity包缝到一起了,根据UnityFS字段所在行把文件分割成多个文件,然后再对每个文件重复一次开头的操作就行了

试了下csplit切出来的文件有的能读有的读不出来,具体原因还没找到,等一个英雄登场

游戏资源两部分,一部分在包内,以.bs为后缀,另一部分在Android的目录(这里我就只提取Custom里面的,剩下的音频视频自己拆)

用16进制查看,没加密,只是有些干扰,写个脚本批量删就好了



加载了2371个,我这边ab资源是有2465个,感觉应该是shader报错不计入其中?

游戏是spine动画不是live2d,直接类型勾选Texture2D和TextAsset,搜spine,按照容器路径导出即可


Spine SDK3.8.99

立绘什么的按照大小排序,一会就找到了,然后按照资源路径导出就好了
顺带一提,Qoo服好像也和谐了,可惜

import os
import shutil

# 指定输入目录和输出目录
input_directory = "./Custom"
output_directory = "./Output"

def contains_unityfs(data):
    return b'\x55\x6E\x69\x74\x79\x46\x53' in data

if not os.path.exists(output_directory):
    os.makedirs(output_directory)
# elif os.listdir(output_directory):
#     print("输出目录不为空,请清空输出目录后重新运行脚本。")
#     exit(1)

total_files = 0
processed_files = 0
skipped_files = 0

for root, dirs, files in os.walk(input_directory):
    for file in files:
        total_files += 1
        input_file_path = os.path.join(root, file)

        relative_path = os.path.relpath(input_file_path, input_directory)
        output_file_path = os.path.join(output_directory, relative_path)

        with open(input_file_path, 'rb') as f:
            file_data = f.read()

        if contains_unityfs(file_data):
            processed_files += 1

            last_occurrence = file_data.rfind(b'\x55\x6E\x69\x74\x79\x46\x53')

            trimmed_data = file_data[last_occurrence:]

            output_file_dir = os.path.dirname(output_file_path)
            if not os.path.exists(output_file_dir):
                os.makedirs(output_file_dir)

            with open(output_file_path, 'wb') as output_file:
                output_file.write(trimmed_data)
        else:
            skipped_files += 1
            if not os.path.exists(output_file_path):
                output_file_dir = os.path.dirname(output_file_path)
                if not os.path.exists(output_file_dir):
                    os.makedirs(output_file_dir)
                shutil.copy2(input_file_path, output_file_path)

        print(f"处理文件: {input_file_path}")

print(f"总文件数: {total_files}")
print(f"处理文件数: {processed_files}")
print(f"跳过文件数: {skipped_files}")
1 个赞

我也同样的问题,apk里的bs包全切完出来2042个文件,只读出来283个