.mek 文件按照顺序结构,大致可以从上至下分为
1 | 1 头部偏移 |
本次主要记录的是其中的 2 机体本体信息,会记录从如何发现规律,到实现思路的全过程。
1.观察二进制
使用任意一款二进制查看工具,将字符集调整到日语,我这里使用的是 010 Editor 。
[p1]
看到开头处一定不会觉得陌生,因为这里明显就是每个机体的基本信息。并且是以 00 为字符串的结尾符。其开头的 01 00 00 00 则是存在 FLAG,用于给 NeXAS 引擎判断下一个块是否存在,不存在会直接 return 。
那么,其组成大致就可按直觉表述为
1 | class Weapon { |
其下方的数据块均为小端整型,4 字节的数据。
观察别的 .mek 文件,会发现均为相同特征,且 leInts 的大小均完全相等,说明此 part 并不存在运行时的动态读取,而是以固定的顺序依次加载并使用。
[p2]
2.反编译静态分析
若上述结论正确,其特征应该也能在各种反编译工具中轻易找到,这里使用 IDA pro 进行静态分析。
寻找逻辑的方向就是直接全局搜索 .mek 字符串,并在使用到该字符串的周围,以及其下方的部分函数中,寻找是否有连续的字符串读取和连续的数值读取。(当然,你首先要能看出哪个函数是从流里读出数据的)
果不其然,在其中一个 .mek 字符串被引用到的,下方的一个函数中,能找到与二进制排布顺序完全一致的线性读取逻辑。
[p3]
此外,还能发现很多明显是用于开发的日语字符串,这里也被封到游戏 exe 里了,不过后续通过 resource hacker 发现,此处其实是 devtools 的 ui 里的文字。
[p4]
[p5]
那么,剩下的就简单了,对于任何一个玩这游戏好几百小时的人来说,估计看到数值就能猜个八九不离十,轻易找出机体信息内各种数值的含义,哪怕不知道,稍微改改封回去,也能立马悟到。
其实现如下: