# 背景
从2021年左右开始,部分KiriKiriZ引擎的galgame无法使用Garbro或者KrkrExtract拆包了,并且修改游戏的exe还会有如下弹窗:

原因是wamsoft给KiriKiriZ加了个Cxdec,游戏运行的时候会往下面这个路径释放一个DLL:C:\Users\{用户名}\AppData\Local\Temp\krkr_{随机12位字符}_{随机8位字符}_{随机5位字符}\
,路径的生成在如下位置:

脚本要读取文件 → 把对应的文件名送给cxdec计算hash → 用hash去XP3封包里面找文件
#方法
- 运行时dump,也是我最早采用的:KirikiriTools和KrkrDump均可,但是工作量太大了,需要把整个游戏所有分支全部跑一遍,无法自动化处理。
- hook cxdec,最近采用的方法:
KrkrExtractForCxdecV2提取出所有文件(hash名称)-> 暴力扫描每个文件的签名(krkrz的脚本基本上都是ks.scn,文件签名为PSB)-> FreeMote解压PSB → 解析json,提取出所有的文件名 → 用krkr_hxv4_dumphash hook住cxdec那个DLL,往里面灌文件名得到对应的hash → 对照映射表还原文件名。 - 动态替换tjs2脚本,将要采用的方法:KirikiriTools不仅能dump文件,也能注入文件
把下面的代码保存为appconfig.tjs
,放在unencrypted文件夹内就能让引擎自己吐文件:
KAGLoadScript("KAGEnvPlayer.tjs");
var scn_list = KAGEnvPlayer.internalGetSceneFileList("!scnlist.txt");
for (var i = 0; i < scn_list.count; ++i) {
try
{
Scripts.evalStorage(scn_list[i] + ".scn");
}
catch{}
}
System.exit();
- 同理,音频文件等也能这样操作:
try
{
Scripts.evalStorage("uts001_001.ogg");
}
catch{}
try
{
Scripts.evalStorage("uts001_002.ogg");
}
catch{}
try
{
Scripts.evalStorage("uts001_003.ogg");
}
catch{}
try
{
Scripts.evalStorage("uts001_004.ogg");
}
catch{}
System.exit();
Comments 1 条评论