# 背景

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


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

脚本要读取文件 → 把对应的文件名送给cxdec计算hash → 用hash去XP3封包里面找文件

#方法

  • 运行时dump,也是我最早采用的:KirikiriToolsKrkrDump均可,但是工作量太大了,需要把整个游戏所有分支全部跑一遍,无法自动化处理。
  • 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();

  • reward_image1
愿你保持不变,保持己见,充满热血。
最后更新于 2025-09-14