Tonyha7 发表于 2022-11-26 14:05

记解包一个Unity引擎的视觉小说

### 前言
对于解包Unity引擎的资源 已经有不少优秀的开源工具
但是这款游戏是厂商自己实现的资源加密 这几天有空就研究了下解包
文章中可能有不当之处 还请大牛们多多包涵
### 分析
dnspy打开游戏目录下的Assembly-CSharp.dll
先搜索游戏资源文件的后缀.dat
https://file.moetu.org/images/2022/11/26/dnSpy-x86_oCjyqTIGRnaefed6e10a789eb1.png
这个PRead的类比较像 进去看看有什么方法
https://file.moetu.org/images/2022/11/26/dnSpy-x86_Jl2t8NjnBPb5ba1d2aebd78d8c.png
https://file.moetu.org/images/2022/11/26/dnSpy-x86_p4u28k3sr4034aaa9476c4d94f.png
通过查看调用 大致能猜到这个字节数组Data返回的应该是文件
https://file.moetu.org/images/2022/11/26/dnSpy-x86_CcVXyDnpxHdf6726a9754fadae.png
这个字典ti存储了文件名和文件的信息
大致流程是先new一个PRead(.dat文件路径) 然后通过传入文件名让Data返回文件的字节数组
有了这些 可以试试解包了
### 写解包程序
vs新建个控制台项目 新建个PRead类
直接把dnspy反编译的代码粘贴过来
把需要用到的东西修饰符都改成public 防止访问不了
https://file.moetu.org/images/2022/11/26/devenv_zvHOSQRSeZab0e69bfdb9b9953.png
然后模仿刚才的流程 把返回的字节数组用BinaryWriter写入文件
```
      static void Main(string[] args)
      {
            PRead pRead;
            Console.WriteLine("鍵入dat完整路徑(如C:\\Games\\[蒼の彼方のフォーリズム][苍之彼方的四重奏]\\Aokana_Data\\sprites.dat):");
            String dat = Console.ReadLine();
            Console.WriteLine("鍵入輸出路徑(如F:/):");
            String outpath = Console.ReadLine();
            
            pRead = new PRead(dat);
            foreach (string fileName in pRead.ti.Keys) {
            if (!Directory.Exists(outpath)){
                  Directory.CreateDirectory(outpath);
                }
                Directory.CreateDirectory(Path.GetDirectoryName(Path.Combine(outpath, fileName)));
                FileStream fs = new FileStream(Path.Combine(outpath, fileName), FileMode.Create, FileAccess.Write);
                BinaryWriter binaryWriter = new BinaryWriter(fs);
                byte[] array = pRead.File(fileName);
                if (array!=null)
                {
                  foreach (byte b in array)
                  {
                        binaryWriter.Write(b);
                  }
                  binaryWriter.Close();
                }
            }
      }
```
https://file.moetu.org/images/2022/11/26/explorer_0qjQFyVUaZf149a060d354a930.png
搞定 这里解包的是bg.dat 其他文件有的有点辣眼睛 就不截图了

yiting8 发表于 2022-11-26 15:11

就是要看辣眼睛的

Tonyha7 发表于 2022-11-26 20:07

WaltYoung 发表于 2022-11-26 18:16
怎么判断一个视觉小说是不是unity引擎的呢?

找特征啊 Unity特征很多的 比如UnityCrashHandler 游戏_Data\Managed\Assembly-CSharp.dll 这些

dofu05jj7uu 发表于 2022-11-26 14:21

感谢分享学习了!

victorli 发表于 2022-11-26 15:51

大佬666,感谢分享

Suppose 发表于 2022-11-26 17:30

不辣眼睛的谁看啊

WaltYoung 发表于 2022-11-26 18:16

怎么判断一个视觉小说是不是unity引擎的呢?

wyd521 发表于 2022-11-26 20:35

感谢楼主的分享

BOSS123 发表于 2022-11-26 21:31


怎么判一个视觉小说是unity引擎的呢

ssshoi 发表于 2022-11-26 22:49

感谢分享啧啧
页: [1] 2 3 4
查看完整版本: 记解包一个Unity引擎的视觉小说