星趴解包教程


本篇文章偏小白向,有一定基础的可以选择性阅读
本文仅供学习交流使用,请勿用于商业用途。

更新至 2024.5.2, 星趴版本号 v1.2.3_20240430_123a

#1 提取资源文件

  • 启动你的星趴
  • 按下 Ctrl+Shift+Esc 打开任务管理器(右键任务栏,选择「任务管理器」亦可)
  • 找到 AstralParty.exe(如果你看到的是乱序的列表,点击窗口上部左侧的「名称」进行排序)
  • 右键 AstralParty.exe,选择「打开文件所在的位置」
  • 这时候跳出的文件资源管理器的窗口就是星趴的根目录了,大概长这样:
  • 依次打开文件夹 AstralParty_Data StreamingAssets aa StandaloneWindows64,可以看到许多以 .bundle 为扩展名的文件,这些就是星趴的资源文件了
    • 如果没看到扩展名 .bundle,可以点击窗口上部的「查看」,并勾选右侧的「文件扩展名」
  • 我们并不希望影响星趴的正常运行,所以将你想要的文件(如果你不清楚你想要的文件是哪些,那就 Ctrl+A 全选)复制到别的地方(下文以文件夹「tutorial」为例)
    • 不必担心其他类型的文件,它们没有影响

#2 解密

  • 在「tutorial」文件夹下新建一个文本文档并打开
    • 如果没看到扩展名 .txt,可以点击窗口上部的「查看」,并勾选右侧的「文件扩展名」(见图 3)
  • 复制下面的部分至文本文档中
<# :
cls&echo off&cd /d "%~dp0"&rem bat存为ANSI/GB2312编码
path %SYSTEMROOT%\System32\WindowsPowerShell\v1.0;%path%
set "self=%~f0"
powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0'|Out-String|Invoke-Expression"
pause
exit
#>
$self=get-item -literal $env:self;
$current=$self.Directory.FullName.trimend('\');
$len=18;
$newfolder=$current+'\stripped';
if(-not (test-path -literal $newfolder)){[void][IO.Directory]::CreateDirectory($newfolder);}
$files=@(dir -literal $current|?{($self.Extension -ne $_.Extension) -and ($_ -is [System.IO.FileInfo])});
for($i=0;$i -lt $files.length;$i++){
    $arr=[IO.File]::ReadAllBytes($files[$i].FullName);
    $brr=@();
    if($arr.length -gt $len){$brr=$arr[$len..($arr.length-1)];}
    $newfile=$newfolder.trimend('\')+'\'+$files[$i].Name;
    write-host $files[$i].Name ' (' ($i+1) '/' $files.length ')' -Separator '';
    [IO.File]::WriteAllBytes($newfile, $brr);
}

本段代码的目的是去除文件的前 18 个字节

  • 关闭文本文档,将其重命名为 strip.bat
    • 跳出如下窗口时选择「是」
  • 双击打开 strip.bat,待出现「请按任意键继续...」后关闭,此时文件夹 stripped 下的文件就可以用于下一步了

#3 读取资源

  • 打开这个链接(打不开的话多刷新几次),下载页面底部 net7.0 开头的 .zip 文件
  • 解压后打开里面的 AssetStudio.GUI.exe
  • 调整配置如下
    • 别问我为什么可以同时开两个菜单,这是两张图拼起来的
  • 点击左上角的 File 点击菜单中的 Load Folder 并选择刚才的 stripped 文件夹
  • 待下方的进度条满(文件数较多时请耐心等待)后点击上方的 Asset List,即可看到内部的资源
    • 点击部分资源右边会出现预览图

#4 导出资源

#4.1 导出单个 / 少量资源

  • 在左侧列表中选中需要导出的资源并右键,选择 Export selected assets,然后选择放置导出文件的文件夹即可

#4.2 按种类导出资源

  • 点击窗口上部的 Filter Type,一般按需选择 TextAsset(文本)、Texture2D(图片)、VideoClip(视频)即可
  • 点击窗口上部的 Export,在菜单中选择 Filtered assets,然后选择放置导出文件的文件夹即可

#5 资源去重(可选)

  • 在按种类导出资源时,我们可能会遇到资源重复的问题(通常出现在图片类型的资源中),我们通过以下的 Python 脚本除去
import filecmp, os
rootdir = os.path.dirname(__file__)
lst = os.listdir(rootdir)
lst.sort()
lst.remove(os.path.basename(__file__))
# print(lst)
dic = {}
def getRawname(filename: str) -> str: # 获取对应的原始文件名(无后缀)
    return filename.split('.')[0].split('(')[0].strip()
for i in lst: # 根据原始文件名分组
    rawname = getRawname(i)
    if rawname not in dic:
        dic[rawname] = []
    dic[rawname].append(i)
# print(dic.keys())
for rawname in dic.keys():
    dic[rawname] = dic[rawname][-1:] + dic[rawname][:-1] # 把原始文件名对应的文件放在列表开头
    for i in range(len(dic[rawname]) - 1, -1, -1): # 倒序枚举被删除文件的指针
        for j in range(0, i): # 正序枚举模板文件的指针
            if filecmp.cmp(dic[rawname][i], dic[rawname][j]): # 若两文件相同
                os.remove(os.path.join(rootdir, dic[rawname][i]))
                print(f"Removed {dic[rawname][i]}! (equals to {dic[rawname][j]})")
                break

posted @ 2024-05-02 10:14  Ender_hz  阅读(175)  评论(0编辑  收藏  举报