网易游戏解包尝试

# 杂项技术

# 编程

我有在玩《非人学园》这款网易旗下的moba类游戏,然后看到了他们同人的mmd,下面写着模型是由非人学园文件里面提取出来的。
于是心生好奇,也想自己尝试解包试试看。

但是以前的话尝试了两次解包,但是很可惜,没能成功。

但是这次我终于是成功了,hh

现在我将整件事情记录下来,作为技术积累使用。

一、copy应用信息

apk包里面更多的是代码等内容,应用在进入的时候被要求联网更新,另外角色语言和模型都是在进入游戏之后才会下载的程序包,这些内容一般被保存在:Android\data\com.netease.huawei.frxy\

我想要的是人物模型等信息,所以我将其拷贝了一份到电脑上,并对其进行研究。
下面是其的文件夹结构,以及我对其的分析:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
apk_version  
\\校验apk版本,其内的内容:{"apk_ver": "4590023"}
Documents
\\文档存档位置
filelist.txt
\\列出了核心的(登入界面所需要的)文件的位置以及其对应的hash值
init.bm
\\初始化什么的不知名文件
log.txt
log_old_0.txt
\\登入日志文件
neox.xml
\\一些基础的配置信息
npk_version
\\貌似是npk文件的hash值
patch_check_info.txt
\\校验脚本文件
pushnotice.txt
\\是否显示公告?
script.npk_hash_list
\\脚本的hash值
user_data.xml
\\客户端版本等信息

其中单拿neox.xml分析:
这个XML文件描述了一个名为”ppg3d”的配置文件,其中包括以下几个主要部分:

  1. modules:定义了项目使用的模块。

    • python.dll:Python模块。
    • collision.dll:碰撞检测模块。
    • detour.dll:路径寻找模块。
  2. client:定义了客户端的相关设置。

    • DumpPath:错误日志的保存路径。
    • DumpType:错误日志的类型。
    • FontPath:字体文件的路径。
    • ForcedDisplayInitSpinningIconInitViewBackground等:初始化界面的显示设置。
    • UseCADisplayLinkWindowAutoSize等:窗口和显示相关的设置。
    • uis:包含了两个UI框架的设置,分别是cocosuipygame
  3. filesystems:定义了文件系统的加载设置。

    • resscript是两个文件系统。
    • 每个文件系统下包含多个loader元素,定义了不同深度和类型的文件加载方式,包括加载器名称、开启者、根目录等。
  4. render:定义了渲染相关的设置。

    • DepthEnableDepthShadowEnableESM等:深度、阴影和抗锯齿等渲染效果的设置。
  5. cocosui:定义了Cocos UI相关的设置。

    • DisableRunTimelineWhenLoadCsbEnableBatchOptimize等:优化和加载相关设置。
    • FontNameMap:定义了字体名称和文件路径的映射关系。
  6. rsync:定义了数据同步相关的设置。

  7. world:定义了游戏世界的设置。

    • GpuParticleGpuSkinningEnableHardwareInstancing等:GPU粒子、骨骼动画和实例化等渲染技术的启用状态。
  8. python:定义了Python脚本相关的设置,包括是否启用线程。


通过更改游戏文件,我们可以发现游戏校验的基本逻辑是从网站上获取文件应该有的目录和对应的一级文件的hash值,如果发现hash值不一样,则将文件强制覆盖。

然后这些一级文件中有的是记录对应的二级hash值的文件,然后程序再校验这些二级的文件内容是否正确。

这样就避免了每次校对都需要校对大量文件的问题,从而提高了文件校对速度,减轻了服务器资源的消耗。

二、document 文件存档位置

这个文件夹里面包含了所有角色的建模,贴图,音频……

1.模型的获取

但是所有的文件都使用了npk进行加密,所以所需要对其进行解密:

或许你应该注意到了,为什么非人学园的配置文件使用的是neoX这个名字?
其实非人学园使用的是网易自研的neoX系统,所以说我以此为方向找到了大佬们写的工具:zhouhang95/neox_tools at gltf (github.com)

可以直接解码npk文件,并把其导出为mesh^1 文件。

2.音频的获取

游戏中常使用bnk文件,将一个角色的多条语音合并在一起并进行压缩,我们想要解开bnk文件就得先将音频分离然后将其转码为MP3。

这里有另外一个大佬的工具:Vextil/Wwise-Unpacker: Unpack game audio Wwise files (pck, bnk) (github.com)
可以打开pck, bnk文件。

三、尾声

至此问题已基本上解决了,有关于这些模型文件和音频如何使用则有是另外一件事了~

另外,这里解压出的是一些资源类文件,其中还有一部分内容使用的是Pyc^2 ,Nxs文件,这一部分大多是代码文件,我个人感觉用不到,所以说没有研究如何解压。但是可以看看这篇文章:
网易游戏的四种解密&解包,附工具 - 知乎 (zhihu.com)


Reference

Vextil/Wwise-Unpacker: Unpack game audio Wwise files (pck, bnk) (github.com)

zhouhang95/neox_tools at gltf (github.com)

网易游戏的四种解密&解包,附工具 - 知乎 (zhihu.com)