Mental Omega的MIX 文件与公钥清单
一、全局公钥(所有加密 MIX 共用)
RA2/YR 的加密 MIX 全部共用同一把西木(Westwood)类 RSA 公钥:
模数(base64):
AihRvNoIbTn85FZRYNZRcT+i6KpU+maCsEqr3Q5q+LDB5tH7Tz2qQ38V指数:
0x10001
即 core/mixfile.py 里的 _PUBKEY_B64 + _EXP,2000 年起由 XCC 公开(公开知识)。
每个加密 MIX 头里还有一段 80 字节 key_source,用它(配合上面的全局公钥)推导出该文件专属的 56 字节 Blowfish 密钥。所以"公钥"全局只有一把,"密钥"每个加密文件各一把。
二、flags 含义
0x00010000= 带 SHA1 校验和尾(仍是明文包,可正常解析)0x00020000= RSA + Blowfish 加密头部(ra2.mix/ra2md.mix/language.mix)0x30000= 上面两者叠加(加密 + SHA1 尾)0xd4000010/0x02e0000a= MO 私有保护格式(索引被故意打乱,无标准公钥可解)
三、全部 MIX 文件一览
四、三把加密 MIX 各自的 key_source / Blowfish 密钥
ra2.mix
key_source (80B):
7ad285eac52c40068ae8c3962366a5d1f77c4b04d335c190cadabb8c9b25e408654ba327d3db580a30a0d97a6005caa127c839c1f5a28094a6aa4b1ab91156ab881e3061afa04c614d96f580b5753e03Blowfish (56B):
32a29e4ba4231af6d70bd9181818181818181818181818181818181818181818372d57aa86c2ac04f454babbbbbbbbbbbbbbbbbbbbbbbbbb
ra2md.mix
key_source (80B):
14b9ca52002b8edd5134483fdc97e4d3b692a017c649ca31649b5ce2532c740a7cbbed89b8ea13498ed103323fbe74980d7acdb586336a1dde055c7d44a922a5a9fd619330542d8a811f310ca8e34d4dBlowfish (56B):
86cc35620a8a8caa65e42b1ecc181818181818181818181818181818181818182c394e6db40a7042278e39fbfebbbbbbbbbbbbbbbbbbbbbb
language.mix
key_source (80B):
fc32f26b9a1343437596415049ddd93f7b0ffe67d8ba79f87cc7d7daa1ac1a79b8a8a7871852cb46a4c1d80f931fe7fadd8bb2c62adfbc5268fbf88ba03c17b1c5830fa2f131ac45492cd96776bd4f12Blowfish (56B):
0f5c953018181818181818181818181818181818181818181818181818181818dd1de7cbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
五、要点
被西木公钥 + RSA 加密的只有
ra2.mix/ra2md.mix/language.mix三个核心包;其余 MO 扩展包(expandmo94~99)全是明文,因此项目能直接按名字 / CRC 抽取rulesmo.ini、artmo.ini和图标。expandmo10/expandmo11用 MO 自己的私有保护(flags0xd4000010/0x02e0000a,索引被打乱),没有标准公钥可解 —— 这就是gameres.py所说"这些单位没有图标"的原因;上面那把0x10001全局公钥对它们无效。