前言

近日看石头门0的动画入迷了,想要入手个游戏来玩玩。

近期steam刚好又有打折活动,不过可惜石头门0只有10%折扣,所以还是以后再买了。

但是石头门打折40%,于是乎又想回顾一下剧情,所以就。。。买!买!买!(买情怀)

当我通关全线后,忽然发现壁纸很久没换了,想换套壁纸,上网搜寻一番mpk解包工具,无果,于是乎就萌生了现在这个Mpk文件解析的念头。

文件结构

虽然mpk的文件结构简单,但是由于没有足够的样本,并不能推敲出所有参数。

结构分析图

为了直观的表达,以下为文件结构分析图。

文件结构图

结构解析

以下带“?”的项为不确定项,有可能为其它情况。

名称 说明 类型 备注
magic 文件标识 char[4] 用于判断是否为mpk文件
version 文件版本 int 值:131072,数据:00 00 02 00
count 文件数量 int
空白 byte[52] 由0填充
files 文件信息 file_info[count] 参考下方结构体
空白 byte[?] 由0填充,大小不定
data 数据 byte[?][count] 大小由file_info决定
  • file_info(struct) - 文件信息
名称 说明 类型 备注
is_zip 是否压缩? int 由0填充,估计是int,用于判断压缩
index 索引 int
offset 偏移位置 long
data_size 数据大小 long 值与后者一致,有可能为压缩大小
zip_size 压缩大小? long 估计为压缩大小,但未发现压缩样本
name 文件名 char[224]

有以上信息,已经足以制作提取工具了,所以也不往下探索了。(我只是想要提取cg当壁纸而已)

下载

随着分析的完成,接着一番code之后,解包工具完成。