HsOjo’s Blog

📒 A powerless rookie's tree hole.

Mpk文件格式(STEINS;GATE)

2018-06-2500 分钟
type
status
date
slug
summary
tags
category
icon
password

前言

近日看石头门0的动画入迷了,想要入手个游戏来玩玩。
近期steam刚好又有打折活动,不过可惜石头门0只有10%折扣,所以还是以后再买了。
但是石头门打折40%,于是乎又想回顾一下剧情,所以就。。。买!买!买!(买情怀)
当我通关全线后,忽然发现壁纸很久没换了,想换套壁纸,上网搜寻一番mpk解包工具,无果,于是乎就萌生了现在这个Mpk文件解析的念头。

文件结构

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

结构分析图

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

结构解析

以下带“?”的项为不确定项,有可能为其它情况。
名称
说明
类型
备注
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之后,解包工具完成。
  • Windows(拖放文件到exe即可,需要VC2015环境)

下一篇

Postfix配置(CentOS6.5)

Loading...