Asset Classes解析

遇到这种资源列表在包里的如何导出

list中无数据


webgl.zip (187.0 KB)

Options->Display all assets


一样也是空的

临时造的轮子似乎能导出来。。。但是看他好像有两个结构一个有一些不在清单里面属于其他本地文件(可能)接不知道怎么过滤了

import re

with open(r"webgl", "r", encoding="utf-8", errors="ignore") as f:
    content = f.read()
assets = re.findall(r"assets-bundles-[^\x00]*?(?:\_png|\_prefab|\_mp3)", content)
with open(r"webglo.txt", "w",encoding='utf-8') as f:
    f.write("\n".join(assets))

你试试看行不行,临时弄得.

import sys
import json
from pathlib import Path
from typing import List, Dict
import UnityPy
import pandas as pd

def load_manifest(ab_path: Path) -> Dict:
    env = UnityPy.load(str(ab_path))
    for obj in env.objects:
        if obj.type.name == "AssetBundleManifest":
            return obj.read_typetree()

def parse_manifest(tree: Dict) -> List[Dict]:
    index_to_name = {int(idx): name for idx, name in tree.get("AssetBundleNames", [])}

    results = []
    for entry in tree.get("AssetBundleInfos", []):
        idx: int = int(entry[0])
        raw_info: Dict = entry[1]
        name = index_to_name.get(idx, f"<Unknown:{idx}>")

        h_bytes = raw_info["AssetBundleHash"]
        hash_hex = "".join(f"{h_bytes[f'bytes[{i}]']:02x}" for i in range(16))

        deps_idx = raw_info.get("AssetBundleDependencies", [])
        deps_names = [index_to_name.get(d, f"<Unknown:{d}>") for d in deps_idx]

        results.append(
            {
                "index": idx,
                "name": name,
                "hash": hash_hex,
                "deps_index": deps_idx,
                "deps_name": deps_names,
            }
        )
    return results


def main() -> None:
    import argparse

    parser = argparse.ArgumentParser()
    parser.add_argument("ab_file")
    parser.add_argument(
        "-o"
    )
    args = parser.parse_args()
    ab_path = Path(args.ab_file).expanduser()
    tree = load_manifest(ab_path)
    parsed = parse_manifest(tree)

    out_path = Path(args.o)
    if out_path.suffix.lower() == ".json":
        out_path.write_text(json.dumps(parsed, ensure_ascii=False, indent=4))
    elif out_path.suffix.lower() == ".csv":
        df = pd.json_normalize(parsed)
        df.to_csv(out_path, index=False)

if __name__ == "__main__":
    main()

先选再导入
image

感谢两位大佬的指点,目前清单已经成功读出