北京老时时彩|重庆老时时彩开奖号码
歡迎您,請 登錄 或 注冊會員

偶久網

搜索
偶久網 首頁 改圖教學 查看內容

MPQ加密介紹

2017-5-22 15:38| 查看: 7787 |原作者: 邪惡叔

前言:其實一年前研究mpq加密的時候就有這個想法,后來對加密失去興趣,沒有應用而已。

先從mpq讀取(和寫入)說起。市面上的軟件大致有以下幾種方法:

0.listfile式。0這個數字說明了它的原始。如果mpq沒有用listfile明確敘述自己的文件組成,它就無法讀取其中的文件。怎么說呢,這就好像只要犯人不招認,自己也認為犯人無罪的笨蛋偵探一樣,嚴謹到無聊。典型例子不是別人,正是大名鼎鼎的WorldEditor地圖編輯器。對付這種軟件,刪掉listfile就一切安好。

1.小白式。這種軟件基本上用自制的dll(因為暴雪只提供了讀mpq的storm.dll,沒有寫入),按照mpq文件格式非常循規蹈矩地一步步讀出內容。問題在于mpq數據稍有不對就會導致崩潰。例如header中mpq文件大小這項數據,war3讀地圖的時候根本不管,所以怎么寫都不影響地圖工作,但這類工具卻會照著此數據讀圖,然后掉進番茄海的無底深淵。
典型例子是winmpq和mpqmaster。

2.storm式。以火龍hke為代表。這類mpq軟件用暴雪提供的storm.dll讀取mpq,讀取方式和暴雪一致。由于mpq文件被設計成“知道文件名(含路徑)可以很容易讀取,但掃描所有文件路徑卻幾乎不可能”的格式,war3在讀地圖時只用在需要的時候讀指定文件就ok,所以這類編輯器也模擬war3讀地圖的方式,逐漸推算出“需要的文件”從而讀出地圖中近乎全部文件,只要在物編中涉及到或jass中提及的路徑,都會檢測對應的文件并列在表中。這是一種近乎無敵的方法,不會報錯(否則war3也玩不了這圖),且war3map.j等固定文件必然被掃描出來(否則war3自己也找不到)。

然后是重點:
但這里有個致命問題——不管是火龍還是war3,不可能預知到游戲過程中全部的文件讀取,更確切說,全部的字符串。如果字符串是明文寫在腳本中,如“sound\\aaa.mp3”,那么火龍會認為這可能是個文件,然后順藤摸瓜找到它。但如果寫成“sound\\” + “aaa.mp” + I2S(3)等甚至加上存取哈希表動作,火龍或任何軟件也無法完全預知。這種不可預測是理論級的,即“圖靈機無法預測另一臺圖靈機的全部可能狀態”,等價于著名的“停機問題”,而停機問題是“理論不可計算”的。所以在游戲中雖然能正常聽到音樂(或看到特效等),但火龍卻無法提前知道這個文件的存在。
樣例的圖中正是這樣,隱藏了一個2m+的mp3文件,但火龍卻只能讀出一大打war3map.xxx。
然后這種方法也能隱藏其它文件,但無法隱藏在物編中使用到的文件(如被某單位使用的導入模型)、地圖必備文件(如j)和覆蓋原路徑文件(如替換的載入圖片)。

3.hash掃描式。但是還沒完,還有一種方式,某些軟件繞過mpq前面的哈希索引表,直接掃描后面的文件,這樣雖然不能知道文件名,但能得到完整的文件列表(再怎么說文件也是封在mpq里的吧,把mpq整個掃一遍總能發現)。例子是新版mpqeditor,樣例圖和某人提供的火影圖都能打開,能看到一堆沒有文件名的文件,其中就有隱藏的mp3,改成mp3擴展名就能正常播放。這種方式應該沒什么弊端(除了得不到正確文件名),如果和火龍結合,用上述方法隱藏的文件也能以“未知名文件”的形式顯示出來,其他文件則完美顯示。

所以mpq這種文件格式終究逃不過被拆的厄運,想完美隱藏文件果然是不可能的事情。全文完。

搜索
北京老时时彩