談到破解ePSP,就不得不感謝kermit模組,這個模組的功能是負責ePSP模擬器與實體PlayStation Vita主機間的溝通,它讓我們能夠取得很多看似「新功能」,但原本無法使用的既有功能。所以如果要破解ePSP,與其直接對PlayStation Vita本體的安全機制下手,還不如從kermit模組開刀。
前情提要:
家用主機秘辛5:數秒內抽換光碟, PS 盜版片也能騙過驗證機制
模擬硬體周邊的模組
在ePSP中,例如按鍵、無線網路、衛星定位、攝影機、Memory Stick記憶卡、USB,以及其他周邊設備,都不是真的接到實體主機上(譯註:並非接到做為模擬器宿主的PlayStation Vita,而ePSP也不是實體PlayStation Portable),所以ePSP並不是真正的去存取、操作這些設備,取而代之的是PlayStation Vita需要以自己的硬體設備,去「模擬、替代」ePSP的設備,這也就是kermit模組的主要工作。如果沒有kermit模組的話,破解ePSP時,就必需要自己搞定這些設備的問題,所以從kermit模組下手進行破解工作,是個事半功倍的好方法。
為了節省時間,我在這面直接討論已經洩露的核心漏洞,以及由開發者frostegater所使用的wlan模組(無線網路模組)漏洞。
▲PlayStation Portable的實體遊戲需透過UMD光碟機讀取,PlayStation Vita卻沒有光碟機。
▲但是PlayStation Vita要執行數位版遊戲時,也沒有Memory Stick記憶卡讀卡機,所以要透過kermit模組將自己的記憶卡模擬成Memory Stick記憶卡。(圖片來源:維基百科,本圖採用創用CC姓名標示,作者為KB Alpha)
▲此外有許多PlayStation Portable的硬體,也都可以透過kermit模組模擬。圖為PlayStation Portable的GPS衛星定位模組。(圖片來源:維基百科,本圖採用創用CC姓名標示-相同方式分享,作者為In7ane)
記憶體指標暗藏玄機
我們先簡單地回顧一下PlayStation Portable的安全機制。PlayStation Portable的記憶體共有32MB,被切割為核心記憶體(Kernel RAM,8MB)與使用者記憶體(User RAM,24MB),核心記憶體的位置永遠會從0x8開始,而使用者記憶體則是從0x0開始。
一般來說,帶有正負號的數字會用第一個位元來記錄正負號,以0代表正、1代表負,剩餘的數字則是用來記錄數值,記憶體的但是指標會使用不帶正負號的數字,在這種情況中,第一個位元就不是用來記錄正負號,而是記錄數值。回頭看看核心記憶體的指標,它是1組不含正負號且以0x8為首的數值,0x8的二進位表示法為1000,所以它的第一個位元為1,若以帶正負號的數字格式來看待它的話,它就是負數。
我們可以從這邊進行猜測,PlayStation Portable的安全機制,有沒有可能以該數值是否為負數,來檢測指標是否指向核心記憶體,反過來說,若是數值為正數,則代表指標指向使用者記憶體。這種檢測方式可以輕易地將指標進行分類,也就是說開發者無法把PlayStation Portable的安全機制當傻瓜,無法輕易地直接存取核心記憶體。但是,上面所說的只是理論,並不是實際遇到的情況。
下集預告:深入無線網路模組
原文刊載於http://wololo.net/2014/01/25/10-days-of-hacking-bonus-day-epsp/
感謝原文作者Acid_Snake同意轉載
Original article by Acid_Snake. Translate by konamigood.
請注意!留言要自負法律責任,相關案例層出不窮,請慎重發文!