建议直接提取war3map.j,如果你只是想看看里面的触发器的话那就直接看jass版的吧,如果是改图的话,只需要:(以下内容纯属摘录)
·························
首先下载W3MMASTER可以对地图的物品技能等进行修改,并输出地图scripts文件夹下的war3map.j文件.
然后用魔兽自带的地图编辑器建立一个新图,在新图中编写你所希望的触发器功能,然后保存地图.
接着下载MPQMaster提取自己新建地图的war3map.j文件(应为文件名相同所以不能和加密地图中提取的war3map.j文件放在一起不然会覆盖的),然后用记事本打开自己新建地图的war3map.j文件,搜索globals关键字你会发现有// Generated
trigger gg_trg________________u= null
trigger gg_trg_say_money1= null
trigger gg_trg_say_money2= null
trigger gg_trg_say_money3= null
trigger gg_trg_say_money4= null
trigger gg_trg_say_money5= null
trigger gg_trg_say_money6= null
trigger gg_trg_say_money7= null
trigger gg_trg_say_money8= null
trigger gg_trg_say_money9= null
trigger gg_trg_say_money10= null
trigger gg_trg_say_money11= null
trigger gg_trg_say_money12= null
类似这样的申明,globals下**行为地图出始话用到的我们不用他,然后将其他的申明字符串复制到从加密地图中提取的war3map.j文件的globals关键字下(这些应该是变量申明,个人感觉jass语言和C语言很类似),然后在自己的war3mao.j文件中你会找到
//===========================================================================
// Trigger: say money1
//===========================================================================
function Trig_say_money1_Actions takes nothing returns nothing
call AdjustPlayerStateBJ( 1000, Player(0), PLAYER_STATE_RESOURCE_GOLD)
endfunction
/===========================================================================
function InitTrig_say_money1 takes nothing returns nothing
set gg_trg_say_money1= CreateTrigger()
call TriggerRegisterPlayerChatEvent( gg_trg_say_money1, Player(0),"/**", true)
call TriggerAddAction( gg_trg_say_money1, function Trig_say_money1_Actions)
endfunction
(这个是我的文件中的和申明的一样这里是函数)function开始endfunction结素把这些函数(根据自己的判断有选择*的复制到加密地图的war3map.j文件相应位置中)
接着在自己的war3map.j文件中的
function InitCustomTriggers takes nothing returns nothing
call InitTrig________________u()
call InitTrig_say_money1()
call InitTrig_say_money2()
call InitTrig_say_money3()
call InitTrig_say_money4()
call InitTrig_say_money5()
call InitTrig_say_money6()
call InitTrig_say_money7()

call InitTrig_say_money8()
call InitTrig_say_money9()
call InitTrig_say_money10()
call InitTrig_say_money11()
call InitTrig_say_money12()
endfunction
这个函数中的除**个call InitTrig________________u()外全部复制到加密地图的war3map.j文件中的function InitCustomTriggers takes nothing returns nothing函数中
*后打开MPQMaster.exe打开被加密地图在在地图中创建新文件夹scripts(应为地图被加密所以原来的scripts文件夹是看不到的,新建后自动覆盖原来的文件夹和文件夹中的文件)然后打开这个文件夹导入修改好的war3map.j文件这样加密文件的触发器在原来的基础上加上了你想要的功能
························
如果地图需要bcc验证的话再把新的war3map.j用bcc.exe导回也就可以了
*可惜的是1.23的魔兽封杀了bcc验证,汗啊。。。
幸好国内的对战平台都还在用1.20的魔兽(不过本人改图纯属自己**,不会拿到网上去害人的,希望你也一样啊)
魔兽地图加密是破坏*加密,复原的几率≈0。
地图中的MPQ档案地形
war3map.w3e地形资料
war3map.shd地层资料
war3map.mmp物件
war3map.w3c WE中摄影机的放置情形
war3map.w3r WE中区域的放置情形(游戏所需资料会被转成JASS放在war3map.j,因此删掉不影响游戏)
war3map.doo WE中可破坏物件的放置情形
war3mapUnits.doo WE中单位的放置情形(游戏所需资料会被转成JASS放在war3map.j,因此删掉不影响游戏)
物件编辑器
war3map.w3a记录技能资料(Ability Editor)
war3map.w3h记录Buff(强化法术)资料(Buff Editor)
war3map.w3q记录科技资料(Upgrade Editor)
war3map.w3t记录物品资料(Item Editor)
war3map.w3u记录单位资料(Unit Editor)
以上这些档案可以用MPQ程式或WE汇入物件编辑器进行编辑。
触发
war3map.wtg记录WE中触发编辑器中的内容
war3map.wct记录WE中已转换成JASS的触发资料
以上二个档案是WE中的触发资料,游戏要用的触发会被转成JASS放在war3map.j,因此删掉这两个档案的地图还是可以玩。如果缺少这两个资料,用WE读地图就会出错。一般加密程式会把这两个档案删除,因此地图一但加密,就没办法百分之百还原成原始的资料。
其它
war3map.j JASS资料库。这是地图的核心,为游戏必需资料,包含所有地图摆放的建筑物、角色、触发**的指令、.....等等。懂JASS的人可藉由修改这个档案改动大部分的地图内容(当然,你要有神级的技术)。此档案移到Scripts\war3map.j也可以用,有些加密程式会把此档案移到该处而让不知道路径的人找不到它。
war3map.wts记录字串资料。触发编辑器、物件编辑器等的文字资料都会被存放在这里。如果要中文化一张加密的地图,只须修改此档案再汇回原地图即可。
war3map.blp小地图的图档。WE本身就有汇出此档案的功能
war3map.w3i记录游戏一开始资讯(名称、几打几、简介、作者...)、种族设定、玩家设定、......
war3map.w3s记录声音编辑器(Sound Editor)的资料
war3map.imp记录Import Manager中的资料。加密程式通常会把它删掉使解密者不容易找到它们额外汇入的模组和图片。
war3map.wpm记录.mp3、.wav多媒体文件
war3mapmap.blp游戏中显示的小地图图片
war3mapMisc.txt记录Gameplay Constants(游戏常数)的资料
war3mapSkin.txt记录Game Interface(游戏界面)的资料
war3mapPreview.tga预览图片
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即可还原k
*后讲一下如何研究加密的地图:
1.学会Jass语言z>
2.用mpq工具解压出war3map.j(如果没有则参见上面的第二条解压Scripts\war3map.j),注意如果mpq工具如果不能读取则按照上面第3条的做法修复文件头
3.结合所学的Jass看war3map.j,就能知道对方地图的处理过程
4.关于地形的获得我还没有好办法,我把别人的地形文件导进自己的地图会出现读取错误,估计是有些选项必须符合,考虑到有些人加密地图就是为了保护地形不让别人"**",所以我也没有多做研究,只要知道war3map.j的内容就可以学习别人所有的地图处理过程了
总结一下:
解密是很难的,但是可以通过解压war3map.j来分析别人的地图,希望这篇文章对大家关于加密解密的争论能给出一个理论依据
先把你自己地图的脚本输出.输出的时候保存为:war3map.jx
然后新建3个空文件,依次命名为:
war3map.wtg war3map.wct(listfile)然后输入你的地图,然后把4个文件的路径改成
脚本: scripts\war3map.ja
空文件: war3map.wtg
空文件: war3map.wct
空文件:(listfile)这个方法不是很好理解,运用起来也不方便
我得方法是||
1.只须建立一个空文件后不一定要改文件名,就是说无论任何文件名都是可以的
2.将空文件在输入管理器中输入
3.将自定义路径改为war3map.wct或war3map.wtg就行了
4.war3map.wct或war3map.wtg只须存在任意一个就可以,
5.自定义路径必须改为war3map.wct或war3map.wtg,改为###.wct或###.wtg无效!
6.之所以要建立一个空文件是应为输入文件后,输入的文件有多大(K)地图的大小也会增加多少。所以原则上无论输入任何格式、任何大小的文件都是可以的

