GTA IV .WFT Unlocker

我對GTA4的.WFT檔案可以被鎖住這件事感到很好奇:為什麼可以上鎖,而且不需特別的解鎖步驟就能被遊戲直接打開?於是就研究了一下。
這篇就來講講研究的結果。

WFT之所以會有檔案鎖住不能開這件事,始作俑者是Zmodeler2這個在製作MOD時常被使用的軟體。他在匯出的時候弄了個選項,允許mod作者在匯出時對檔案”上鎖”。
WFT檔一但被”上鎖”,就連Zmodeler本身都沒法打開,他會直接告訴你這檔案被鎖住了。
但這件事有個奇怪的地方:
既然作出來的WFT可以被GTA4打開,表示檔案可以被完整的還原,沒理由Zmodeler沒辦法重新打開才對。
所以我們可以合理的懷疑,這檔案是可以”解鎖”的,只是既然zmodeler把他作為上鎖的手段,於是才不讓你還原罷了!

拿一些其它的工具程式,來測試Zmodeler上鎖過的檔案

  • WFT/XFT to DFF:直接報錯。
  • sparkIV:預覽圖一片空白,什麼也看不到
  • openIV: 預覽圖看的到,但匯出成openFormat轉進3DS時報錯。

這很奇怪,GTA4打的開,但其它工具程式都不能開?不過…等一下!為什麼openIV預覽圖可以看的到?但匯出卻有問題?
照理說,可以看的到預覽表示資料已經全部正確的讀進來了,那不能匯出是怎麼回事?

網路上爬了文,找到openIV的作者曾說他只改兩行程式就解開Zmodeler上鎖的檔案,所以OpenIV是有能力解鎖的,只是匯出的時候他不願意幫你解開罷了。所以結論是Zmodeler故意把檔案”弄壞”,讓別人的程式都打不開,但又壞的不算太壞,還是有辦法(openIV, GTA4主程式)能開。這麼看來繼續研究下去應該有解才對,只要把弄壞的地方修好就行了。

既然openIV的作者說他從程式改好像很輕鬆,那我也拿sparkIV的source code來改好了,省掉還得研究WFT檔案格式的時間(附帶一提,研究的過程發現WFT是經過zlib/DEFLATE壓縮,測試的時候一直壓縮/解壓的也是挺麻煩啊)。用sparkIV是因為他是open source,雖然他相對於openIV雖然很弱,而且也已經停止開發了,但作者那麼好心open source,才讓大家有機會可以研究,實在感恩啊~~ 而openIV呢,他雖然炸裂強,但沒source code沒法動刀啊 (openIV的作者說他壓根也不想open source,而且也不能open source — openIV裏面有一些暗黑程式是不能公開的)

sparkIV Build之後用Debugger跑一跑,發現上鎖和沒上鎖的檔案最大的差別,是程式讀檔之後3D的face數量,上鎖的檔案會變成永遠都是0 (sparkIV中搜尋faceCount這個字,加到watch去看就可知道)。但繼續追下去之後發現其實可以從IndexBuffer中取得另一個IndexCount。Indeces簡單說就是3D中face的端點,這邊每個face都是三角形,所以1個face會對應3個Indeces。這樣的話我們把取得的IndexCount除以3,就可以重新得到正確的faceCount。最後也就能讓sparkIV顯示zmodeler 2上鎖的WFT檔,也就達到解鎖的目的了。

推薦閱讀:
https://en.wikipedia.org/wiki/Polygon_mesh
對3D名詞不清楚的話推薦看這篇wiki。
前面點線面的名詞解釋看一下,然後看後面Face-vertex meshes的部份即可。


WTF = What The Fuck
我一直很小心的不要把WFT打成WTF….

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *