samyyc.dev

点击登入

.. (UTC+8)

-- BPM

Mon Jun 26 2023

Rebirth: Mr Wang 解锁全CG

#86

/

samyyc

/

2220

/

1070日 前更新

Rebirth: Mr Wang 解锁全CG

快速教程

  1. 下载 E70E04A0-D73E-4A80-A51B-FBB6F7C40F12.dat
  2. 重命名为 GameFrameworkSetting.dat
  3. 先关闭游戏,然后放入(或替换)%HOMEPATH%/AppData/LocalLow/DSGame/Rebirth Mr Wang 文件夹下
  4. 启动游戏,点击回想相册,理论上来说应该已经解锁了

实现过程

星宇来了想玩点黄油,懒得过剧情了想着直接看CG玩,于是开始找解锁全CG的教程,

找了一圈也没找到,所以就开始自己探索通往涩涩的道路,

这类黄油一般都是Unity做的,直接找到%HOMEPATH%/AppData/LocalLow/DSGame/Rebirth Mr Wang 路径,路径下有三个文件,

GameFrameworkSetting.dat Label.savPlayer.log . 经过一番摸索后发现GameFrameworkSetting.dat里大概长这样:

FA0CF887-6C4E-428B-A539-B49CB6FCC359.png由于没接触过Unity,所以我暂时没管这堆乱码,去掉这些乱码应该是一个JSON格式,可以看到Revive下有8个JsonObject,每个都有 IsLock 字段,正好对应8个CG,所以我直接推测这就是控制CG解锁的内容

但是CG未解锁的时候IsLock不应该是true吗(划掉)

所以我直接把这8个false全改成了true,原以为这样就可以快快乐乐的开冲了,但是启动游戏后发现回想相册里啥也没有,看了一眼Player.log,报了读取文件的错

又试了一会依然没用,只能开始想办法逆向读取和写入这个文件的代码了

根据Player.log里的报错记录,可以看见加载里用到了StarForce这个类,在Assembly-CSharp.dll这个dll里可以找到,然后顺藤摸瓜一路找到DefaultSetting这个类里面的反序列化方法

D30EA824-F4B4-4780-812D-B6E149A5A61F.png可以看到这里就是一些基本的读取操作,再追踪传进来的这个BinaryReader,在GameFrameworkSerializer里:

F78874BD-CED3-4BEB-B3FC-C7D8279976C1.png可以看到这个reader在传进来前被读取了四次,最后进入callback,也就是上面的Deserialize方法

接下来写一个读取的代码:

CG类

public class CG
    }

读取类

using LitJson;
};

这样读取并修改里面的内容就完成了

然后要把修改完后的内容再写回去

找到GameFrameworkSerializer类里的Serialize方法:

 public bool Serialize(Stream stream, T data, byte version)
        }

可以看到这里先写了3个字节的header,然后写了一个version,这个header是在GameFramework的代码里直接设置的,version直接读取原文件的第四个字节应该就好了(前面用了version这个变量存)

header可以在GameFramework的DefaultSettingSerializer里找到:

49A5201C-B4EA-475B-A645-44D9E48B4B64.png

然后写入设置部分的代码可以在DefaultSetting里找到,这也是作为一个callback使用的

81E9283A-20B6-4A00-854B-84CE7D72B138.png

有了这些之后,就可以开始写写入的代码了

FileStream writeStream = new FileStream("E:/WORKSPACE/rebirth_crack/GameFrameworkSetting.dat", FileMode.Open, FileAccess.ReadWrite);
}

接下来这个GameFrameworkSetting.dat就是解锁CG之后的文件了,可以正常使用