第一天正式开始逆向,已经确定大体结构,记录下逆向反序列化 .mek 文件的思路。
1.确定大块
在bsdx中的 .mek 文件的它们大概率用的是同一套解析逻辑,意味着可以将其规律整合抽象为类,统一反序列化。
其中根据群友二进制编辑后整合的结论来看,不难得出以下对于大块规律的结论。
①区块大小块
第一个块固定为24字节,因为是32位游戏程序,所以读取方式为小端序有符号整型,以 Aki.mek 为例,以下为第一块的hex形式字符
1 2
| 00000000 18 00 00 00 7F 01 00 00 EF 01 00 00 EB 0B 00 00 00000010 B2 28 00 00 D3 2A 00 00
|
数值分别为 24 383 495 3051 10418 10963
将其简单分别称为 序列1 序列2 序列3 序列4 序列5 序列6
先说结论,
- 序列1为从起始位置读起的区块大小块总字节
- 序列2为从起始位置读起的区块大小块+机体信息总字节
- 序列3为从起始位置读起的区块大小块+机体信息+未知信息1总字节
- 序列4为从起始位置读起的区块大小块+机体信息+未知信息1+武装信息总字节
- 序列5为从起始位置读起的**区块大小块+机体信息+未知信息1+武装信息+AI信息1(?)**总字节
- 序列6为从起始位置读起的**区块大小块+机体信息+未知信息1+武装信息+AI信息1(?)+AI信息2(?)**总字节
所以不难看出,每块的字节数,也就是长度,可由序列递减得出。
②机体信息块
序列2-序列1=359,则为该块大小,取对应的字节序列如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| 00000010 83 56 83 8B 83 74 83 40 00000020 00 53 49 4C 50 48 41 00 90 BC 96 EC 20 88 9F 8B 00000030 47 00 41 4B 49 20 4E 49 53 48 49 4E 4F 00 88 9F 00000040 8B 47 82 AA 8B 43 82 DC 82 AE 82 EA 82 C5 82 63 00000050 82 6B 82 B5 82 BD 83 56 83 85 83 7E 83 4E 83 89 00000060 83 80 81 42 82 E2 82 CD 82 E8 8E A9 8E D0 82 CC 00000070 90 BB 95 69 82 AA 8D 44 82 DD 81 42 83 8A 83 41 00000080 83 8B 82 E6 82 E8 89 BC 91 7A 82 C6 82 CC 91 8A 00000090 90 AB 82 AA 97 C7 82 A2 88 9F 8B 47 82 CD 88 D3 000000A0 8A 4F 82 C6 8F E6 82 E8 82 B1 82 C8 82 B9 82 C4 000000B0 82 A2 82 E9 82 E6 82 A4 82 C5 82 B7 81 42 90 AB 000000C0 94 5C 93 49 82 C9 82 CD 83 56 83 8B 83 74 83 40 000000D0 82 C6 82 D9 82 C6 82 F1 82 C7 95 CF 82 ED 82 E7 000000E0 82 C8 82 A2 82 C5 82 B7 82 AA 91 E5 97 CA 82 C9 000000F0 83 7A 81 5B 83 7E 83 93 83 4F 83 8C 81 5B 83 55 00000100 81 5B 82 F0 95 FA 82 C2 83 74 83 48 81 5B 83 58 00000110 83 4E 83 89 83 62 83 56 83 85 82 AA 8E 67 82 A6 00000120 82 DC 82 B7 81 42 00 10 00 00 00 26 00 00 00 0E 00000130 00 00 00 1E 00 00 00 41 00 00 00 64 00 00 00 00 00000140 00 00 00 06 00 00 00 00 00 00 00 04 00 00 00 00 00000150 00 00 00 C8 00 00 00 02 00 00 00 04 00 00 00 03 00000160 00 00 00 03 00 00 00 00 00 00 00 02 00 00 00 05 00000170 00 00 00 09 00 00 00 09 00 00 00 00 00 00 00
|
遗憾的是本人还未发现具体规律以及数值的意义,但可以确定的是,数据是以文本信息(Shift-JIS)+数据信息的顺序排列。
③未知信息1
序列3-序列2=112,则为该块大小,取对应的字节序列如下
1 2 3 4 5 6 7 8
| 00000170 FF 00000180 FF FF FF 00 00 00 00 FF FF FF FF 01 00 00 00 FF 00000190 FF FF FF 01 00 00 00 FF FF FF FF FF FF FF FF FF 000001A0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 000001B0 FF FF FF 02 00 00 00 FF FF FF FF 03 00 00 00 FF 000001C0 FF FF FF 04 00 00 00 FF FF FF FF 05 00 00 00 FF 000001D0 FF FF FF 06 00 00 00 FF FF FF FF 07 00 00 00 FF 000001E0 FF FF FF 08 00 00 00 FF FF FF FF 09 00 00 00
|
所以这里面到底是啥呢?
④武装信息
序列4-序列3=2556,则为该块大小,取对应的字节序列如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| 000001E0 0B 000001F0 00 00 00 01 00 00 00 83 6F 83 8C 83 8B 83 58 83 00000200 5E 83 93 83 76 00 30 30 30 31 00 8F 65 8F B0 82 00000210 C5 89 A3 82 E8 82 C2 82 AF 82 C4 8D 55 8C 82 82 00000220 B5 82 DC 82 B7 81 42 83 7B 83 5E 83 93 82 F0 89 00000230 9F 82 B5 82 C1 82 CF 82 C8 82 B5 82 C9 82 B7 82 00000240 E9 8E 96 82 C5 8D C5 91 E5 82 52 89 F1 89 A3 82 00000250 E9 8E 96 82 AA 82 C5 82 AB 82 DC 82 B7 81 42 00 00000260 FF FF FF FF 0A 00 00 00 00 00 00 00 0A 00 00 00 00000270 00 00 00 00 00 00 00 00 3C 00 00 00 00 00 00 00 00000280 00 00 00 00 00 00 00 00 0A 00 00 00 00 00 00 00 00000290 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 000002A0 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 。。。。 00000BA0 FF FF FF 14 00 00 00 00 00 00 00 01 00 00 00 00 00000BB0 00 00 00 00 00 00 00 32 00 00 00 02 00 00 00 00 00000BC0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000BD0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000BE0 00 00 00 00 00 00 00 01 00 00 00
|
开头的第一个int值为武装的总数量,比如这里aki,写着有11个。但是进游戏一看,只有10个武装啊!原因是……还是下次再写吧。然后剩下的便是武装列表的各种武装,其具体数值对应的意义后续再研究。
⑤AI信息1(?)
⑥AI信息2(?)
两者大概率为同样的ai信息,并不打算逆向此部分,因此放弃研究,值得注意的是这两个块的头部分别有一个或两个数值,代表着什么呢?