向GARbro中添加自定义的压缩参数

前言&背景

GARbro的功能十分强大,并自带了多种解密算法;但即使是再强大的引擎也无法囊括所有游戏,何况作者已经好久不更新了(虽然最近不知为何诈尸),更何况GARbro的作者在某个pull request里说了该工程的目标不包括囊括尽可能多的游戏。因此,当我们由于各种目的想要拆包某个游戏的资源文件时,就很大程度上要自食其力了。

前一阵子由于软工做了个机器人,心血来潮想去拆某个frontwing+makura的杀手机器人作品的语音塞到机器人里;在网上随便搜了搜就看到了某位大佬的解密教学,但在跟着流程拿到了加密参数之后,教程的最后一句令不懂C#的我抓耳挠腮:

在GARbro里随便找个地方塞进去,……

上网搜了也搜不到(怎么可能会有),下了源码自己琢磨了半天也不知道塞到哪里去,结果这一卡就是两个月;于是这一篇博客就是来记录如何在GARbro中加入自定义的压缩包加密参数的。

流程

运行GARbro

首先从github上clone下来GARbro的整个工程,使用Visual Studio打开。

在打开的时候,VS很有可能提示.Net版本与当前机器上的版本不符;从最终结果来看除了Net20工程是必须需要.Net 2.0(可以在“启用或关闭Windows功能”里配置)的,其他工程好像都可以直接更新到最新版.Net;不过我是老老实实的去下载了对应版本的.Net。

在这之后,VS很有可能又开始提示你缺少Nuget包;在确认没有乱动什么配置的前提下,可以去手动删除报错工程的.csproj中"<Target Name="EnsureNuGetPackageBuildImports" ..."这一个Target节点,来解决这一个报错。

在这之后VS可能又会报错说缺少一些C#文件;我的情况是缺少Nanami社的某个加密算法文件大概,所以可以直接将该文件从编译路径里删除,并不会影响最后的结果。

在这些步骤之后,你应该可以成功生成GARbro解决方案,并运行GARbro.GUI;如果不行,请向C++和C祈祷,然后去百度或谷歌。

找到对应逻辑

在刚克隆源代码的时候,我本以为很快就能够找到下面这个窗口对应的逻辑;里面明显有字符串元素,只要全局搜索字符串,再反向查找应该就可以了。事实证明我还是太甜了。

如图所示,这里的选项很明显在工程中需要一个字符串来表示;但在工程里全局搜索,甚至用IDA打开文件进行反汇编搜索,都搜不到这个字符串。这使得我一度怀疑GARbro是否真的能从源代码build起来。

在这之后,我去阅读了GUI工程里的大部分逻辑;但是几乎完全没有看到与这个对话框相关的逻辑。直到我在VS上成功build了这个工程,才终于找到了其具体逻辑。

首先,这个对话框实际上并没有写在GUI工程中,而是被放在了ArcFormats/Kirikiri/WidgetXP3.xaml中。这时我才意识到GARbro会自动识别xp3的文件后缀,然后去找Kirikiri引擎的相关加密方式。

在找到这个对话框之后,剩下的就变得简单了。顺着该xaml对应的.cs文件向上摸瓜,可以在App.xaml.cs的第82行找到从文件中读取所有Scheme(加密模式?)的函数调用;跟进追踪该函数,在FormatCatalog.cs的DeserializeScheme函数中可以找到其具体过程(如下图所示)。

静态+动态分析代码可以发现,该函数会读取ArcFormats/Resouces下的Formats.dat,使用zlib库对其进行Deflate解压缩,再将该二进制串转化为SchemeDataBase对象。

既然获得参数的方式已经确定,那么写入参数的方式也自然而然确定了:反过来。

解决方案

首先在ArcXP3.cs中Scheme属性的setter里面把我们的参数组装成CXEncryption塞进去,如下图所示。

然后在App.xaml.cs里的ApplicationStartup函数末尾调用一下SerializeScheme函数,就可以拿到更新后的.dat。这部分代码可以直接模仿该文件里写好的DeserializeScheme函数。

P.S. 这个流程原本大概应该是工程中缺少的SchemeBuilder负责的……

在对原来的.dat文件进行备份后,我们便可以使用生成的.dat文件替换掉原来的.dat文件,来让GARbro读入你所指定的加密引擎参数。跑出来的结果如下图所示。跑不了的话,请自行debug。拆开vol1.xp3看到里面几张e开头的图片的喜悦就不在本文中分享了。

附注

本文仅仅记录了本人将找到的xp3文档加密参数加入GARbro的步骤。如果想要自己去拆包,建议百度相关内容(关键词大概是CXEncryption? Frontwing好像用的大部分都是这个)或者去找KrKrExtract之类的工具。

本文作者不会拆包。

posted @ 2022-05-28 21:24  tadshi  阅读(179)  评论(0编辑  收藏  举报