Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
Hardware Hacking.
Edycja polska
Autorzy: Joe Grand, Ryan Russell
Tumaczenie: Radosaw Meryk
ISBN: 83-7361-549-0
Tytu oryginau: Hardware Hacking
Format: B5, stron: 424
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treci
Podzikowania................................................................................. 11
O Autorach ...................................................................................... 13
Sowo wstpne ................................................................................ 17
Wstp ............................................................................................. 23
Cz I
Rozdzia 1. Narzdzia......................................................................................... 29
Wprowadzenie................................................................................................................. 29
Zestaw podstawowy ........................................................................................................ 30
Zestaw dla rednio zaawansowanych .............................................................................. 32
Zestaw dla zaawansowanych........................................................................................... 35
Gdzie mona zakupi potrzebne narzdzia...................................................................... 38
Cz II
Spis treci
5
Wykonywanie projektu: oprogramowanie .............................................................. 141
Instalacja sterownikw karty telewizyjnej ....................................................142
Instalacja programu MPlayer i kodekw ......................................................142
Instalacja programu MythTV .......................................................................142
Linuksowy komputer HTPC podsumowanie...................................................... 147
Co dalej? Zagadnienia dla zaawansowanych................................................................. 148
Spis treci
Spis treci
Dodatki .......................................................................................405
Skorowidz...................................................................................... 407
Rozdzia 7.
Hacking konsoli
Playstation 2
W tym rozdziale:
Otwieranie konsoli Playstation 2
Instalacja portu szeregowego
adowanie kodu z karty pamici
Inne projekty: wykorzystanie dowolnych twardych dyskw
Wprowadzenie
Z 60 milionami egzemplarzy sprzedanymi na caym wiecie wedug stanu na sierpie
2003 roku konsola PlayStation 2 firmy Sony posiada najwiksz liczb uytkownikw spord wszystkich wspczesnych konsol gier. Do nieoczekiwanie, w porwnaniu z konsolami Xbox firmy Microsoft oraz Dreamcast firmy Sega, dla konsoli PS2
istnieje stosunkowo mao modyfikacji sprztowych i hobbystycznych projektw oprogramowania. Istnieje aktywna spoeczno programistw tworzcych oprogramowanie
dla konsoli PS2, ale jej liczebnoci nie da si porwna z analogicznymi grupami dla konsol Xbox lub Dreamcast. Poza producentami zmodyfikowanych ukadw, znanych jako
modchipy, przerbkami konsol PS2 zajmuje si bardzo niewielu hakerw sprztowych.
Jednym z powodw, dla ktrych nie istnieje zbyt wiele modyfikacji konsoli PS/2 jest
fakt, e dua grupa utalentowanych hakerw zajmujcych si wsteczn inynieri
sprztu konsoli PS2 to producenci modchipw. Ludzie ci chroni informacje, traktujc je
jak tajemnice handlowe i rzadko ujawniaj szerszemu gronu odbiorcw (zazwyczaj dostarczaj tylko tyle informacji, ile potrzeba uytkownikowi do zainstalowania modchipa).
Dodatkowo, chocia w konsoli PS2 zastosowano kilka standardowych interfejsw,
takich jak USB czy IEEE 1394, jej architektura wewntrzna cakowicie rni si od
standardowych na przykad od architektury PC, na ktrej opiera si konsola Xbox.
Zlokalizowanie szyn danych oraz zidentyfikowanie sygnaw wyjciowych generowanych przez niestandardowe ukady pyty konsoli PS2 wymaga znacznie wicej wysiku.
234
Cz II Modyfikacje sprztowe
235
zasilania. Zazwyczaj program ten jest innym programem adujcym, tym razem z graficznym interfejsem uytkownika, umoliwiajcym adowanie programw i narzdzi
z pyty CD na karcie pamici lub na dysku twardym. Na rysunku 7.1 zaprezentowano
modchip LisaZero (dostpny wycznie dla systemu PAL), w ktrym wykorzystano
ukad PLD QuickLogic ze zmodyfikowanym kodem adujcym.
Rysunek 7.1.
Modchip
LisaZero
W niektrych podrozdziaach niniejszego rozdziau zamieszczono przykady kodu rdowego. W wikszoci przykadw wykorzystano bibliotek open source PS2Lib
dostpn pod adresem http://ps2dev.sourceforge.net/ps2lib.html.
Oto kilka uwag na temat konwencji zastosowanych w kodzie:
W pliku nagwkowym tamtypes.h zdefiniowano podstawowe typy
Inynierowie i hakerzy zajmujcy si produkcj modchipw powicaj wiele czasu i pienidzy na prace nad wsteczn inynieri sprztu i testowaniem. Uzyskane przez nich
informacje prawie nigdy nie s ujawniane szerszemu gronu odbiorcw. Gwnym powodem jest obawa przed konkurencyjnymi producentami modchipw. Czasami tworz
Cz II Modyfikacje sprztowe
236
Problem z gwnymi wersjami pyty gwnej polega na tym, e wraz ze zmian wersji
zmienia si fizyczne rozmieszczenie elementw na pycie. Oznacza to, e instrukcje
wyszukania okrelonego komponentu lub punktu pomiarowego dla pyty V1 s inne ni
dla V7. Ukad pyt niektrych wersji (np. V5 i V6) jest zbliony, a zatem, w takim
przypadku instrukcje bd takie same. Modyfikacje opisane w niniejszym rozdziale zostay wykonane dla konsoli PS2 w wersji V4. Posiadacze innych wersji konsoli bd
musieli dostosowa instrukcje do swoich pyt gwnych. Tam, gdzie to moliwe, bd si
stara wskaza rnice pomidzy pytami poszczeglnych wersji.
237
Cz II Modyfikacje sprztowe
238
Tabela 7.1 Identyfikacja konsol PS2 w wersjach V1, V2 i V3
Wersja
Kod daty
V1
U1
0D
V2
U0
0D
V3
U1
1A
V3
U2
0D
a kod daty jest rny od 3D, mamy do czynienia z konsol w wersji V9. Jeeli
kod daty to 3D, nasza konsola to V10. W konsolach V9 i V10 nie ma portu
IEEE 1394, a w niektrych pomidzy przyciskami Reset i Eject zamontowany
jest port podczerwieni.
Otwieranie konsoli
Pierwsz trudnoci jest dostanie si do pyty gwnej. Otwarcie konsoli PS2 dla kogo, kto nigdy przedtem tego nie robi, moe by trudne. Instrukcje podane poniej
dotycz konsoli V4, a zatem by moe trzeba je nieco zmodyfikowa dla konsol wyprodukowanych po ukazaniu si tej wersji. Niektre z opisanych tu czynnoci zupenie nie pasuj do modeli w wersji V3 i wczeniejszych.
Ryzyko uszkodzenia sprztu
239
Rysunek 7.3.
Usuwanie oson
rub
Cz II Modyfikacje sprztowe
240
11. Zasilacz jest poczony z pyt gwn konsoli PS2 za pomoc czterostykowego
13. Odkr osiem maych rubek. Cztery spord nich znajduj si pod plastikow
241
Rysunek 7.7.
Dolna cz
pyty gwnej
konsoli PS2
Konsola PS2 jest teraz cakowicie rozmontowana; mona zatem przystpi do wykonywania modyfikacji!
Cz II Modyfikacje sprztowe
242
Przygotowania
W tabeli 7.2 zestawiono elementy potrzebne do wykonania kabla SIO oraz pyty interfejsu, a na rysunku 7.8 zaprezentowano fotografi elementw. Ukad MAX3323EEPE
mona zamwi na stronie WWW firmy Maxim (www.maxim-ic.com). Naley pamita, aby zamwi wersj ukadu w obudowie DIP. Pozostae elementy mona znale
w sklepach elektronicznych (take w sklepach internetowych zajmujcych si sprzeda czci elektronicznych).
Tabela 7.2. Lista elementw
Liczba sztuk
Element
Uwagi
MAX3323EEPE
Maxim, www.maxim-ic.com
Pytka drukowana
Przewd 30AWG
o dugoci okoo 30 cm
opcjonalnie
opcjonalnie
Rysunek 7.8.
Materiay
potrzebne
do wykonania
kabla SIO
Sygna
Czerwony
+3.3 V (VCC)
Czarny
Masa (GND)
Biay
Niebieski
Zielony
EE_RXD i PC_RXD
243
Wykonywanie projektu
Ryzyko uszkodzenia sprztu
Na pycie gwnej konsoli PS2 znajduje si wiele montowanych powierzchniowo elementw wraliwych na temperatur. Nie naley uywa lutownic o mocy przekraczajcej 15 W. W przypadku lutownicy o regulowanej mocy przed lutowaniem upewnij si,
e zostaa nastawiona na warto 15 W.
Pyt gwn konsoli PS2 naley ustawi tak, aby zcze A/V znajdowao si bliej nas,
a zcze karty pamici dalej. Sposb uzyskania dostpu do pyty gwnej konsoli PS2
szczegowo opisano w podrozdziale zatytuowanym Otwieranie konsoli PS2. Pyt
gwn w wersji V4 w tym pooeniu pokazano na rysunku 7.7. Rozpoczniemy od
przymocowania przewodw czcych pyt PS2 z kablem szeregowym:
1. Odszukaj zacisk +3.3 V. Pooenie tego zacisku na pycie V4 pokazano
Cz II Modyfikacje sprztowe
244
Rysunek 7.10.
Pooenie masy
(GND) i portu
SIO ukadu EE
EE: bdzie to styk EE_RXD. Grne kwadratowe pole lutownicze portu SIO
to styk EE_TXD. Bezporednio nad stykiem EE_TXD znajduje si przelotka
kontaktowa (ang. via) styku EE_RXD. Na rysunku 7.11 pokazano zblienie
przelotki EE_RXD, pola EE_TXD oraz kondensatora VCORE. Naley zachowa
ostrono, aby nie podczy si do niewaciwej przelotki kontaktowej
w obszarze poczonym z niewielkim rezystorem. Przelotka styku EE_RXD
nie jest poczona z adnym elementem po tej stronie pyty. Ostronie
przylutuj jeden koniec zielonego przewodu do omawianej tu przelotki.
Ryzyko uszkodzenia sprztu
Przelotka kontaktowa (ang. via) to niewielki, okrgy otwr w pycie gwnej. Zazwyczaj suy do czenia jednej warstwy lub strony obwodu drukowanego z drug stron. W wykonywanej modyfikacji jeden z punktw (EE_RXD) jest podczony do niewielkiej przelotki kontaktowej. Naley zwrci uwag na to, e przelotki kontaktowe rni
si od pl lutowniczych (ang. pad), czyli niewielkich kwadratowych lub okrgych
punktw pokrytych cyn.
Poniewa przelotki cz rne warstwy pyty gwnej, ich uszkodzenie moe spowodowa uszkodzenie wielu warstw, a tym samym zniszczenie caej pyty gwnej. Moe
si tak zdarzy np. w przypadku zbytniego nagrzania przelotki. Aby unikn uszkodzenia pyty podczas czenia styku EE_RXD, naley wykona nastpujce czynnoci:
1. Za pomoc wkrtaka jubilerskiego delikatnie zdrap cyn osaniajc przelotk.
2. Na past lutownicz na odsonit przelotk.
3. Na niewielk ilo cyny na lutownic i szybko dotknij ni do przelotki tak,
aby cyna spyna z lutownicy do przelotki.
4. Pokryj cyn przewd, ktry bdzie uyty do wyprowadzenia sygnau EE_RXD.
5. Na niewielk ilo ywicy na pokryty cyn przewd.
6. Przykadajc pokryty cyn przewd do grnej czci przelotki, dotknij lutownic
do kropli cyny na przelotce tak, aby poczya si z pokrytym cyn przewodem.
Podczas wykonywania tej czynnoci naley jak najkrcej podgrzewa przelotk
jednak wystarczajco dugo, aby zapewni dobre poczenie lutowane
pomidzy przewodem a przelotk.
5. Zlutuj jeden koniec niebieskiego przewodu z kwadratowym polem
245
Rysunek 7.11.
Napicie VCORE
oraz sygnay
EE_TXD
i EE_RXD
metalowej osony dolnej czci pyty gwnej mona zauway niewielki otwr
montaowy w obudowie, znajdujcy si pomidzy zczem A/V a zczem
optycznym. Otwr ten jest wykorzystywany w celu przymocowania konsoli
PS2 do wywietlacza. Jeeli chcesz zamontowa kart interfejsu na zewntrz
konsoli PS2, moesz przeprowadzi przewody przez ten otwr pod moduem
wentylatora i wcznika zasilania. Sposb wyprowadzenia przewodw pokazano
na rysunku 7.14. Aby zakoczy skadanie konsoli, wykonaj w odwrotnej
kolejnoci czynnoci opisane w podrozdziale Otwieranie konsoli PS2.
Cz II Modyfikacje sprztowe
246
Rysunek 7.13.
Pyta gwna
przygotowana
do zmontowania
Rysunek 7.14.
Gotowe
piciostykowe
zcze portu SIO
Rysunek 7.16.
Widok karty
interfejsu SIO
z gry
Rysunek 7.17.
Widok karty
interfejsu z dou
247
Cz II Modyfikacje sprztowe
248
Testowanie
Aby przetestowa utworzon kart interfejsu, podcz j z jednej strony do komputera
PC, a z drugiej do konsoli PS2. Za pomoc programu terminalowego (np. HyperTerminal, dostarczanego wraz z systemem Windows) ustaw port szeregowy na 38400
bodw, 8 bitw danych, brak parzystoci, 1 bit stopu oraz wycz sprztowe sterowanie przepywem. Wcz zasilanie konsoli PS2. Jeli kabel dziaa poprawnie, na ekranie wywietl si komunikaty pokazane na rysunku 7.18.
Rysunek 7.18.
Komunikaty
ukadu EE
Jak to dziaa?
Podstaw dziaania tej modyfikacji jest wykorzystanie nieudokumentowanej funkcji
konsoli PS2 portu szeregowego ukadu EE. Szczegowe informacje dotyczce
portu SIO mona znale w podrozdziale Przegld systemu PS2. W standardowym
porcie szeregowym RS232 w komputerze PC zazwyczaj wykorzystuje si napicie
+/12 V do zdefiniowania logicznego zera oraz logicznej jedynki. Ukad EE jest zasilany napiciem +1,7 V, a zatem, gdybymy bezporednio poczyli zcza portu
SIO do portu szeregowego komputera PC, bez konwersji napicia, sygnay przesyane z komputera PC do ukadu EE mogyby uszkodzi urzdzenie. Ukad MAX3323
to konwerter poziomw, przeksztacajcy napicia wyjciowe generowane przez
ukad EE do poziomu wymaganego przez komputer PC i vice versa. Do zasilania ukadu MAX3323 potrzebne jest napicie +3,3 V, pobrane z konsoli PS2.
249
Oficjalna witryna WWW eksploita Independence to www.0xd6.org/ps2-independence.html. Mona tu znale najnowsz jego wersj, a take informacje o sposobach zapisywania plikw na karcie pamici oraz konfigurowania eksploita w systemie Windows. Od czasu jego publikacji w internecie pojawio si wiele przewodnikw i instrukcji krok po kroku przedstawiajcych uruchamianie oprogramowania
zapisanego na kartach pamici. Niektre z tych programw to Naplink USB boot loader (http://naplink.napalm-x.com), Pukklink oraz ps2link (www.ps2dev.org, sekcja
Loaders), a take MediaPlayer, napisany przez grup
PS2Reality (www.ps2reality.net). Obecnie opracowano wiele innych programw.
Jak si okazao, wykorzystanie eksploita do zaadowania programu adujcego jest
najatwiejszym sposobem uruchamiania programw uytkownika na konsoli. Chocia termin eksploit brzmi nieco pompatycznie, faktem jest, e program ten
otworzy drzwi dla spoecznoci hobbystycznych programistw konsoli PS2.
Przygotowania
Najtrudniejsze w wykonaniu tego projektu jest zapisanie plikw na karcie pamici.
W tym celu mona wykorzysta obraz dysku o nazwie Exploit Installer, napisany
przez Nicholasa Van Veena. Aby to zrobi, mona posuy si technik podmiany
dyskw lub wykorzysta modchip opisany we wczeniejszej czci niniejszego rozdziau.
Przewodnik dotyczcy instalacji mona znale pod adresem http://ps2.consolevision.
com/ps2homebrew3.shtml.
Wybr odpowiedniej karty pamici
Eksploit Independence dziaa z kartami pamici do konsoli Sony PS2 lub kartami
innych firm obsugujcymi ukad MagicGate; nie dziaa natomiast z kartami pamici konsoli PS1 oraz z tymi, ktre nie obsuguj wspomnianego ukadu.
Cz II Modyfikacje sprztowe
250
Opcje programu titleman wyszczeglniono w tabeli 7.4. Najpierw naley skorzysta z opcji
, aby utworzy plik TITLE.DB na dysku i zapisa kod eksploita oraz kilka standardowych identyfikatorw tytuw.
Tabela 7.4. Opcje programu titleman
Opcja
Opis
W treci narzdzia titleman mona znale wykonywalny kod na konsol PS2, uruchamiajcy plik BOOT.ELF z karty pamici. Plik BOOT.ELF jest zapisany w folderze
konfiguracyjnym konsoli, ktry mona przeglda za pomoc przegldarki konsoli PS2.
Nazwa tego folderu to:
BADATA-SYSTEM dla konsol PS2 zakupionych w Ameryce Pnocnej;
BEDATA-SYSTEM dla konsol PS2 zakupionych w Europie;
BIDATA-SYSTEM dla konsol PS2 zakupionych w Japonii i innych krajach
azjatyckich.
Podczas przygotowania zrzutu gry (zobacz podrozdzia Zapisywanie pliku TITLE.DB na
karcie pamici) naley pamita, aby uy nazwy odpowiadajcej waciwemu regionowi geograficznemu.
251
Cz II Modyfikacje sprztowe
252
253
Niezaleno!
Po zapisaniu eksploita na karcie pamici w kart do konsoli PS2 i umie w napdzie
DVD dowoln gr, ktrej tytu umiecie w pliku TITLE.DB. Po zaadowaniu dysku
najpierw wywietli si biay ekran, a po krtkiej chwili ukae si ekran pocztkowy
programu BOOT.ELF. Jeeli uruchomi si zwyky emulator konsoli PS1, sprawd zawarto pliku TITLE.DB za pomoc opcji -l i upewnij si, czy nie popenie pomyki
w pisowni identyfikatora. Sprawd take, czy w napdzie znajduje si pyta z waciw
gr. Jeeli podczas adowania eksploita wywietli si czerwony ekran, upewnij si, e
umiecie plik BOOT.ELF w tym samym folderze, co plik TITLE.DB. Inne bdy, jakie mog wystpi podczas adowania, s specyficzne dla aplikacji zapisanej w pliku
BOOT.ELF.
Jak to dziaa?
Konsola PS2 umoliwia emulacj konsoli PS1 za pomoc kombinacji emulacji sprztowej i graficznego, programowego emulatora PS1 o nazwie PS1DRV. W przypadku prby zaadowania gry na konsol PS1 w konsoli PS2, przegldarka systemowa najpierw
uruchamia emulator PS1DRV z systemu BIOS. Emulator PS1DRV wykonuje kilka
254
Cz II Modyfikacje sprztowe
czynnoci konfiguracyjnych, takich jak ustawienie szybkoci dysku oraz wczytanie parametrw graficznych dla wybranej gry. Na koniec inicjuje emulator graficzny i przestawia procesor IOP w tryb konsoli PS1. Teraz sterowanie przejmuje procesor IOP, ktry aduje gr na konsol PS1 z dysku. Grafika jest emulowana za pomoc specjalnego kanau
SIF DMA w procesorze EE pomidzy procesorem IOP a emulatorem PS1DRV.
Po umieszczeniu dysku PS1 w konsoli PS2 przegldarka systemowa odczytuje identyfikator tytuu z zapisanego na dysku pliku o nazwie SYSTEM.CNF. W pliku tym podane
s take inne parametry adowania, takie jak domylny tryb wideo, dla ktrego napisano gr. Identyfikator tytuu gry jest przekazywany do emulatora PS1DRV, dziki
czemu mona wybra parametry graficzne dopasowane do danej gry. Jeeli przegldarka systemowa nie moe znale pliku SYSTEM.CNF na dysku PS1, do emulatora
PS1DRV przekazywana jest warto ???.
Kiedy emulator PS1DRV poszukuje parametrw grafiki dla okrelonej gry, przeszukuje trzy lokalizacje: wbudowan tabel, plik SYSTEM.CNF zapisany na dysku oraz
inny plik, zapisany na karcie pamici, noszcy nazw TITLE.DB. Ten ostatni znajduje
si w folderze systemowym, zarezerwowanym dla programw BIOS-u. W przypadku
konsol PS2 zakupionych w Japonii lub Azji, folder ten ma nazw BIDATA-SYSTEM;
w przypadku konsol przeznaczonych dla krajw europejskich jest to folder BEDATASYSTEM, natomiast w Ameryce Pnocnej nazywa si on BADATA-SYSTEM.
Na pomys stworzenia eksploita Independence wpadem analizujc procedury przetwarzajce identyfikator tytuu z pliku TITLE.DB. Gwna procedura adujca informacje z pliku TITLE.DB, ktr nazwaem
!
, suy do adowania pliku
TITLE.DB z karty pamici do pamici RAM. Procedura ta wywouje inna procedur
find_title_params(), ktrej zadaniem jest odszukanie identyfikatora tytuu w zaadowanym pliku TITLE.DB i zwrcenie cigu znakw z wartociami parametrw.
Warto zauway, e sposb zaadowania pliku TITLE.DB do pamici RAM powoduje, e implementacja eksploita jest dziecinnie atwa. Caa zawarto pliku TITLE.DB
jest adowana pod stay adres RAM 0x20800000. Oznacza to, e w pliku TITLE.DB
moemy umieci cay program, ktry przejmie sterowanie po zakoczeniu dziaania
eksploita i bdziemy dokadnie znali miejsce zaadowania tego programu!
Do procedury $
%&
s przekazywane trzy parametry: adres okrelajcy,
gdzie jest adowany plik TITLE.DB (
), adres zmiennej acuchowej, pod ktry
zostan przekazane parametry (%&) oraz poszukiwany identyfikator tytuu (
). Procedura wykonuje ptl przeszukujc kady wiersz wiersze s zakoczone znakiem wysuwu wiersza ('), powrotu karetki (()) lub kombinacj tych znakw
w poszukiwaniu identyfikatora tytuu. W przypadku znalezienia identyfikatora
przeszukiwana jest dalsza cz wiersza za znakiem rwnoci, a do znaku koca wiersza. Po osigniciu koca wiersza uzyskany acuch znakw jest kopiowany do zmiennej
acuchowej %&. Z tej operacji kopiowania skorzystamy w utworzonym eksploicie.
W idealnej sytuacji, rozmiar parametru powizanego z identyfikatorem tytuu powinien wynosi okoo 25 bajtw, cznie ze znakiem koca wiersza. W procedurze
do zapisania tej wartoci przydzielany jest bufor o rozmiarze 256 bajtw. Bufor ten jest zapisany w pamici RAM obok bardzo wanego rejestru ukadu EE
adresu powrotu, czyli rejestru *&. Kiedy w architekturze MIPS procedura wykonuje
255
inn procedur, zapisuje rejestr *& do pamici RAM, poniewa procesor automatycznie aktualizuje rejestr *& w taki sposb, e wskazuje na adres ostatniej instrukcji procedury wywoujcej. Po zakoczeniu wykonywania procedury wywoywanej, rejestr *&
w dalszym cigu wskazuje na t instrukcj, a zatem przed wyjciem z procedury naley
odtworzy rejestr *& z pamici RAM. W procedurze
rejestr *& zapisywany przed wywoaniem procedury $
%&
znajduje si przed
miejscem przydzielonym do zapisania wartoci cigu znakw %&.
Kiedy procedura $
%&
kopiuje acuch znakw do zmiennej %&,
wykorzystuje funkcj jzyka C &%+
, ktra kopiuje cig dowolnej dugoci do innego
cigu. W funkcji &%+
nie jest przeprowadzane sprawdzanie rozmiaru cigu, a zatem funkcja kopiuje cigi do momentu napotkania znaku , (znak o kodzie ASCII 0).
Oznacza to, e gdybymy skonstruowali w pliku TITLE.DB cig znakw o rozmiarze
przekraczajcym 256 bajtw przydzielonych na zmienn %&, moglibymy zastpi zapisan warto rejestru *& (poniewa jest ona zapisana w pamici RAM za
wartoci zmiennej %&). Warto, ktra zastpi adres zapisany w rejestrze *&,
stanie si adresem nastpnej instrukcji wykonywanej po zakoczeniu procedury
. Moe to by dowolny adres w pamici RAM poprawny dla ukadu EE.
Ten rodzaj eksploita, wykorzystujcy przepenienie bufora, jest powszechnie wykorzystywany w programach, w ktrych nie wykonuje si sprawdzenia rozmiaru cigw
znakw lub innych wartoci adowanych z plikw danych. Ma on jednak istotn wad, polegajc na tym, e bardzo atwo zapobiec moliwoci jego uycia. Dotyczy to
rwnie eksploita Independence emulatora PS1DRV. Wykorzystujc standardow
funkcj C &%+
, mona okreli maksymaln dugo kopiowanego acucha
znakw. Gdyby firma Sony uya funkcji &%+
z maksymaln dugoci 256
znakw, utworzenie eksploita nie byoby moliwe.
A zatem, na jaki adres ustawimy rejestr *& podczas konstruowania cigu znakw w pliku
TITLE.DB? Jak pamitamy, procedura
aduje ca zawartoci
pliku TITLE.DB do pamici RAM pod stay adres 0x20800000. Rejestr *& moemy
ustawi na dowolny adres za adresem adowania pliku TITLE.DB. W eksploicie Independence wykorzystaem stay adres 0x20810110, co pozwala na zapisanie w pliku TITLE.DB okoo 200 wpisw. Po zakoczeniu dziaania procedury
,
rejestr *& wskazuje na ten adres, a mj kod przejmuje sterowanie nad konsol PS2.
Cz II Modyfikacje sprztowe
256
W listopadzie 2003 r. Nicholas Van Veen oraz kilku innych programistw (w tym ja
sam) opracowali bibliotek libHDD zbir bibliotek i sterownikw umoliwiajcych wykorzystywanie dysku twardego w programach uytkownikw. W bibliotece
tej (dostpnej pod adresem http://ps2dev.org/kb.x?T=967) zawarta jest take obsuga
oficjalnego systemu plikw firmy Sony dla programw wykorzystujcych dysk twardy.
Dziki bibliotece libHDD, programy przeznaczone do uruchomienia z karty pamici
mog wykorzystywa dane lub nawet inne programy zapisane na dysku twardym.
Otwiera to drog dla wielu projektw, od emulatorw obsugujcych adowanie zrzutw
gier z dysku twardego (np. PGEN) do programw multimedialnych sucych do
odtwarzania plikw audi o i wideo zapisanych na dysku twardym. Mona przypuszcza, e w miar pojawiania si coraz wikszej liczby programw obsugujcych dysk
twardy, konsola PS2 zyska wiksze uznanie jako platforma hackingu sprztowego.
257
Rysunek 7.19.
Procesor
Emotion Engine
Cz II Modyfikacje sprztowe
258
Port SIO nie jest udokumentowany w podrczniku uytkownika procesora EE. Z tego
powodu kod inicjalizacji oraz komunikaty wyjciowe odczytaem z BIOS-u konsoli PS2.
Mnstwo informacji o przerwaniach portu SIO oraz rejestrach sprztowych znalazem
w podrczniku Core Architecture Manual procesora Toshiba TX79. Okazuje si, e
podrcznik ten jest niemal identyczny z podrcznikiem Core User's Manual procesora EE, poza tym, e z tego drugiego usunito informacje dotyczce portu SIO.
Po przestudiowaniu BIOS-u, kodu obsugi portu SIO w jdrze oraz dostpnej dokumentacji i po napisaniu kilku testowych programw, mogem sporzdzi do dokadn
list rejestrw i definicji. Wikszo rejestrw portu SIO w ukadzie EE jest identyczna
z rejestrami tego portu w procesorze TX49, jednak nic nie wskazuje na to, e wystpuje
w nim obsuga DMA. Mona rwnie znale kilka rejestrw analogicznych do ukadu UART procesora TX7901. Map rejestrw portu SIO zaprezentowano w tabeli 7.5.
Tabela 7.5. Mapa rejestrw portu SIO
Adres
Nazwa
Opis
0x1000f100
')/0
0x1000f110
')0
0x1000f120
')'10
0x1000f130
')'0
0x1000f140
')2/0
0x1000f150
')"30
0x1000f180
')42'2)
0x1000f1c0
')02'2)
Z podrcznika procesora TX79 dowiedziaem si, e jeli port SIO ma potrzeb przerwania dziaania procesora CPU, generuje wyjtek -. i ustawia 12 bit rejestru przyczyny (/. Procesor CPU dekoduje wwczas rejestr stanu procesora, aby okreli
przyczyn przerwania. Jdro procesora EE wykorzystuje wyjtek SIO jako mechanizm uruchamiania wbudowanego debuggera w jdrze.
Aby zainicjowa port SIO, naley najpierw zapisa do rejestru 0
() warto okrelajc liczb bitw danych i bitw stopu oraz informacj o wczeniu lub wyczeniu
kontroli parzystoci. Mona rwnie okreli rdo zegara, potrzebne do okrelenia
szybkoci transmisji. W nastpnym kroku obie kolejki FIFO s wyzerowane oraz
opcjonalnie wczane s przerwania. Na koniec naley obliczy dzielnik i warto
zegara potrzebne do okrelenia szybkoci transmisji. Na listingu 7.3 zaprezentowano
przykadowy kod inicjalizacji portu SIO z podan szybkoci transmisji i standardowymi parametrami 8N1 (8 bitw danych, bez kontroli parzystoci, 1 bit stopu).
Listing 7.3. Przykad kodu inicjalizacji portu SIO
5
+
')2/02041
$
67
8
9:
9
:
;
2'2)
76
5
+
')2/00204
$
67
8
:
;
2'2)
0
76
5
+
')2/04204
$
67
8
:
;
2'2)
4
76
5
+
/</,
!!
67
=>?
:9:
>
9
9@>
;
76
259
&A
@&
B
&A
@
67
C9
9@>
;
76
&%
@
D
67
8
@ 9
9@>
;
76
67
%
@ E:
FG
@
H&G
@
9
H9> G
9
:9
9
/<
@ 9
9@>
;
76
:II(G
')/0
67
=JK9
:9 F
H9
:L
76
:G
')'10
67
=9
:
;
2'2)
76
:')2/02041M')2/00204M')2/04204G
')2/0
67
=JK9
;
2'2)
76
:G
')2/0
@
D
/</,6@&
7
(
:F
@
ND
(
OO
PP@
I
@
6D
:@
II
%
M
@G
')"30
Q
Sposb wysyania i odbierania znakw jest bardzo prosty: aby wysa znak, naley zapisa warto do rejestru 0
1'0'; aby go odebra, naley odczyta warto z tego rejestru. Trzeba rwnie sprawdzi rejestr 0
0), aby upewni si, czy w buforze 1
'0'
jest miejsce na kolejny znak lub czy w kolejce )1
'0' jest chocia jeden znak, ktry
mona odczyta. Kod sucy do wysyania i odbierania znakw przypominajcy
standardowe funkcje ANSI C %
oraz .
pokazano na listingu 7.4.
Listing 7.4. Przykad kodu wejcia-wyjcia portu SIO
H&
B
67
":
&
&9
:>
;
76
:F
:')'0
O
$+
DD
$%
@G
')42'2)
&
Q
B
67
/9
:
@&+9
02'2)
;
; >
9R
76
+
:')'0
O
$+
&
@')02'2)
67
8:E
9&
L
H &
1)2
76
&
Q
Cz II Modyfikacje sprztowe
260
Procesor wejcia-wyjcia
Procesor wejcia-wyjcia (I/O processor IOP) zarzdza prac wikszoci wbudowanych i zewntrznych urzdze kocowych, wcznie z kartami pamici, jednostk
przetwarzania dwiku, kontrolerami oraz napdem DVD. Jest to struktura SoC ###from
LSI Logic###, opracowana na podstawie oryginalnej konsoli PlayStation (PS1), speniajca wszystkie gwne funkcje konsoli PS1 i zrealizowana w jednym ukadzie
scalonym. Rdze procesora IOP tworzy procesor MIPS R3000A, taktowany zegarem
36,864 MHz. Wewntrzna szybko procesora IOP stanowi w przyblieniu 1/8 szybkoci procesora EE taktowanego zegarem 294,9 MHz. Podczas emulacji sprztu PS1
procesor IOP dziaa z oryginaln szybkoci konsoli PS1 tzn. 33 MHz. Ukad IOP
moe bezporednio zaadresowa do 2 MB pamici RAM. Z urzdzeniami wewntrznymi i peryferiami zewntrznymi komunikuje si za pomoc szyny SBUS.
261