找回密碼
 註冊
搜索
查看: 3195|回復: 1

[系統] 深入瞭解wii的系統架構

[複製鏈接]
發表於 26-4-2010 18:14:15 | 顯示全部樓層 |閱讀模式
轉自91wii -Lucky☆star . E' ^3 {& L0 e5 ~+ T- l

. a: b8 h5 F: q0 ]; Xios是什麼?cios是什麼?& I0 Y  k. p# ?1 e
6 r1 F1 Q+ O, w7 M  E; l
. Q3 H( |  l$ o& t: [$ p" s
一、什麼是IOS2 R$ Q# J5 I! D9 I; c' f

, Z3 ]5 u! g7 a/ T; q: |9 s2 ]  說到IOS,肯定有人會問,什麼是IOS?這裏我把它理解為Input Output System。IOS採用了微內核的架構,提供了usb鍵盤,光碟機,按鍵,sd卡,檔系 統,安全等等介面,其特點之一就是模組化,這點相信大家都有所體會吧。  W& X+ Y8 Q9 \& H
  而IOS與dll的最大區別之一就是dll只是庫檔,可能是個元件,可能是個函數集合,可能是個資源檔案,或者是個功能模組。而IOS則包含了dll。以一個不太恰當的比喻來說,IOS可以理解為操作系 統的內核,SysMenu則是我們可以接觸到的用戶介面。$ L3 ]) F8 x8 y' x3 p# {2 L, F0 t& Y
6 P1 W2 H+ V! i9 |  M! ?

* i: ~) J$ ]2 J( O* O' z" x二、IOS的種類
; l& j: L* x, u: w  ]) A! n1 y+ E$ Z2 o) k
  就目前而言,IOS主要有三種:+ w7 j2 @! O! s0 S; p& @
  1、官方的IOS,具體有哪些可以看這貼。
- o4 ^! \+ [' w# ]. ]! D  2、cIOS,即custom IOS,包括custom IOS36,Xyzzy等等。這裏有一點需要注意,所有的cIOS都是根據官方的IOS修改而來。
7 c  C$ e1 {! R* [& G( ~$ t  3、還有一種cIOS,與上一種有類似之處,具體是什麼就請各位看官接著往下看吧。
5 H1 ?: T( s/ h6 J) c$ N$ a7 C5 O* x. y

3 a* d  R6 P2 w* P7 I. Z, s三、IOS的版本
; l7 u. T5 ~! S2 o$ [0 j4 ]
  A* C8 W( _2 n6 u- I* Q  IOS是以IOSxxx-Vyyyyy存在的,前面的xxx是編號,範圍限制在4-255之間(其中100為BC,101為MIOS), 也就是4#-255#,4#之前被系 統佔用,而後面的yyyyy才是IOS的版本,例如IOS30的版本有1042、2816等……IOS的這裏的IOS包括了官方IOS和所有cIOS。這裏有一點需要注意,以IOS36來說,12。18,v1042代表了IOS36的不同版本。
9 w; K) |4 ^9 {; s3 R2 F( z6 I- N4 g6 v7 G# D/ v0 u$ \
' Q6 Z# ]; P1 s( X2 Z  j! J  B+ l; C
四、什麼是cIOS) _4 i4 L. b! I, R1 V. t/ F: E6 a

0 Z0 K/ u  H$ Z- g  談到cIOS,相信大家都不會陌生,舉其中一例,custom IOS36是由waninkoko釋出的,根據IOS36修改而來,其與官方IOS最主要的區別就是DIP模組,即DVD Interface,用於IOS與光碟之間的資料交換。眾所周知,官方的IOS是不能讀取備份碟的,而cIOS則由自製的DIP模組代替了官方的使其能夠讀取備份碟。
: w, _+ ]- n/ w9 m+ p. O' }- h/ u
/ K- L. x6 _% R" Y( i& R6 h6 B* j  ]4 G# U0 H  C, I/ ]" `+ v
五、升級  r" ~4 y0 k) I- c* f
1 c/ |2 v' f( g5 t4 \$ K
  遊戲運行前會首先檢查光碟中妹檔,即Title metadata中指定的IOS版本,如果一樣,則直接運行遊戲;如果不一樣,則先載入指定的IOS,然後再運行遊戲。與其類似的還有頻道,wiiware等東西。
! ^+ v& G1 R& {- S7 t5 k% e
& C+ U) Q! V, d( k  p2 r  U  這裏就牽涉到升級,如果光碟中update分區的IOS版本新於主機裏的IOS,則會開始升級(這就是為什 麼有的高版本的機器放入帶低版本升級檔的盤也會提示升級原因);如果有主機裏沒有的IOS,也會開始升級。
9 J, |/ {3 P0 w8 B% J7 b
% n4 G( }  E8 `3 ]2 P/ f3 r$ g  這裏參考第一段,當我們運行一個去升級的遊戲時,如果主機裏沒有所指定的IOS,則會導致遊戲無法運行,這時只需安裝指定的IOS。這也是為什 麼要補全ios的原因有些IOS是很相似的,例如所有的IOS都支持WiFi和USB功能,而且有些能夠被替換。而wii的每次升級則增加新的IOS,升級舊有的IOS,而並不代替舊有IOS,為什 麼這樣做?其實我們可以這樣理解,每一個遊戲光碟,wiiware都會在妹中指定其使用的IOS,如果升級覆蓋掉了原有的IOS,那麼遊戲便無法運行。
! V) x' M. s0 J# R/ }
- X  d+ I  `3 Q  n- o7 \  再次強調一點,wii升級不是覆蓋原有的ios,而是增加新的ios,系 統中的每個ios都是有用的,隨便刪除ios非常容易導致無解的全磚!9 u2 Y/ f7 b4 [3 J0 L4 c7 R

- m5 j" R  M! S4 T1 u, H# n, E. S" M: O, Y8 e
六、深入軟解# g/ x3 ?4 H/ [6 B: R8 v
" N& U1 h/ n" P! u! f1 G; c
  在第五點我們得知,光碟,頻道,wiiware都有其指定的IOS來運行,如BKL,SC這樣的程式可以強制使用IOS249,那SysMenu呢?
" ~6 I- }2 B: I5 ~/ _  X  g, w: ?8 N4 w: M6 `
  SysMenu同樣在特定的IOS上運行,3.4使用IOS50,3.4以前使用IOS30,4.0使用ios60同樣的,4.2用ios70。SysMenu也可以指定其使用的IOS,如果我們指定其使用IOS249,那麼我們就可以直接從光碟頻道進入遊戲了。+ h$ N! [8 r1 Y, s

9 ~+ \( w3 c- Z: f2 H1 l  然而問題也隨之到來,在光碟頻道中我們無法指定其使用的IOS,這樣即使備份碟能夠正常顯示出,但是仍然無法遊戲,當然我們可以用如IOS patcher等軟體指定遊戲使用IOS249,但我想沒有多少人願意再重新刻錄一次吧。當然問題總有解決的辦法,如果我們把所有官方IOS都替換上自製DIP模組,那麼我們就可以直接從光碟頻道運行備份碟了。這就是最後一種cIOS。
7 ]0 A% X: s8 a& {. b: O* l# r
5 H% w5 @* O2 l" A, `' d; h, C2 `/ g8 J" M" ]
七、關於IOS和SysMenu的關係
0 i% m, R' y0 D) S: ?! D2 }
, r& A. }4 J- `8 N  上面談到,IOS是wii系 統的內核,而SysMenu是相應的用戶介面。系 統內核是必須存在的,但是用戶介面則並不強制要求,在主機記憶體在高系 統版本的IOS時,低版本的SysMenu也同樣允許使用,這也是系 統功能表可以降級的基礎,同樣也是IOS補全而不用升級系 統版本原理。但是,當系 統中不存在SysMenu所需要的IOS時,系 統就會出現各種問題(半磚)甚至無法運行(全磚),這也就是為什 麼IOS不能隨便刪除的原因。3 B+ J& I! e; z- T8 p8 G8 i

' P6 r% F1 ~* e7 n1 ?  某些頻道也是需要系 統IOS支援的(4.0下購物頻道需要IOS61),所以當相應IOS不存在時,該頻道也無法運行。& m: f/ b9 _; i
9 L6 E# O) {, C- Z
在通常情況下,我們是無法對IOS進行操作的,因為用戶介面(SysMenu)沒有賦予我們這個許可權,正是由於高手們對SysMenu的研究,發現了各種漏洞,使我們破解了wii的系 統,獲得了對IOS進行操作的能力,才讓我們對wii的應用得到了極大地擴展。但是魔高一尺道高一丈,任天堂也在盡力的封堵這些漏洞,所以系 統才出現了官方版和破解版,IOS也出現了有漏洞(+trucha、freethebug)和無漏洞(-trucha)。  e0 O4 f: C) Y
0 `5 p  K% r! j
  官方的升級(主機功能表“本體更新”,聯網、進頻道、玩遊戲)時,是將IOS和SysMenu同時更新的,而官方所更新的全都是無漏洞的版本,缺少漏洞會導致自製程式無法安裝無法運行,所以建議不要通過官方更新, 為了玩遊戲(遊戲不要求SysMenu版本)用頻道可以補全IOS,為了獲得新的系 統特性可以安裝破解版。% a  e9 {: i+ |$ Q' m
# I! e6 {8 X* A& H4 E3 Z6 _( ~
Nintendo IOS(Input Output System)其實就是系 統內核和一系列的驅動程式集,作用是操縱Wii的硬體,比如手柄,平衡板等等。隨著系 統的硬體升級和新遊戲的推出,Nintendo需要安裝新的IOS來支援新遊戲和新硬體。但是舊的IOS還是繼續存在系 統中,而不是被新IOS覆蓋,因為舊的遊戲還需要他們。) C, N' J7 m7 _* Q( A: l# a/ {
+ O  V- L( ^! v* g3 q
這樣的軟體架構所造成的問題就是,隨著系 統的不斷升級,最終Flash資源會被用盡。目前Flash容量大約在512MB左右,用了大約100多MB,所以剩餘空間還是很大。Wii大約有20個左右不同的IOS。每個遊戲都需要使用其中的一個IOS。比如Rock Band出來的時候,光碟上就有IOS37來支援USB的樂器外設。所有的IOS裏面還有DVD的驅動,原本是用來播放DVD用的,但是Nintendo並沒有使用他們,卻被hacker用來運行備份光碟了。IOS30,50,60是被系 統功能表使用的,如果對他操作不當的話,就全磚了,所以很危險,輕易不要動他。
/ Q" Q; K7 D3 B0 x, M: o5 k4 }
, ~3 m! Z/ t% _CIOS(Custom input output system)是打在原有的IOS上的補丁,用來運行備份光碟. Wii上所有的title都必須signed才能安裝運行,但是這裏面有一個著名的bug, 它用了strcmp()來compare signature, 但是strcmp遇到0x00就退出了,駭客就利用這個bug來修改資料,使得signature的第一位為0x00。 有一些駭客如WiiGater,Waninkoko等利用reverse engineering,反彙編IOS,寫了這些補丁程式,這樣backup launcher 這樣的loader就強制光碟遊戲用IOS249+補丁程式Rev10來運行。但是這個漏洞卻在3.3版的升級中被nintendo補上了,但是有一個IOS卻漏掉了,那就是IOS16, 它出自於nintendo service CD),他還有strcmp bug, 所以可以利用IOS16來安裝其他的patch過的IOS. 所以3.3版以上都要安裝這個IOS16先才能裝CIOS249Rev10等其他CIOS
$ C' y; a+ g. f1 a
' a2 c3 S5 ^$ @8 D- j在最近的系 統功能表4.0升級中,Nintendo安裝了一個高版本IOS16 stub. 這樣低版本的IOS16就無法安裝了。所以hacker又想了個辦法,就是把IOS35降級,還原trucha bug. 這樣又可以通過IOS35安裝其他CIOS 了。
3 H+ P3 O* y+ q8 v5 C/ u3 E( b* T, t! h5 \) U2 J7 S7 n( C
! M( N, c# N) e2 |; W& t, X4 X$ ?# f
原文網址
發表於 6-8-2010 14:47:55 | 顯示全部樓層
好文章,獲益良多!! Thanks Soho!!
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

Archiver|手機版|小黑屋|歡迎光臨 Julybee Club

GMT+8, 25-3-2026 08:47 , Processed in 0.016808 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回復 返回頂部 返回列表