GalGame拆包工具exdebopak修改版

格式基本信息

  • 扩展名:.pak
  • 文件头:PAK\0 (50 4b 41 00)
  • 见于:でぼの巣製作所/Studio e.go 2008年以后作品

工具信息

版本历史

v1.02 – 2010/02/01 by asmodean

v1.?? – 2011/06/12 by 7k

  • 编写as-util.h

v2.00 – 2014/07/17 by Fuyin

  • 支持重新打包

v2.02 – 2018/12/21 (you are here)

  • 修复在非LLP64环境下Segment Fault的问题
  • 支持Linux环境
  • 现在需要C++ 11

测试过的游戏

  • 神楽黎明記 1-8
  • 神楽道中記 冬コミ出張編
  • 廻るセカイで永遠なるチカイを
  • 神楽道中記

格式详解

其实和zip差不多,deflate压缩,拿offzip扫一遍就”拆”出来了。当然,实际情况可能复杂一点,包头部是10字节的元数据,后面跟随着zlib压缩后的文件索引。一个索引项由固定长度的几个指针(数据起始位置,压缩前后长度,子目录/文件个数)什么的和一个C字符串组成。目录结构是将索引按顺序保存来存储。如下目录:

main/
+--1.txt
+--2.txt
+--sub1/
| +--s1.txt
+--3.txt
+--sub2/

在索引中大概按如下方式存储(有没有文件类型flag忘了,得看源代码):

namesubcount
main/5
1.txt0
2.txt0
sub1/1
s1.txt0
3.txt0
sub2/0

按照这个格式就可以基于索引重建目录结构。再加上索引中保存了文件名和偏移(废话,不然叫啥索引),剩下的工作其实就是tar xzvf。如果有问题,自己翻源代码。

一点想法与注意事项

Studio e.go早期作品使用了另一种封包格式,更简单,zlib都没过,直接是裸数据无加密存储(tar cf)。两种格式关系不大,索引格式和目录存储方案都不一样。解包工具我写得有,不过考虑到那东西仅仅存在历史意义,或许留给读者当作一个练习题比较合适

不知道这种带压缩的东西能不能走起,拿ANTLR什么的生成一个parser。或者更广泛一点,有没有parser生成器可以收拾加密二进制,手写解包总觉得在重复劳动。

发表评论

电子邮件地址不会被公开。 必填项已用*标注