加密地图

来自星际争霸重制版地图研究所
Miko讨论 | 贡献2024年5月15日 (三) 21:28的版本 →‎原理
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

简介

正常情况下,使用地图编辑器制作的地图在发布以后,其他人也可以使用地图编辑器打开,并且和原作者所看到的是一模一样的。不可否认,这样的模式促进了制图技术的分享和交流,但很多地图作者并不希望自己的地图被别人随意修改,也不是每个作者都愿意分享自己写的触发。于是,地图加密技术就应运而生了。

所谓的加密地图,就是指可以正常游玩,但无法使用地图编辑器打开和修改的地图。

原理

无论是原版还是重制版,游戏主程序和地图编辑器在读图时是有区别的,主要区别是以下两点:

1.选择性读取区段,比如玩家的种族、颜色等数据,游戏主程序会读OWNR区段,而地图编辑器读的是IOWN区段;地形数据,游戏主程序读MTXM区段,地图编辑器读TILE区段。加密地图就是将这些游戏主程序不需要的区段全部改名,或者删除,这样地图编辑器打开就会出错。

2.数据读取方式不同,比如当前地图的主题设定值(丛林、沙漠、太空等),地图编辑器会完整读取,但游戏主程序只读取该值的最后三个位(bit),其他的位全部都会丢弃,于是就有人想到了在主程序不需要的位里面填充垃圾数据,这样地图编辑器就无法正确加载地形。

早期的地图加密,虽然具体处理方式各有千秋,但都是基于以上两点来实现。这种加密方式,严格来说并不算“加密”,因为数据都是完好无损的,只需要改变地图编辑器的读图方式,或者手工重新调整一下地图文件,就能轻松破解。而EUD技术的出现,让真正意义上的“加密”变为了可能,因为EUD可以自由地修改星际的内存。于是加密者先将原地图中的触发使用算法进行加密,同时给原地图添加用来解密的EUD触发。地图运行时,用来解密的EUD触发会先取得控制权,将内存中被加密的触发全部还原,然后再把控制权交给原地图,这样就能正常运行了。

使用这种基于EUD的加密处理过的地图,即便将地图中的区段全部都调整正确,依然无法正常读取触发,这样就有效地防止了破解。现在最流行,也是强度最高的星际1地图加密技术——Freeze加密,正是基于此原理设计的,并且它在加密解密的过程中,会使用地图的hash值作为key来参与运算,那么只要地图被修改,哪怕只是解包再重新打包,都无法正常运行,因为地图的hash值变了,那么解密的数据就全部都是错的。再加上还有部分触发被直接转换成虚拟触发去执行,可以说这种“变异”+“虚拟”的加密方式破解难度极大。