魔兽地图编辑器吧 关注:65,412贴子:3,842,059

【搬运工】魔兽地图加密及相关反作弊原理

只看楼主收藏回复



1楼2010-07-12 21:10回复
    1.不可还原式删除加密, 即破坏性加密
    说明: 这种加密难度小, 方法简单, 比较常用
    原理: 魔兽的地图是一个mpq压缩文件, 里面存放了一些游戏中和WE中要用的数据, 其中一部分数据是只有WE要用而游戏时不要用的, 我们可以将它们移掉, 造成启动WE无法读到相关数据
    方法: 1.用Import Manager导入这些文件的替代空文件 2.用mpq工具删掉这些文件
    破解可能: 由于需要的文件已经被移掉, 而Jass->Trigger的还原难度非常大, 所以基本不能完全还原原来的地图
    2.可还原式移动加密
    说明: 这种加密比较复杂, 但可以利用一些密钥还原
    原理: 根据上面一种方法的原理, 我们把地图里的一些文件改名为特殊的文件名或者移动到特殊的目录去, 并且删掉(listfile), 这个文件是用于获取mpq格式的文件里面的文件列表的, 这样WE也无法读取到这些文件从而无法启动
    方法: 根据一定的算法把密钥哈希成一个字符串, 然后把文件改名或者移动到用这个字符串生成的文件名里. 还原时只要有密钥就可以找到移动后的文件并还原
    破解可能: 这些算法通常是md5等不可逆算法, 或RSA等大素数可逆算法, 加上我们根本连移动或改名后的文件名或路径都不知道, 基本很难破, 除非你知道密钥
    3.可还原式破坏WE显示加密
    说明: 该方法简单但如果被知道了了方法很容易破解
    原理: WE启动时和读取地图时会读取一些模型, 音乐, 贴图等, 如果我们导入一些错误的文件, 在WE读取时会先读地图里的文件, 就会因为这些错误的文件而出错
    破解可能: 如果你知道这个方法, 那麼只要从地图里删除坏文件就可以了
    然后讲一下几个加密中会用到的技巧:
    1.删掉(listfile), 这样别人不能看你的文件列表, 无法知道你的加密方法
    2.把war3map.j移动到Scripts目录下, 这样仍然被游戏读取, 但是一般人不知道就会无法解压出这个文件
    3.针对一些mpq工具可能会将文件头部的一个数改掉导致mpq工具无法处理, 通常offset是0x218, 用16进制工具把这个位置改为20 00 00 00即可还原
    最后讲一下如何研究加密的地图:
    1.学会Jass语言
    2.用mpq工具解压出war3map.j(如果没有则参见上面的第二条解压Scriptswar3map.j), 注意如果mpq工具如果不能读取则按照上面第3条的做法修复文件头
    3.结合所学的Jass看war3map.j, 就能知道对方地图的处理过程
    4. 关于地形的获得我还没有好办法, 我把别人的地形文件导进自己的地图会出现读取错误, 估计是有些选项必须符合, 考虑到有些人加密地图就是为了保护地形不让别人"盗版", 所以我也没有多做研究, 只要知道war3map.j的内容就可以学习别人所有的地图处理过程了
    总结一下:
    解密是很难的, 但是可以通过解压war3map.j来分析别人的地图, 希望这篇文章对大家关于加密解密的争论能给出一个理论依据
    下边是一些有用的文件的列表
    war3map.w3u 单位
    war3map.w3t 物品
    war3map.w3b 可破坏的
    war3map.w3d 地形装饰物
    war3map.w3a 技能
    war3map.w3h 魔法特效
    war3map.w3q 升级
    等等,这些都是地图的基本设置文件,
    我们可以用WE中的物品编辑器直接导入进行编辑。
    war3map.wtg 触发事件
    这个是保存各种触发事件的地方。我们在地图里搞装备合成,刷怪,作任务
    等,都是依*触发指令来完成的。但是一般的加密地图都把war3map.wtg和war3map.wts删除了。
    war3map.j jass数据库
    这个是地图的核心,所有跟地图设置有关的资料如地图摆放的建筑物、角色、技能、触发事件的指令等等,只可惜是用jass语言保存的。如果你懂jass的话可以在这个文件里任意改动任何数据。包括触发指令。
    war3map.shd 地层数据
    war3map.wpm mp3,wav等媒体文件的设置
    war3mapPreview.tga 地图缩略图
    war3mapmap.blp 图形文件的设置
    war3mapmisc.txt 游戏平衡常数
    下边是最重要的,因为很多人把文件修改完以后都不知道该怎麼还原。
    我们现在就要用到mpqediten或MPQWorkshop了
    新建一个MPQ文件,然后把那些文件全部添加进去再保存。
    现在你们得到一个MPQ文件了。下一步是添加w3x地图文件的文件头
    你们用UltraEdit-32随便打开一个w3x魔兽地图文件和自己的mpq文件。
    对比一下,你们就会发现w3x文件比MPQ文件多了一个16字节的文件头
    后边的事我不用说了吧,w3x文件中复制,然后在MPQ中粘贴这个
    16字节的文件头,然后把后缀名MPQ改成w3x就可以了。 几个地图编辑帮助软件
    WE Unlimited
       简单介绍:WE Unlimited 是 WE 的一个功能性补丁~~增加了很多的功能~~详细说明请看压缩包中的说明文件~~
    Zepirs Map Editor
       简单介绍:这是外国高手自己做的地图编辑器~~虽然看起来没有官方 WE 实用和优秀~~但是却拥有一些 WE 不具备的功能~~比如可以不顾规则乱放东西~~
       注意事项:被这个工具编辑后的地图最好用 WE 读取并存储一次以消除可能的错误~~
       Ext Protect V0.1.0.7b [Size: 92 kb]
       简单介绍:小巧的加密软件,使用是很方便的:)
       Heavy Locker [Size: 236 kb]
       简单介绍:基本上是用来为地图加密的~~在国外评价似乎比较高
       注意事项:此工具并没有 解密 功能~~
       Jass Editor
       简单介绍:可以方便的编写 JASS 程序的工具,里面提供了很多的函数调用及语法说明等。 


    2楼2010-07-12 21:10
    收起回复
      2025-08-29 20:42:31
      广告
      不感兴趣
      开通SVIP免广告
      ???


      3楼2010-07-12 21:10
      回复


        IP属地:江苏4楼2010-07-12 21:11
        回复

          下边是一些有用的文件的列表
          war3map.w3u 单位
          war3map.w3t 物品
          war3map.w3b 可破坏的
          war3map.w3d 地形装饰物
          war3map.w3a 技能
          war3map.w3h 魔法特效
          war3map.w3q 升级
          等等,这些都是地图的基本设置文件,
          我们可以用WE中的物品编辑器直接导入进行编辑。
          war3map.wtg 触发事件
          这个是保存各种触发事件的地方。我们在地图里搞装备合成,刷怪,作任务
          等,都是依触发指令来完成的。但是一般的加密地图都把war3map.wtg和war3map.wts删除了。
          war3map.j jass数据库
          这个是地图的核心,所有跟地图设置有关的资料如地图摆放的建筑物、角色、技能、触发事件的指令等等,只可惜是用jass语言保存的。如果你懂jass的话可以在这个文件里任意改动任何数据。包括触发指令。
          war3map.shd 地层数据
          war3map.wpm mp3,wav等媒体文件的设置
          war3mapPreview.tga 地图缩略图
          war3mapmap.blp 图形文件的设置
          war3mapmisc.txt 游戏平衡常数
          下边是最重要的,因为很多人把文件修改完以后都不知道该怎么还原。
          我们现在就要用到mpqediten或MPQWorkshop了
          新建一个MPQ文件,然后把那些文件全部添加进去再保存。
          现在你们得到一个MPQ文件了。下一步是添加w3x地图文件的文件头
          你们用UltraEdit-32随便打开一个w3x魔兽地图文件和自己的mpq文件。
          对比一下,你们就会发现w3x文件比MPQ文件多了一个16字节的文件头
          后边的事我不用说了吧,w3x文件中复制,然后在MPQ中粘贴这个
          16字节的文件头,然后把后缀名MPQ改成w3x就可以了。
          修改地图就是这么简单,欢迎大家修改地图,尤其是好地图 附加:(地图中各文件的作用)
          1.war3map.w3a 地图的自定义技能文件,主要储存地图的自定义技能信息,修改此处能实现技能的简单变化,但单独不能创造出很漂亮的自定义技能2.war3map.w3t 地图的自定义物品文件,储存地图的自定义物品信息3.war3map.w3b 存储树啊,门啊等可破环物的信息,没事一般不修改~~~~~~~~~4.war3map.w3d储存装饰物的信息,没事也不弄~~~~~5.war3map.w3q 储存自定义的科技信息,也就是升级之类的东东6.war3map.w3h 储存自定义效果信息。很少用到~~~7.war3map.w3i 储存地图的基本设置,也就是地图读图时的预览啊等的详细信息8.war3map.w3e储存地图的地形信息,没什么好解释了吧~~9.war3map.w3u 储存自定义的单位信息,与w3t,w3a,j 文件并列为修改最多的4个文件10.war3map.wtg 事实上是触发器的j文件,地球上的加密地图都把wtg文件给删了,大家也就不用怎么了解了11.war3map.wts 注悉文件,这年头基本上没有,因为大部分对w3u,w3a,w3t的注释都由那几个文件自带,方法是在we中把那几个文件导出~~~~12.war3map.mmp 储存地图预览的小文件信息,耍cool用的~~~13.war3map.shd 阴影文件信息~~14.war3map.wpm 地图的路径信息,这两个大家基本不用弄,we会帮你搞好的 15.war3map.doo 装饰物信息16.war3mapMisc.txt 地图的平衡常数信息,关于英雄的最大级别等的设定~~~17.war3mapunits.doo 地图的物品摆放信息18.war3map.shd 地层数据 19.war3map.wpm mp3,wav等媒体文件的设置 20.war3mapPreview.tga 地图缩略图 21.war3mapmap.blp 图形文件的设置 22.war3mapmisc.txt 游戏平衡常数


          6楼2010-07-12 21:11
          回复


            IP属地:湖北7楼2010-07-12 21:12
            回复
              2008年01月23日 星期三 13:03关于地图加密,个人接触加密时间很长了,因此见过的加密也确实可以说是千奇百怪,这里只是简单讲些原理供大家了解,对于未公开的加密只是点到即止,恕不能说的太详细......
              首先加密可以分成许多类,我这里将其分为"反WE类","反MPQ工具类","脚本类","特殊标示类"......
                 "反WE类"
              这类可以说是最常见的了,最早的加密就是为了使WE打不开地图,方法也很多
              1.删除WE的使用而游戏不需要的地图内部文件.
              如war3map.wtg,war3map.w3c,war3map.w3s,war3map.w3r等文件,其中war3map.wtg是触发文件,游戏运行时使用的是war3map.j脚本文件,而触发文件是用来在WE中显示更为直观的T,其余war3map文件则是镜头之类都可以在J文件中定义的东西,游戏也不需要,因此删除这些文件可以使WE因为缺少文件而无法打开地图.
              加密方法:使用工具如w3mmaster,Wc3MapOptimizer,其中Wc3MapOptimizer是当前最好的工具,而且与其说是加密还不如说是优化,使用该工具除了删除无用文件外,还可以优化脚本,加快地图读取速度等.(这里推荐使用时参照老狼写的使用说明,写的比较详细,工具现在已经有偶汉化的4.5版,里面集成了老狼的大部分说明,这里推荐大家使用- -).另外一方面还可以手动使用MPQ工具进行删除或在WE中导入同名的空文件(最老的手动加密方式- -),当然手动方法是不被推荐的,因为没有任何优化效果,而且这种加密是最容易破解的.
              2.导入错误文件.
              这种手段也是比较初级的加密手法,使用错误的war3map.wtg或在非正常数据环境下制作相关触发数据(如修改MPQ包中的blizzard.j文件,加入新函数等- -),同样造成WE错误,没有优化效果.这样做的原因是因为出现了可以忽略常规缺少文件错误的新WE(如反汇编制作的ENE WE等),这类WE可以打开缺少触发等文件的地图(不过由于缺少文件,你依然不能修改和存储地图,这也是一些菜鸟修改者修改完地图后发现地图完全不能游戏的原因),在使用错误数据后这类WE大多会出现内存读取出错.(可见加密技术都是解密而发展的- -)
              值得一提的是某些修改war3map.w3u(单位文件)等基础数据文件的做法,这种做法比较另类,向其中加入游戏中用不到的冗余错误数据,同时造成其中数据与war3map.wts等文件中数据错位.这种方式是针对现在比较流行MPQ工具导出相关文件进行外部修改的破解手段的,因为很多人喜欢导出w3u文件单独放入WE修改,而在没有使用Wc3MapOptimizer的WTS字符优化时,还需要导入WTS文件来查看文本信息,这时冗余的数据会造成错误,导致WE出错退出- -,不得不说很有创意,不过如果使用w3mmaster修改的话就没有任何效果了,外加没有优化效果,因此也是不实用的方法.
              3.SLK优化
              这种方式最大的好处是可以大幅加快地图读取速度,SLK文件优化得当的话,体积也可能减小,是当前最好用的优化手段之一,很多优秀的地图如DOTA都是这种优化的.
              原理:懂得基本的地图组成结构的人都应该知道,单位,技能等信息都是储存在w3u,w3a这样的文件中的,然而没有实质的了解其结构的人可能就不会知道实际上这些文件中储存的不过是改动信息,而这个改动是相对于魔兽基础MPQ文件中的SLK文件而定的.地图在读取地图时会读取w3u等文件,而如果这些信息都作为SLK的基础信息的话则不会占用读取时间,这样就做到了优化,而且SLK的读取速度也比较快.因此优化的过程实际上就是拆散w3u等文件再放到SLK文件中去.
              SLK更多的是作为优化而言的,如果说到加密,那就是因为他可以防止w3mmaster这样的外部修改器,同时对于不了解内幕的人,也会因为找不到单位等数据文件而无从下手,不过现在基本上人人都知道SLK文件可以用EXCEL这样的工具来直接修改了,因此作为加密而言只是增加了修改的复杂性.
              相关工具:Widgetizer(最早的SLK工具,性能可靠,可惜不支持中文,如果你是英文图的话,还是用这个最好),U9MapOpt(U9地图优化器,目前唯一支持中文的优化器,不过还不能优化大小,而且有加广告的"BUG"...).
              


              8楼2010-07-12 21:13
              回复
                总体来说"反WE类"是目前最广泛使用的加密方式,而且这类大部分是优化而非真正意义上的加密,同时我建议使用的SLK+Wc3MapOptimizer的优化方式.
                   "反MPQ类"
                前面说过使用Wc3MapOptimizer等工具只能说是优化而非加密,原因之一是他们主要是做使地图变小,读取变快的优化,另一方面就是对于这类反WE的地图,修改者最常用的手段是使用MPQ工具进行内部文件的修改,对于这类修改,很长时间内可以说是无敌的解密方法,因此真正可以说得上是加密的就是反MPQ类.
                1.MPQ头文件修改
                这种修改方式由来已久,直到不久前hackwaly的新加密方法出现之后才真正流行起来要讲其原理,需要先了解一下mpq头文件的结构
                struct TMPQHeader 文件头结构定义{ DWORD dwMpqFlag; 头文件标志,一般是'MPQ'    DWORD dwHeaderSize; 头文件大小 DWORD dwArchiveSize; MPQ包大小USHORT wFormatVersion; 版本(这个直到WOW燃烧远征才开始有用,MPQ2这个值是1,魔兽的MPQ1是0)USHORT wBlockSize; 块大小,熟悉的人一般叫它BUFFER SIZEDWORD dwHashTablePos; 哈希表偏移位置DWORD dwBlockTablePos; 块表偏移位置DWORD dwHashTableSize; 哈希表大小DWORD dwBlockTableSize; 块表大小};
                具体的含义在MPQ讲解中我还会介绍,这里只说和加密相关的.
                1.同样的这种加密也是随着相关MPQ工具而发展的,最早是soar(GA的c-a)的mpqworkshop,这个工具有一个弱点是其寻找MPQ时需要检验头文件大小(dwHeaderSize)这个值,而由于MPQ1的这个值显然是固定的32,所以当人为的修改这个数为一个随机数时,该工具就会认为这是个无效的MPQ文件,造成无法打开,当然明白了原理后这是很容易破解的,而且现在的MPQ工具都忽略这个错误.不过这个修改这个值几乎成了习惯,虽然没有作用也还一直沿用着.
                2.之后出现了w3mmaster和mpqmaster,依然是soar的作品,使用自己制作的mpqlib,可以忽略dwHeaderSize的错误(同时sfmpq也一样).很长时间内MPQ头的加密没有新的发展,直到今年初,hackwaly公布了他的研究成果,新的killmpqmaster加密,实质上是修改块表大小为大于哈希表大小的数.这里简单讲一下原理:
                最通俗的语言来说,MPQ就可以看成一本书,但他有两个目录,哈希表是第一个,当你要找书中的一页时需要先查哈希表,得到块表这个目录的位置,再从块表中查找到具体的页数,而MPQ这本书还有一个特殊之处是哈希表这个目录的大小是固定的,也就是说书里面最多能放的页数也是固定的(这就是MPQ中文件数有上限的原因),而如果我们的内容不能装满整个书的话,那么哈希表的一部分就是空的.而块表不同,他只存放有效的页,因此他的大小是不固定的,哈希表与块表是一一对应的,因此块表不可能比哈希表大.
                再讲一下MPQMASTER的文件查找原理,大家就会明白为什么修改块表大小会造成这类工具不能读取地图的原因了.MPQMASTER准确说是mpqlib.dll是需要枚举MPQ包中的每一个文件的,而魔兽则只需要查找其需要的文件,也就是说,魔兽在翻书时直接查找目录找文件,而不必去管目录到底有多大,什么时候目录会结束.而MPQMASTER则需要知道这个,他要先知道目录的大小才能得知什么时候已经找到了所有文件,mpqlib是根据块表来查找的,因此如果修改了块表大小,就相当于让他去不存在的目录查找文件,这当然是错误的.
                3.修改MPQ包大小(dwArchiveSize)为0,这是我个人最先发明的,原理实际上也和修改块表大小差不多,但实际上还是由于mpqlib的严谨性,mpqlib在读取MPQ文件结构时会验证一些数据的准确性,虽然不一定有用,但是正是这项检查造成修改MPQ包大小后,mpqlib将地图识别为错误MPQ.
                4.修改哈希表大小(dwHashTableSize),这种加密也和我有一定关系,不过没有流行起来,而且事实证明也并不是一种安全的加密
                在killmpqmaster加密(工具为hackwaly的w3xmaster)流行后,mpqmaster的使用受到限制,当然也出现了不少手动破解方法,不过相对而言最好用的是winmpq和我的ShadowEditor,sfmpq是因为其在查表时是检查哈希表而不受块表错误的影响,同时也不检查MPQ包大小,因而可以正常打开w3xmaster加密的地图,不过从w3xmaster0.006开始采用了修改哈希表的技术而造成其显示错误文件而不那么好用了.同时期我就结合了sfmpq的优点做了ShadowEditor,自动修复所有的头文件错误,修复后可以用mpqmaster打开.作为反ShadowEditor还原的第一例,就是55YOU的简单做的修改哈希表大小加密,理论上说哈希表大小会直接影响查表的过程,因而不能修改,但确实在一些特例中成功了,但并不是所有图都可以,再加上我第一时间修改了还原程序,这个加密貌似就只出现了那么片刻的时间- -...
                


                9楼2010-07-12 21:13
                回复
                  2025-08-29 20:36:31
                  广告
                  不感兴趣
                  开通SVIP免广告
                  1.打乱脚本,变量名替换.
                  这是最早的了,也是沿用至今的基本方法,代表工具是Wc3MapOptimizer,利用他进行脚本优化后,脚本中放在一起的T相关函数被分散并进行同类汇总,删除注释,这样造成脚本可读性变差,但是真正使可读性变得很差的还是重新用字母或数字来替换那些有意义的函数名,这样就给理解脚本造成了很大的麻烦,因此修改脚本时需要的是对于J文件的深刻理解了.
                  2.添加作弊检查的函数.
                  这类方法很多,比如检查玩家的资源数等,只要超出合理范围就判定为作弊,同时可以检查是否使用了单机秘籍.其中还有一类比较有趣的方法是在游戏中读取wts文件的字符,如果修改者修改了某些字符,如作者信息之类就判定此图为盗版.
                  3.禁止单人游戏.
                  这种多用于ORPG,防止单机秘籍的使用造成游戏平衡性破坏.
                  方法有几种,比较好用的有判断是否可以保存缓存,单机可以,多人就不行,另外判断是否可以保存游戏也可以做到,同样是只有单机可以.
                  单机判断和作弊检查函数联合,同时分散写上多个处判断函数,可以使修改者不容易删除判断函数,而且在判断为作弊后采用死循环或大量制造单位的方法来强制地图出错,也可以防止修改者通过文字信息来找到相关函数.
                  4.反MH函数.
                  MH无疑是最让对战地图头疼的东西,不过在kook,hackwaly,朱朱等人的研究下,确实找到了一些反MH的脚本方法,我没有仔细看过他们的脚本,所以以下只是简单的写点基本原理,如有不对的地方还请指正- -:
                  1.通过触发选择不可见单位,然后判断是否出现取消选择的事件来判断是否使用MH,在开了MH后是不会出现取消选择的事件的.
                  2.通过在不可见区域创建闪电特效,如果没有开MH不会返回句柄,开了就会有.
                  3.使用由hyp制作的看见就会造成游戏错误的模型.
                  "特殊标示类"
                  说到特殊标示,最先想到的应该是官方的兰色小标志,这一类就是采用各种算法来给地图加上独特的标示,通过标示可以方便的辨认正版地图.
                  1.官方的签名.
                  这个不知道有多少人想要破解了,不过现在还没有人成功,而且估计也不可能有人成功
                  原理:对地图内容进行SHA-1摘要,然后对摘要的结果进行RSA运算,当然懂RSA的人应该知道这运算是要有自己的私钥的,结果是一个260字节的签名,放在地图末尾,在game.dll中有检验这个签名的公钥,只要验证成功就会加上兰色小标志.
                  知道原理就不难理解为什么这个是不可能破解的了,首先RSA现在还没有破解理论,其次你不可能从暴雪手里偷到那个私钥,因此该签名是目前最保险的防盗版方法.
                  2.GA的签名.
                  既然我们不可能从官方得到地图签名,那我们就自己改,通过将game.dll中的公钥修改为自定义的和自己的私钥相匹配的数据,我们就可以做自己的签名了,这就有了GA的补丁,不过确实这种补丁的推广很难,广大玩家并不像地图作者那样需要他......
                  3.盗版地图删除器.
                  这个东西的作用不是很大,但毕竟起过一些作用,这里把他放在标示类也有一些原因.
                  原理:早期的盗版地图删除器如3CORC之类的,是根据地图大小来判断是否正版的,这样做的缺点是每更新一张地图就需要更新一次删除器的列表,比较麻烦.后期我为WOW8制作的删除器是采用类似签名的摘要加密法,不知道原理的情况下很难仿制,而且随便的更改都会造成不匹配,这样只要用删除器对签名进行判断就可以验证是否是正版图,不需要更新列表这种麻烦事.至于算法可以自己随便选择,如MD5,RSA等有名的算法...
                  4.(attributes)文件.
                  这个文件是官方检验地图文件是否受损的文件,也是所有改图者必删的文件,否则游戏中就会提示文件错误.
                  原理:这个文件是按照MPQ中的文件顺序将每个文件的CRC32值,文件时间等数据放入(attributes)中,游戏中进行检验,在MPQ2中应该还包括MD5校验.
                  这个东西由于一般都被删了所以也没什么作用,不过可以是另外一种盗版地图删除器的判断方法,加入自定义的校验文件(里面包含关键文件的MD5,CRC32等值),然后检查时自动查找就可以了,由于是自定义文件名,也不容易被直接找出来.
                  以上就是我个人总结的目前能找到的大部分加密和反作弊方法,不一定完整,而且原理上也不是说得很透,欢迎大家补充.


                  11楼2010-07-12 21:13
                  回复
                    ==========END====================================
                    最后一个验证码居然是BSTX


                    12楼2010-07-12 21:13
                    回复


                      IP属地:北京13楼2010-07-12 21:13
                      回复
                        辛苦你了!


                        IP属地:广东14楼2010-07-12 21:16
                        回复


                          IP属地:四川16楼2010-07-12 21:35
                          回复
                            我竟然没被和谐

                            


                            IP属地:江苏17楼2010-07-12 21:38
                            回复
                              2025-08-29 20:30:32
                              广告
                              不感兴趣
                              开通SVIP免广告
                              17楼学习了


                              IP属地:广东18楼2010-07-12 21:50
                              回复