0.声明
本文中的开发工具、第三方资源均用于学习用途,而非商业用途。本文中所有资源截止发稿时已全部删除
1.前言
最近一直在玩阴阳师。玩的时候我们不难观察到,现代游戏的制作中,画面、游戏体验都大大改善,除此之外,游戏开发者对游戏资源的保护也更加重视。
在上古时期的英雄联盟中,有许多类似于盒子之类的工具,可以修改其中的英雄皮肤。此外植物大战僵尸的图片等资源也遭到了网友的篡改,从而诞生了许多未经授权的如“植物醒哥大战非凡哥”、“篮球大战蔡徐坤”等山寨版本游戏。
出现上述情况的问题主要在于,游戏的开发者没能对游戏的资源进行很好的保护。我们观察到,阴阳师游戏中对其资源文件,如图片、模型等进行了打包处理。我们仅从学习角度尝试分析其游戏资源包,以免律师函警告。
2.文件准备
下载阴阳师桌面版,找到安装目录的res.npk文件,所有资源全部打包在这个文件中。
3.解包
解包工具选择quickbms。quickbms是一款专业的游戏拆包封包工具,可以帮我们顺利提取游戏资源。
首先我们下载quickbms,并解压,得到工作文件夹。
值得注意的是,quickbms并不是能够自动提取的,需要根据一定的脚本。也就是说,quickbms更像是一个语言平台,必须根据我们给出的文件提取脚本运行。脚本如下,命名为npk.bms。
idstring "NXPK"
get FILES long
print %FILES% long
get OFFSET asize
xmath OFFSET "OFFSET - (FILES * 0x1c)"
goto OFFSET
for i = 0 < FILES
get NAME_CRC long
get OFFSET long
get ZSIZE long
get SIZE long
get ZCRC long
get CRC long
get FLAGS long
if FLAGS == 2
comtype lz4
else # 0
comtype zlib
endif
if SIZE == ZSIZE
log "" OFFSET SIZE
else
clog "" OFFSET ZSIZE SIZE
endif
next i
由于文件结构比较复杂,我们不过多讨论这段脚本。不过可以大致猜测,文件的头部记录了资源包中包含的文件目录,脚本获取这个目录后再根据其对每个文件进行提取。
同时我们把res.npk复制到quickbms文件夹下,使得quickbms.exe npk.bms res.npk三个文件在同一文件夹下。
然后再命令行中执行
quickbms.exe npk.bms res.npk E:/output
其中E:/output是我们指定的输出文件夹。解压完成后我们可以看到,输出文件夹中已经有了全部的无序的资源文件。
4.提取模型
情报显示,阴阳师的模型文件是以.dat为后缀的,这种模型文件似乎是不能直接查看的,我们可以借助工具RMUviewer进行模型查看并转换为.obj的模型文件。
这里的模型是没有颜色的,因为阴阳师的模型和贴图是分开存储的,我们也可以从相同文件夹下找到贴图.dds文件。
这里我就以神乐小姐姐的模型为例进行探索。我们首先用RMUviewer将神乐的模型转成.obj文件
5.贴图
首先我们找到神乐的贴图文件,这是一个.dds的贴图文件。
打开max3d,打开先前转换的obj文件。
选择相应的贴图并显示
导出之后就可以得到带色彩的obj文件。
6.虚拟现实
随着3D技术的发展,3D格式的文件将会越来越常见,或许会有一天,我们查看3D文件就像习惯于点开图片那样。
上面保存过的.obj文件,我们可以用Windows的3D查看器进行查看。
我们甚至可以打开右上角的混合显示,又会得到AR的效果
7.尾声
理论上说,能拆包就可以封包,我们从理论上可以把游戏资源包内的资源进行替换再封装回原处,上文提到的quickbms就可以实现这一点。但是修改游戏资源包涉嫌违反游戏服务协议。