mfe吧 关注:233贴子:14,191
  • 7回复贴,共1

【技术贴】如何制作简易的防修改存档

只看楼主收藏回复

这个贴虽然在永吧已经有啦,但是基本已经沉下去了,而且我已经做过一遍,这里就给大家讲一遍。


IP属地:福建1楼2016-06-26 22:08回复
    首先,大家使用的存档都是INI格式,那么我们这次就对INI存档做一个小修改,给它加一个签名,读档之前先验证这个签名是否符合,不符合的话直接清档
    这个签名使用不可逆的算法进行生成,我会给出绝大部分的源码,但是具体的签名算法需要大家在我给出的指引下自己写,这样除了有mfa源文件的人以外,谁都别想手动修改你的存档了!


    IP属地:福建2楼2016-06-26 22:09
    回复
      注意:本文假设读者有一定的代码水平,若你完全没接触过MMF的代码,可能看着会很吃力,或者照做做不出来,然后,我建议写代码的时候用英文版(不用中文版),这样会更好些。
      大体思路:
      读档前检测签名是否正确,若不正确,清档
      存档后打上新的签名
      为了防止读档后存档前存档被修改,读档时把整个存档文件读进内存,存档前恢复。
      下面我们将以RainbowEngine为例,讲解带签名存档的制作方法
      开始前,请各位到Extension manager中下载以下的扩展:String Parser和CRC32 Object


      IP属地:福建3楼2016-06-26 22:11
      回复
        分析RainbowEngine的存档读档情况:
        标题画面读取设置,两个设置画面保存设置
        选择存档画面读取存档(读),可以删除存档(写)
        大地图画面可以保存游戏(写)
        标题画面的设置明显会对我们的工作起到干扰,因为如果连它们一起签名,最后的代码会麻烦很多。
        所以我们直接改掉设置保存的文件名:分别在Start Start2 Start3中找到 INI: set current file to "./mafosav.ini"
        把mafosav.ini改成别的文件名,使设置不干扰存档,也就是标题画面的设置一个存档,选关画面一个存档,存档名建议自己取名,不与别人的混淆。


        IP属地:福建4楼2016-06-26 22:13
        回复
          我们在选关画面和所有的需要存档的大地图场景(就是存档帧)摆放一个String Parser和一个CRC32 Object,以便我们的代码进行使用。
          同时取一个全局字符串(下文使用Global String A,请自行替换成自己要用的全局字符串)来保存读档时的存档内容,以防止在执行存档操作前有人修改存档,导致修改过的部分一起被签上正确的签名。
          我们打开“选关画面”场景,在Event Editor中筛选INI Object,会看到如图所示的代码,这是我们要修改的部分。


          IP属地:福建5楼2016-06-26 22:15
          回复
            以上就完成了一个简单但完善的防修改存档格式的制作
            没错,代码量就这么点,虽然可能有点难懂,但照着写就对了
            今后各位可以不用怕选关器了,只要自己对“计算签名”的算法严格保密,谁都别想修改存档,其实就是相应的选关代码有一个相应加密的代码而已。
            以下是LYH制作的例子


            IP属地:福建10楼2016-06-26 22:21
            回复
              那么这个技术贴就到此为止吧,完毕
              希望更多吧友也可以编写技术贴,让MFE吧多些教程


              IP属地:福建11楼2016-06-26 22:23
              回复
                楼主辛苦了!


                来自手机贴吧12楼2016-06-28 22:27
                回复