FIFA07傳奇難度的解鎖,能夠說是全部FIFA07玩家的終極目標。可是若是想以正常方式對其進行解鎖,絕對是一件耗時耗力的工做。因此在這裏我打算經過分析遊戲存檔文件的十六進制代碼的方式,一步一步地找到解鎖傳奇難度的鑰匙。在這一過程當中,也實現了對遊戲全部隱藏項目的完全解鎖。工具
圖1 FIFA07遊戲封面測試
在這裏先不着急分析遊戲的十六進制代碼,須要先對遊戲須要解鎖的內容有一個大概的瞭解。首先遊戲須要解鎖的有兩個大項的內容,一個是遊戲中的「球迷商店」,另一個是「FIFA07挑戰」。其中「球迷商店」包含70個子項,是遊戲中的隱藏內容,它們分別是:額外(4項)、足球(23項)、第三方球衣(35項)、建立中心(2項)、練習體育場(4項)以及賽季集錦(4項)。全部的這70個子項,是須要使用必定的遊戲點數纔可以換取的。而遊戲點數的獲取,則須要完成「FIFA07挑戰」中的挑戰項目纔可以得到。不一樣的挑戰項目,依據其難易程度,挑戰成功後會獲得不一樣的遊戲點數,越困難的挑戰項目,那麼成功後所得到的遊戲點數也就越多。「FIFA07挑戰」中包含102個子項,它們分別是:英國(12)項、西歐(12項)、南歐(12項)、中歐(12項)、美洲(11項)、斯堪的納維亞半島(12項)、其他區域(9項)、世界(10項)以及世界2(12項)。而最終目標,也就是解鎖傳奇模式,它屬於「世界2」的第12項解鎖項目,若要解鎖傳奇模式,那麼須要完成任兩個大區的挑戰才能夠。到如今爲止,在遊戲中須要收集的信息基本已經收集完畢,那麼分析的第一階段就能夠告一段落。spa
通常來講,相似於FIFA07這樣的單機版的遊戲,其設置信息還有各項的解鎖及成就信息會保存在遊戲的存檔文件中。所以咱們只須要對遊戲的存檔文件進行修改便可,並不須要對遊戲的主程序或動態連接庫之類的文件進行修改。而具體對FIFA07來進行分析,每當遊戲新創建一個玩家信息,那麼系統會自動創建一個默認名稱爲Profiles的文件,其默認路徑爲「C:\XXXX\XXXX\Documents\FIFA 07\」,用於保存全局設置以及相應的解鎖信息。之因此可以肯定Profiles文件的功用,是由於在FIFA07默認文件夾內,除了這個文件,其它的文件要麼是用於存儲錄像信息,要麼是存儲由玩家建立的比賽信息。那麼咱們接下來的工做重點就是分析Profiles文件。對象
圖2 FIFA07存檔文件夾blog
接下來可使用十六進制代碼查看軟件對Profiles文件進行粗略的觀察。固然如今不要期望通過這一輪的觀察就可以直接定位到傳奇模式的關鍵代碼位置,這一步驟的目的在於對於文件內容各個區段有一個大體的瞭解。這裏選用的查看軟件最好同時也可以對文件的十六進制代碼進行修改,以方便接下來的工做。須要說明的是,查看文件的十六進制代碼,每每會發現大量的數字00的存在,通常來講,這些大段的00每每用於文件相應區段的對齊,也就是並無實質的做用,但有時也會有其它的做用,所以具體問題要具體分析。在此,我將整個Profiles文件分爲三個區段:遊戲
區段一(相對地址0x0000至0x002f):這個區段能夠理解爲是Profiles文件的頭部,用於識別本文件是否爲合法的FIFA07存檔文件,通常不對其進行分析,在此將其略過。字符串
圖3 Profiles文件的頭部基礎
區段二(相對地址0x0160至0x0348):因爲經過本區段的十六進制代碼基本上沒法推斷出有意義的ASCII碼對應的字母,所以能夠暫時將這個區段列爲重點懷疑的對象,也許本區段包含着解鎖的關鍵。軟件
圖4 Profiles文件的中部(部份內容)file
區段三(相對地址0x0368至0x0e24):這個區段能夠理解爲用於存儲全局設置,從將本區段的十六進制代碼轉換爲ASCII碼就能夠看出來,通常不須要進行分析,暫時將其略過。
圖5 Profiles文件全局設置部分
因爲在區段三以後就是大量的數字00,有理由相信這些00都是無心義的,僅僅做爲填充對齊之用。而通過本步驟的粗略分析,咱們對Profiles文件就有了一個大體的瞭解,那麼接下來就到了實質分析推理並修改的階段。
正如以前所分析的,球迷商店的內容須要使用遊戲點數來換取,那麼能夠考慮採用經過修改遊戲點數的方式來將「球迷商店」的內容一一解鎖。就拿個人FIFA07中的遊戲點數爲例,進入遊戲經查看可知,我如今擁有2535點的遊戲點數,因爲咱們最終查看的是十六進制的代碼,所以須要把十進制的2535轉換爲十六進制,即09e7,可是因爲咱們的計算機是以「小端」爲標準,因此在代碼文件中應該是以「e709」進行顯示的,因此在這裏能夠利用十六進制代碼查看軟件搜索「e709」。找到後能夠嘗試將其修改成「ffff」,這樣足夠用於解鎖。若是在文件中可以找到許多「e709」,那麼能夠分別修改,每修改完一處就進入遊戲以查看,若成功,說明定位成功;若失敗,則需將上一步的修改撤銷,繼續修改下一個位置。
圖6 對遊戲點數進行修改
很幸運的是,咱們所查找到的第一個位置就是遊戲點數的位置,其相對地址爲0x0300與0x0301,這樣咱們再次進入遊戲中的「球迷商店」,就可以一項一項地解鎖全部隱藏項目了。
可是在解鎖以前有一件事是須要特別注意的,那就是必需要對Profiles文件再複製一份進行保存。這麼作的目的是爲了觀測遊戲解鎖先後的變化,並且這一良好的習慣,會成爲接下來解鎖工做的關鍵。至此,「球迷商店」已經完全解鎖,可是距離咱們的目標,彷佛仍是很遙遠。
僅僅經過修改遊戲點數來換取隱藏項目並非咱們理想中高明的方式,既然是逆向工程,那麼必需要找出到底是什麼致使了遊戲可以識別出哪些項目解鎖了,哪些項目沒有解鎖。依據如今所掌握的的資料,能夠從兩個方面入手。
首先在圖4中能夠發現Profiles文件的區段二中,在大量的十六進制數字00中,包含着必定數量的01,這實際上是一件很奇怪的事情,由於ASCII碼中的01表明SOH(Start of Headling)即頭標開始,是一個不可打印的ASCII碼,咱們能夠認爲它就是一個無心義的。對比其它位置,這個區段中的01確實是多了些,加上又是參雜在大段的00中,那麼能夠聯想到這裏的01也許就是一個開關,也許就是某個標誌位。最後咱們須要對上述猜想進行確認,這裏經過使用對比解鎖先後的兩個文件的十六進制代碼的軟件來輔助咱們的分析。
圖7 對比「球迷商店」解鎖先後的Profiles文件
實際對比中可能會有別的位置也有差異,可是圖中區段是咱們重點懷疑的位置,截圖中的上半部分爲「球迷商店」解鎖前的Profiles文件,下半部分爲完全解鎖的Profiles文件。經過對比基本確認了咱們的猜想。因爲隱藏物品有70項,那麼也須要70個字節用於標記這70項的內容。而相對地址0x01f4至0x0239正好是70個字節的內容。能夠認定這就是咱們要找的標誌位。若是不放心能夠進入解鎖前的遊戲,記下「球迷商店」中解鎖物品與未解鎖物品的位置,依照上圖樣式,以00表明未解鎖,01表明解鎖,寫下來對比觀測,看看是否與圖中一致。
圖8 「球迷商店」隱藏項目標誌位
至此,已經掌握了「球迷商店」的修改關鍵,這樣就能夠直接對這些相應的標誌位進行修改,無需經過修改遊戲點數的方式來解鎖隱藏物品了。
不一樣於解鎖「球迷商店」,「FIFA07挑戰」並不須要遊戲點數進行解鎖,所以不能經過找尋某一特殊數值的方式來換取點數對其進行解鎖。可是因爲有了以上的經驗,能夠懷疑「FIFA07」挑戰也許如同「球迷商店」同樣,也是在某個區段,採用了以00表明未解鎖,01表明解鎖了的方式進行記錄。可是這個不容易進行定位,能夠考慮採起兩種方式。一種是在遊戲中先經過正常方式解鎖一項挑戰內容,以後經過對比解鎖先後的Profiles文件的方式進行定位。另一種是直接對Profiles文件的十六進制代碼進行觀察,特別是區段二部分,尋找相似於「球迷商店」那樣的在大段的00中夾雜着01的區塊。而後就能夠定位到相對地址爲0x017c至0x01e1,一共102個字節的位置,正好對應於102個挑戰項目。能夠將該區段所有修改成01,而傳奇難度正是第102個標誌位,即0x01e1位置。可是修改後發現,儘管在「FIFA07挑戰」中全部選項已經打鉤,可是傳奇難度依舊未能解鎖,由此能夠推斷,傳奇難度應該另有標誌位,以決定其是否解鎖。在這裏能夠先任選兩個區的挑戰,在這兩個區中留下一個不進行解鎖,而將本區中其它位置經過修改標誌位的方式進行解鎖,進入遊戲以正常方式達成未解鎖成就,這樣兩個區成就達成,遊戲便自動解鎖了傳奇難度。一樣的,依舊要保存解鎖先後的Profiles文件。
圖9 「FIFA07挑戰」標誌位
至此,「FIFA07挑戰」獲得完全解鎖,同時傳奇難度也得以解鎖。
儘管經過上述方式能夠解鎖傳奇難度,可是咱們的目的仍是要以不進行遊戲,直接修改標誌位的方式來解鎖傳奇難度。一樣還須要採起對比的方式,可能解鎖先後會有許多的數據發生了變化,可是仍是須要優先尋找未肯定功能的區塊中的01位置。每修改完一處就進入遊戲實驗傳奇難度是否已經解鎖,若沒有解鎖,則撤銷以前的修改,繼續修改下一個標誌位,採用這種手段就可以最終找到傳奇難度的標誌位,即0x023b的位置。
圖10 FIFA07傳奇難度的標誌位
這樣,咱們能夠在不對Profiles文件進行任何修改的前提下,直接對該標誌位進行修改,實現傳奇難度的解鎖。至此大功告成,同時在這尋找的過程當中,也完全分析清楚了FIFA07中全部隱藏項目的解鎖位置。
以前分析了Profiles文件中的區段三保存着全局設置的數據,那麼能夠嘗試一下直接修改難度的數值,測試是否可以解鎖傳奇難度。這裏能夠採用搜索字符串的方式查找到設置中保存的難度標誌位,直接將該值設置爲4,即傳奇難度。可是進入遊戲發現,設置中的遊戲難度爲空,沒有任何顯示。那麼有必要對這個「空格」難度的實力進行測試。而通過測試發現,「空格」與真實的傳奇難度的水平相差甚遠,所以能夠得知,採用這種投機的方式並不能直接解鎖傳奇難度。
圖11 嘗試修改全局設置解鎖傳奇難度
由以上的流程能夠看出,逆向工程須要的是細心與耐心。不少時候,成功的逆向每每是「三分技術,七分運氣」。對於同一項內容的解鎖,嘗試採起不一樣的方式每每會有新的發現。而對逆向工具的正確使用,也會起到事半功倍的效果。
至此,FIFA07已經獲得完全解鎖,也找到了全部隱藏項目的標誌位,逆向工程的第一個成功的嘗試,也是爲之後的工做打下了良好的基礎。