【技术贴】如何制作简易的防修改存档
mfe吧
全部回复
仅看楼主
level 13
这个贴虽然在永吧已经有啦,但是基本已经沉下去了,而且我已经做过一遍,这里就给大家讲一遍。
[太开心]
2016年06月26日 14点06分 1
level 13
首先,大家使用的存档都是INI格式,那么我们这次就对INI存档做一个小修改,给它加一个签名,读档之前先验证这个签名是否符合,不符合的话直接清档
这个签名使用不可逆的算法进行生成,我会给出绝大部分的源码,但是具体的签名算法需要大家在我给出的指引下自己写,这样除了有mfa源文件的人以外,谁都别想手动修改你的存档了!
2016年06月26日 14点06分 2
level 13
注意:本文假设读者有一定的代码水平,若你完全没接触过MMF的代码,可能看着会很吃力,或者照做做不出来,然后,我建议写代码的时候用英文版(不用中文版),这样会更好些。[太开心]
大体思路:
读档前检测签名是否正确,若不正确,清档
存档后打上新的签名
为了防止读档后存档前存档被修改,读档时把整个存档文件读进内存,存档前恢复。
下面我们将以RainbowEngine为例,讲解带签名存档的制作方法
开始前,请各位到Extension manager中下载以下的扩展:String Parser和CRC32 Object
2016年06月26日 14点06分 3
level 13
分析RainbowEngine的存档读档情况:
标题画面读取设置,两个设置画面保存设置
选择存档画面读取存档(读),可以删除存档(写)
大地图画面可以保存游戏(写)
标题画面的设置明显会对我们的工作起到干扰,因为如果连它们一起签名,最后的代码会麻烦很多。
所以我们直接改掉设置保存的文件名:分别在Start Start2 Start3中找到 INI: set current file to "./mafosav.ini"
把mafosav.ini改成别的文件名,使设置不干扰存档,也就是标题画面的设置一个存档,选关画面一个存档,存档名建议自己取名,不与别人的混淆。
2016年06月26日 14点06分 4
level 13
我们在选关画面和所有的需要存档的大地图场景(就是存档帧)摆放一个String Parser和一个CRC32 Object,以便我们的代码进行使用。
同时取一个全局字符串(下文使用Global String A,请自行替换成自己要用的全局字符串)来保存读档时的存档内容,以防止在执行存档操作前有人修改存档,导致修改过的部分一起被签上
正确的
签名。
我们打开“选关画面”场景,在Event Editor中筛选INI Object,会看到如图所示的代码,这是我们要修改的部分。
2016年06月26日 14点06分 5
level 13
以上就完成了一个简单但完善的防修改存档格式的制作
没错,代码量就这么点,虽然可能有点难懂,但照着写就对了
今后各位可以不用怕选关器了,只要自己对“计算签名”的算法严格保密,谁都别想修改存档,其实就是相应的选关代码有一个相应加密的代码而已。
以下是LYH制作的例子
2016年06月26日 14点06分 10
level 13
那么这个技术贴就到此为止吧,完毕[勉强]
希望更多吧友也可以编写技术贴,让MFE吧多些教程[勉强]
2016年06月26日 14点06分 11
level 11
楼主辛苦了!
2016年06月28日 14点06分 12
1