這類可以說是最常見的了,最早的加密就是為了使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"...).
總體來說"反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 SIZE
DWORD 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的簡單做的修改哈希表大小加密,理論上說哈希表大小會直接影響查表的過程,因而不能修改,但確實在壹些特例中成功了,但並不是所有圖都可以,再加上我第壹時間修改了還原程序,這個加密貌似就只出現了那麽片刻的時間- -...
2.利用地圖大小限制
魔獸連網是有4M大小限制的,而在早期大家都使用MPQMASTER來修改地圖時,由於mpqlib的壓縮性能較差,因而總會造成地圖變大,有些加密就是利用這個漏洞,在地圖較大的情況下幹脆直接讓地圖接近4M,這樣隨便改動都會造成無法連網.這種加密實際上也在winmpq和偶的 ShadowEditor流行起來之後變得用處不大了,因為SFMPQ.DLL的壓縮效果要明顯好的多.
值得壹提的是最近還能見到壹些圖利用0byte文件來填充的方法把MPQ包添滿,當然這也是在地圖本身比較大的情況下,這種方法貌似是利用地圖大小的升級加密版本,因為這樣即使壓縮的很好也有可能超出4M,不過解起來也很簡單,把這種文件刪就好- -,所以感覺是種很搞笑的方法.
3.腳本文件加密
包括3種:
1.最早的是移動腳本,把根目錄下的war3map.j放到scripts\下依然可以用,在開始沒有人知道的情況下,確實找不到腳本,但是現在已經是路人皆知的事情了,使用Wc3MapOptimizer會自動移到那裏去.
2.雙腳本,壹個在根目錄下,另壹個在scripts\下,出現兩個腳本,迷惑新手罷了,當然只有壹個是真的,我給他的評價是勞民傷財,白占體積- -.
3.替身腳本,這個理論上有些技術含量,和後面要講的我的文件隱藏法有壹定的聯系,原理上說是利用了魔獸的storm與壹般工具的MPQ庫之間讀取文件的原理差異,在地圖中放入兩個同名的war3map.j,壹個是假的替身文件,在用壹般的MPQ工具讀取時只能讀出假文件,遊戲則會讀真的,識別方法可以用偶的ShadowEditor打開發現兩個同名的war3map.j 且大小不壹樣(大小不壹樣很重要,因為w3xmaster也有壹種能造成這種假象的),這種方法對所有具有寫入功能的MPQ工具都有效,不過估計應該不是用某種專門加密器完成的,估計是用了某個MPQ工具的BUG,而且這種方法加大地圖體積,還可以用簡單的方法破解,因此我只說他是理論上有技術含量的東西 - -.
4.文件屬性加密
這種貌似是最扯淡的加密了,方法簡單的出奇,而且不容易察覺,就是把地圖的屬性改成只讀,這樣任何MPQ工具都不能對其進行寫操作了,當然還原方法不用多說了,不過不仔細的話還真以為是什麽厲害的加密呢,汗......
5.MPQ哈希表,塊表加密
這種才可以說是真正意義上有技術含量的加密(相對於Wc3MapOptimizer等工具也算不上有技術- -,不過那些是優化...),從hackwaly的w3xmaster開始.
這裏只舉兩個例子:
1.w3xmaster0.009:未公布的地圖加密器,主要原理是將塊表擴充為確實比哈希表大,同時打亂哈希表與塊表間的連接,填充無用的哈希空位,迷惑性的復制哈希表項目(這就是為什麽ShadowEditor可能讀出兩個J文件的原因,大家也可以推想壹下替身腳本的原理- -...),再詳細的原理我也不想說了,未公布的東西不能亂講,其實主要是防止我的ShadowEditor對地圖進行還原,同時也造成了無法重壓縮的問題,雖然不能防止解壓,但是確實比較有效的防止了在原圖上進行修改.
2.War3map Encrypt:未公布的加密器, 這個是我做的,也是只簡單的講壹下原理:前面已經說過war3和壹般的mpq工具讀圖原理是有差別的,這也是制作加密的突破口,簡單的說這個差異就是在 MPQ中出現同名文件時的處理機制,因為正常的MPQ是不會有同名文件的,因此壹般的MPQ工具不會處理這個錯誤,而war3則會,因此才有了替身文件和隱藏文件的可能,與替身文件不同的是,我的加密是通過直接修改哈希表制作的,因此我不需要替身文件可以直接隱藏文件,同時在加密中加入了SFMPQ列表讀取崩潰和w3xmaster的壹些反mpqlib機制,所以現在基本上可以防止所有流行的MPQ寫入工具進行修改,甚至讀取.不過既然魔獸能夠讀取,那麽就壹定有辦法能解壓文件,這種方法是什麽我就不想多說了,這裏只是加密講解.
話說回來任何加密都可以破解,懂得MPQ核心原理的人應該可以自己寫程序破解,不過我的SE暫時是不會再寫任何破解模塊了...
"腳本類"
從這類開始應該說就是反作弊的範疇了,這類出現的前提是無法阻止腳本文件的解壓,以及某些外掛作弊(MH)
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等值),然後檢查時自動查找就可以了,由於是自定義文件名,也不容易被直接找出來.
我也不知道是不是。