狠狠厥烂KiriKiriZ Cxdec拆包

逆向工程
7203 编辑于

0x1 背景

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

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

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

0x2 方法

  • 运行时dump,也是我最早采用的:KirikiriTools,但是工作量太大了,需要把整个游戏所有分支全部跑一遍,无法自动化处理。

  • 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();

    拿到scn以后可以用这个脚本解析生成新的tjs去提取别的文件,例如:

    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();

现在主打一个露头就秒

kinotern
kinotern 推了这个话题,吾辈楷模,此贴当浮一大白!
1 个月前
kinotern
kinotern 推了这个话题,我愿称之为本周最佳,没有之一
9 个月前
yk2003
yk2003 推了这个话题,感觉吾之暗黑的半身要觉醒了,必须推!
11 个月前
舞释
舞释 推了这个话题,他觉得这个萝莉写的太好了,足足给了她十根棒棒糖!
11 个月前

本文版权遵循 CC BY-NC 协议 和 本站版权政策

19 条回复

bfloat16
发布于

@LzNO_Hentai #4

有些应该是在tjs里面被调用,可以走运行时dump

或者反汇编tjs2100,然后跟完整的调用链,然后再塞进去算hash

iTsukezigen
发布于

大佬带带

舞释
发布于

求大佬带带~,不会使用求教教,话说LST文件应该怎么使用?放到garbro里用不了诶,有别软件吗?

bfloat16
发布于

@舞释 #7

没用过这个,garbro拆cxdec貌似要全跑一遍

舞释
发布于

@bfloat16 #8

唔~大佬能出个详细一点的视频吗~~求求了~

bfloat16
发布于
舞释
发布于
LzNO_Hentai
发布于

@舞释 #7

lst是解完hash文件名的副产物,跟Formats.dat放一起就行。

舞释
发布于

@LzNO_Hentai #12

image.png唔可是放在一起了诶~image.png但我没找到他的加密诶~

shikwi
发布于

@舞释 #13

因为你没有更新数据库。
Formats.dat是数据库文件,HxNames.lst是用来恢复文件名的
cxdec的游戏,garbro就算能解包,文件名也会显示类似乱码,HxNames.lst维护hash和对应的文件名,解包时才能还原文件名

舞释
发布于

@shikwi #14

求大佬教教怎么办~

LzNO_Hentai
发布于
舞释
发布于
锈蚀之赤
发布于

@LzNO_Hentai #16

请教下大佬,为什么我用garbro检查更新后,有些原本能解包的游戏反而解不了?

这个功能不是将Formats.dat更新到最新吗?还是需要其他操作?

kinotern
发布于

@LzNO_Hentai #16

或许需要重新生成一下SchemeTool?还得把bin放到Garbro根目录,然后运行exe这样子才可以写入,将lst放入到GameData中,但是问题是它名字可以看了,但是文件的查看还有些小问题

(。>︿<。) 已经一滴回复都不剩了哦~