galgame CG提取教程

1812 字
9 分钟
galgame CG提取教程
本文仅供个人学习参考,严禁用于商业用途。解包Galgame可能会违反相关最终用户许可协议,并可能违反著作权法。本文不对由此引发的任何后果负责。
本文的技术性不强,主要是对各类现有方案的整理、评价与总结。如果您需要解包的游戏是较新或比较小众的作品,可能找不到能够使用的方法。
写完才感觉好垃圾。。。因为主要想说的代码都封装好了,别的没什么可说的。。。

Galgame 引擎#

首先,你需要判断你想解包的galgame所使用的引擎。当前广泛使用的galgame引擎主要就是Krkr(包括相关的krkrz系列)。此外在作者手中的50部galgame中还有YU-RIS,Musica,Nscripter等引擎,当然这些都比较少见了。

Galgame引擎大体上决定了封包的格式与加密的方式,对我们后面搜集资料进行解包十分重要,务必判断清楚。

Krkr(z)#

这一引擎的特点是包含.xp3文件,基本上有.xp3文件的可以直接确定是Krkr或其衍生的引擎了。柚子社的游戏、调色板社的大部分游戏、还有死馆真百之类的比较有名猎奇的作品都是使用的这一引擎。

Krkr(z)引擎的CG包含在.xp3文件中,并且基本上都进行了加密。现有技术基本上是Hook运行时的游戏进程,直接在游戏进程中提取相关文件。

其他引擎#

是的。。。其他引擎直接合在一起讲了。因为除去Krkr的加密以外,其他引擎的游戏基本都是没有加密的,只是使用了特殊的储存格式,使用相关工具基本就可以解包了

本来我是不信的,但是使用相关工具真的直接打开了大部分的游戏文件。。。当然不排除是汉化组的功劳,已经帮我们解密了相关的文件。(什么?你说你就是为了汉化看本文的?去看第二条WARNING去)

提取CG文件的工具#

本文不再叙述XP3Viewer、KrkrExtract等工具,因为他们对于老游戏支持度较好,但是对于新游戏和我们常见的汉化过得游戏支持度很一般,基本可以被GARbro和KrkrDump替代。

GARbro#

Garbro的页面
Garbro的页面

这位简直是Gal解包领域最高的山。

大部分小众的游戏引擎都可以直接解包,Krkr的xp3文件有些也是可以的,原版已经很久没有维护了,但是有Fork的版本现在仍在维护(Garbro-Mod),可以试一下的。

crskycode
/
GARbro
Visual Novels resource browser
MIT
C#

使用方法很简单,遇到看起来像存储CG的文件直接双击即可。顺便一说,存储CG的文件大都名字里面带有cg、ev等,并且文件较大。

可能会要求选择加密算法,根据游戏的英文名称选择即可。不知道游戏英文名的可以去VNDB查找

选择适合的加密算法,可能需要尝试
选择适合的加密算法,可能需要尝试

KirikiriTools#

上一个工具几乎可以解包所有老游戏。但是他解包出的一些文件可能还是加密状态(比如一些csv文件)。我们可以使用这个工具,从运行时解包一部分解密的文件。

arcusmaximus
/
KirikiriTools
Tools for the Kirikiri visual novel engine
MIT
C++

我们使用到的是其中的version.dll

version.dll拷贝到游戏的根目录,并且创建文件extract-unencrypted.txt。之后启动游戏,推进剧情即可。

这样放置文件
这样放置文件

一些游戏可能会出现失败的情况,甚至会乱码,不过我们提取到我们想要的东西即可

魔女的夜宴就这样无法推进剧情
魔女的夜宴就这样无法推进剧情

但是我们已经拿到了想要的csv文件
但是我们已经拿到了想要的csv文件

KrkrDump#

我也是最近才发现这个工具。尝试下来应该是对新游戏Krkr(z)支持最好的。比如最新的asnine,我尝试过KrkrzExtract、version.dll等方法,均无法解包。

crskycode
/
KrkrDump
Extract files from Kirikiri Z engine.
GPL-3.0
C++

和KirikiriTools一样,复制到游戏根目录。并在游戏根目录创建文件KrKrDump.json,填入以下内容

{
"loglevel": 1,
"enableExtract": true,
"outputDirectory": ".\\dump",
"rules": [
"file://\\./.+?\\.xp3>(.+?\\..+$)",
"archive://./(.+)",
"arc://./(.+)",
"bres://./(.+)"
],
"includeExtensions": [],
"excludeExtensions": [
".ogg"
],
"decryptSimpleCrypt": true
}

**然后在游戏根目录创建dump文件夹

之后需要拖拽游戏exe文件,使用KrkrDumpLoader.exe打开,出现一个命令行窗口即为正常。可以在dump文件夹中找到提取出的文件。

提取CG文件#

使用以上工具尝试解包游戏,CG文件一般是png类型的文件,通常以ev开头,通过缩略图可以很好的辨识,直接取用即可。

如果没有找到png文件,看看能否找到pimg文件,一些Krkr引擎的游戏(尤其是柚子社)使用这种格式。

注意:CG是懒加载的,也就是说,如果是使用KirikiriTools或KrkrDump提取,需要一张张加载CG。可以在鉴赏模式里面过一下。

就这样子一张张点下去就行
就这样子一张张点下去就行

如果都没有找到,尝试换一个文件或换一种方法。

如果以上方法无效,推荐这一篇文章,里面讲述的解包方法可能更详细(其实本文前半部分很多地方都是参考了这篇文章)

但是pimg的合成,其实有更好的方法,请回来再继续看。

PIMG文件的转换#

写完才发现,那篇文章里面也有人在7月21号的时候提出了这种方法。。。

其实这种方法早就有了,原项目是好几年前的了,不过关注度一直不高。。

发现的时候我都已经写完了,所以就还是发出来吧。

很多文章中描述的PIMG文件转换都是使用像素吻合度穷举的方法,但这种方法需要手动进行且有错乱的bug。

其实可以通过pimg本身的元数据和imagediffmap,直接批量转换出所有的CG。

我们需要以下文件:

  • 前面提取的ev*.pimg
  • imagediffmap.csv

其中,imagediffmap.csv一般存在于data.xp3中,动态hook提取也常常能在解包目录中直接找到。

以limelight为例
以limelight为例

注意imagediffmap.csv应该是这样子的纯文本

纯文本
纯文本

如果不是,尝试使用KirikiriDescrambler解密。

除此之外,我们需要python和git运行环境。没有的请自行搜索安装。

转换pimg文件的方法是使用我自己的仓库

lizzzhh
/
PIMG-Decoder-2
KRKR's PIMG -> image
MIT
Python

其实,这个仓库是fork自这个仓库,但原仓库不再维护且不兼容新游戏。

leohu1
/
PIMG-Decoder
KRKR's PIMG -> image
MIT
Python

之后的步骤很简单,先clone我的仓库,并配置运行环境

Terminal window
git clone https://github.com/lizzzhh/PIMG-Decoder-2.git
cd PIMG-Decoder-2
python -m venv .venv
.\.venv\Scripts\activate
pip install -r requirements.txt

然后创建pimg文件夹,将pimg文件复制进这个文件夹。

就像这样
就像这样

并且将解包得到的imagediffmap.csv替换根目录原有的imagediffmap.csv

替换
替换

之后再venv中运行main.py,CG就会被提取到output文件夹。

Terminal window
python main.py

结果
结果

已在ライムライト・レモネードジャム中测试,旧的柚子社游戏实在懒得试了,如果新版不行可以尝试使用原仓库的代码。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
galgame CG提取教程
https://blog.00910721.xyz/posts/galgame-cg-extract/
作者
透明质酸钠
发布于
2026-08-05
许可协议
CC BY-NC 4.0

评论区

Profile Image of the Author
透明质酸钠
宁宁就要0721!
关于网站主题
网站近期修改了主题配置,如果界面还是粉色,请您清空本网站的本地存储~~
分类
标签
最新动态
站点统计
文章
11
分类
7
标签
21
总字数
15,929
运行时长
0
最后活动
0 天前
站点信息
构建平台
Cloudflare Pages
博客版本
Firefly v6.16.5
文章许可
CC BY-NC 4.0