永远的玛丽吧 关注:4,841贴子:242,027
  • 15回复贴,共1

【教程】如何制作简易的防修改存档

只看楼主收藏回复

这东西我早就做出来了,原理很简单,觉得自己藏着掖着不太好,遂发帖造福(个蛋啊)大众
现在大家使用的存档都是INI格式,几乎无一例外
那么我们这次就对INI存档做一个小修改,给它加一个签名,读档之前先验证这个签名是否符合,不符合的话直接清档
这个签名我们使用不可逆的算法进行生成,我会给出绝大部分的源码,但是具体的签名算法需要大家在我给出的指引下自己写,这样除了有mfa源文件的人以外,谁都别想手动修改你的存档了!
图中是我给某个万年巨坑制作的存档格式


来自Android客户端1楼2016-01-23 22:05回复
    等我从厕所出去接着写


    来自Android客户端2楼2016-01-23 22:05
    回复
      注意:本文假设读者有一定的代码水平,若你完全没接触过MMF的代码,可能看着会很吃力,或者照做做不出来
      大体思路:
      读档前检测签名是否正确,若不正确,清档
      存档后打上新的签名
      为了防止读档后存档前存档被修改,读档时把整个存档文件读进内存,存档前恢复。
      下面我们将以最新完整版RainbowEngine为例,讲解带签名存档的制作方法
      工欲善其事必先利其器,开始前,请各位到Extension manager中下载以下的扩展:


      3楼2016-01-23 22:16
      回复
        不小心碰到Ctrl+回车了
        工欲善其事必先利其器,开始前,请各位到Extension manager中下载以下的扩展:
        String Parser
        CRC32 Object


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


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


            6楼2016-01-23 22:25
            回复
              以上就完成了一个简单但完善的防修改存档格式的制作
              没错,代码量就这么点,虽然可能有点难懂,但照着写就对了
              今后各位可以不用怕选关器了,只要自己对“计算签名”的算法严格保密,谁都别想修改存档


              12楼2016-01-23 23:31
              回复
                沙发。没有打算加密存档,因为frame实在太多了,哪个地方忘记了都会出现小bug


                IP属地:澳大利亚来自Android客户端13楼2016-01-24 00:02
                回复
                  打算直接用注册表存档⊙_⊙


                  IP属地:广东来自Android客户端14楼2016-01-24 00:21
                  收起回复