WEBVTT
00:00:00.000 --> 00:00:03.000
Translated by Markus Aurala
(KYBS2004 course assignment at JYU.FI)
00:00:03.000 --> 00:00:12.710
rC3-intromusiikkia
00:00:12.710 --> 00:00:19.340
Herald: Seuraavasta puhujastamme... Hän
on tietoturvatutkija, joka on erikoistunut
00:00:19.340 --> 00:00:26.500
sulautettuihin järjestelmiin, viesti-
liikenteeseen ja matkapuhelimiin.
00:00:26.500 --> 00:00:33.000
Forbes nimesi hänet alle 30-vuotiaiden
teknologiavaikuttajien listalleen ja
00:00:33.000 --> 00:00:39.940
hän on voittanut OWASP Appsec CTF:n.
00:00:39.940 --> 00:00:46.790
Hän on myös löytänyt ja raportoinut
vastuullisesti haavoittuvaisuuksia.
00:00:46.790 --> 00:00:52.280
Ja erityisesti toivon teidän Nintendo-
intoilijoiden katsovan seuraavan videon,
00:00:52.280 --> 00:00:56.270
joka on todella uskomaton ja jota
tulette rakastamaan. Kiitos paljon.
00:00:56.305 --> 00:01:00.825
näyttää Nintendo-pelikasettia
00:01:00.825 --> 00:01:06.065
laittaa sen sisään konsoliin
00:01:09.532 --> 00:01:10.532
Nintendo päästää ääniä
00:01:10.532 --> 00:01:14.850
Thomas: Voi himpskatti.
ottaa pelikasetin
00:01:14.850 --> 00:01:19.980
puhaltaa siihen
laittaa sisään uudelleen
00:01:22.146 --> 00:01:23.446
Nintendo päästää ääniä
00:01:26.243 --> 00:01:29.423
musiikki soi
00:02:52.810 --> 00:02:56.099
Thomas Roth: Voi, mikä matka.
Tervetuloa esitykseeeni
00:02:56.099 --> 00:03:00.810
"Uuden Nintendo Game & Watch Super
Mario Brothersin hakkerointi". Nimeni
00:03:00.810 --> 00:03:05.290
on Thomas Roth. Olen tietoturvatutkija
ja -kouluttaja Saksasta. Löydät minut
00:03:05.290 --> 00:03:10.719
Twitteristä nimellä @ghidraninja ja
YouTubesta nimellä stacksmashing.
00:03:10.719 --> 00:03:16.439
Tämä vuosi on suosikkiputkimiehemme,
Super Marion, 35-vuotisjuhlavuosi.
00:03:16.439 --> 00:03:20.699
Juhlan kunniaksi Nintendo julkaisi uuden
pelikonsolin, Nintendo Game & Watch Super
00:03:20.699 --> 00:03:26.669
Mario Brothersin. Konsoli on höyhenen-
kevyt ja näyttää kivalta. Ja siinä on
00:03:26.669 --> 00:03:31.859
valmiiksi asennettuna kolme peliä ja myös
tämä animoitu kello. Kolme peliä ovat
00:03:31.859 --> 00:03:36.920
Super Mario Brothers (alkuperäinen NES-
peli), Super Mario Brothers 2 The Lost
00:03:36.920 --> 00:03:44.830
Levels, ja myös uudelleensovitus
vanhasta Game & Watch -pelistä, Ballista.
00:03:44.830 --> 00:03:49.939
Tiedätkin varmasti ettei tämä ole
Nintendon ensimmäinen retrokonsoli.
00:03:49.939 --> 00:03:57.400
Vuonna 2016 he julkaisivat NES Classicin
ja vuonna 2017 SNES Classicin. Nyt nuo
00:03:57.400 --> 00:04:01.729
laitteet ovat todella suosittuja
harrastelijakehittäjien keskuudessa,
00:04:01.729 --> 00:04:05.779
koska niihin on todella helppo lisätä
ROM:eja. Niiden laiteohjelmistoja on
00:04:05.779 --> 00:04:10.540
helppo muokata jne. Voit vain pistää
piuhat kiinni koneeseesi, asentaa
00:04:10.540 --> 00:04:14.959
yksinkertaisen ohjelmiston ja tehdä
mitä haluat sillä. Syy on se, että ne
00:04:14.959 --> 00:04:21.140
ne ajavat Linuxia ja niissä on
melkoisen tehokas ARM-prosessori.
00:04:21.140 --> 00:04:27.360
Niillä on kiva puuhastella.
Ja kun Nintendo julkaisi tämän
00:04:27.360 --> 00:04:31.650
uuden konsolin, monet ihmiset
toivoivat siitä mobiilia
00:04:31.650 --> 00:04:38.810
laitetta harrastelijaohjelmoijille.
Jos tekisimme nyt Venn-kaavion
00:04:38.810 --> 00:04:43.099
minun suurimmista kiinnostuksistani,
siinä olisi takaisinmallinnus, laite-
00:04:43.099 --> 00:04:48.539
hakkerointi ja retrokoneilu. Tämä
uusi Game & Watch olisi näitä kaikkia.
00:04:48.539 --> 00:04:52.920
Kun se julkistettiin 3. syyskuuta,
tiesin, että minun oli pakko saada
00:04:52.920 --> 00:04:58.930
sellainen. Ja tietäen miten hankala NES-
ja SNES-retrokonsoleita oli aluksi ostaa,
00:04:58.930 --> 00:05:03.389
ennakkotilasin sen 4-5 eri
sivustolta. Pari niistä peruttiin.
00:05:03.389 --> 00:05:09.470
Mutta olin melko innoissani, koska minulla
oli kolme ennakkotilausta, joiden piti
00:05:09.470 --> 00:05:15.380
lähteä 13. marraskuuta.
Ja minä niin odotin sitä.
00:05:15.380 --> 00:05:19.909
Söin aamiaista 12. marraskuuta kun
ovikello soi ja DHL:n kuriiri
00:05:19.909 --> 00:05:25.730
toimitti minulle uuden Game & Watchin
päivää ennen virallista julkaisua.
00:05:25.730 --> 00:05:30.300
Siinä vaiheessa laitteesta ei ollut
mitään teknistä tietoa saatavilla.
NOTE Paragraph
00:05:30.300 --> 00:05:35.449
Ei kerrassaan mitään. Jos etsit "Game &
Watch" Twitteristä, et löytänyt muuta
00:05:35.449 --> 00:05:40.680
kuin julkaisun tai ehkä kuvan, jonka
joku toinen ennakkotilaaja oli ottanut.
00:05:40.680 --> 00:05:44.900
Ei ollut mitään purkamisesta, ei kuvia
sisuskaluista. Ja mikä tärkeintä,
00:05:44.900 --> 00:05:50.319
kukaan ei ollut vielä murtanut sitä.
Ja tämä antoi minulle, laitehakkerille,
00:05:50.319 --> 00:05:55.669
ainutlaatuisen tilaisuuden olla ehkäpä
ensimmäinen joka murtaa uuden konsolin.
00:05:55.669 --> 00:06:00.199
Ja minä kirjaimellisesti jätin
kaiken muun kesken ja aloin tutkimaan
00:06:00.199 --> 00:06:05.949
laitetta. Nyt minun täytyy sanoa,
että normaalisti pysyn kaukana
00:06:05.949 --> 00:06:11.460
uusien konsolien murtamisesta. Pääasiassa
piratismin takia. En halua olla tekemässä
00:06:11.460 --> 00:06:18.930
siitä mahdollista. En halua olla
osallinen. Enkä halua rakentaa
00:06:18.930 --> 00:06:23.930
työkaluja, joilla toiset piratisoivat.
Mutta koska tähän laitteeseen ei voinut
00:06:23.930 --> 00:06:28.900
ostaa pelejä ja kaikki
siinä olevat pelit olivat
00:06:28.900 --> 00:06:33.840
julkaistu jo yli 30 vuotta sitten, en
ollut huolissani piratismista eikä
00:06:33.840 --> 00:06:39.449
minulla ollut ongelmaa jakaa kaikkea
tutkimusteni tietoa eikä myöskään
00:06:39.449 --> 00:06:44.490
niitä ongelmia, joiden avulla
pystyimme muokkaamaan laitetta.
00:06:44.490 --> 00:06:49.389
Tässä esityksessä kerron teille
miten me mursimme laitteen
00:06:49.389 --> 00:06:54.931
ja miten sinä voit tehdä sen kotona
suhteellisen halvoilla laitteilla.
00:06:54.931 --> 00:07:03.040
Toivottavasti nautit siitä. Katsotaan
alkuun sitä laitetta. Laite on
00:07:03.040 --> 00:07:08.469
höyhenenkevyt ja kotelo on mukavan
kokoinen. Joten se todella... Se todella
00:07:08.469 --> 00:07:14.889
istuu hyvin käteeni. Siinä on 320 x 240
pikselin LCD-näyttö, ristiohjain, A- ja
00:07:14.889 --> 00:07:19.529
B-napit ja lisäksi vielä kolme nappia,
joilla vaihdetaan pelimoodien välillä.
00:07:19.529 --> 00:07:23.940
Oikealla sivulla on virtanäppäin
ja USB-C -portti. Mutta ennen kuin
00:07:23.940 --> 00:07:28.640
innostut USB-portista, voin
kertoa, että valitettavasti
00:07:28.640 --> 00:07:33.030
Nintendo on päättänyt olla
kytkemättä USB-portin datalinjoja.
00:07:33.030 --> 00:07:38.550
Joten sitä voi käyttää vain
lataamiseen. Ja koska on kyse
00:07:38.550 --> 00:07:43.979
Nintendosta, he käyttävät omia
Tri-Point -ruuvejaan. Avataksesi
00:07:43.979 --> 00:07:48.730
laitteen, tarvitset meisseliin tuon
erikoiskärjen. Onneksi tuo löytyy
00:07:48.730 --> 00:07:54.120
nykyisin useimmista seteistä. Mutta se
on silti ikävää kun tilaat laitteen ja
00:07:54.120 --> 00:07:59.639
sitten et voikaan avata sitä työkalun
puuttuessa. Kun olet avannut laitteen,
00:07:59.639 --> 00:08:03.779
huomaat ensimmäisenä varmastikin
akun. Ja jos olet koskaan avannut
00:08:03.779 --> 00:08:07.599
Nintendo Switchin peliohjaimen,
saatat tunnistaa akun, koska se
00:08:07.599 --> 00:08:12.729
on täsmälleen sama kuin peliohjaimessa.
Tämä on siistiä, koska jos joskus,
00:08:12.729 --> 00:08:16.529
sanotaan kahden-kolmen vuoden
päästä Game & Watchin akku kuolee,
00:08:16.529 --> 00:08:20.650
voit korvata sen peliohjaimen
akulla, joita voit ostaa
00:08:20.650 --> 00:08:26.520
halvalla melkein mistä vain. Akun
vieressä, oikealla puolella, on
00:08:26.520 --> 00:08:32.349
pieni kaiutin, joka ei ole kovinkaan
hyvä. Ja sen alla on pääpiirilevy
00:08:32.349 --> 00:08:37.510
prosessorilla, kaikilla muisteilla
ja niin edelleen. Katsotaanpa niitä.
00:08:37.510 --> 00:08:44.779
Laitteen pääprosessori on STM32H7B0.
Tämä on Cortex M7 STMicroelectronicsilta,
00:08:44.779 --> 00:08:53.201
1.3 megatavulla keskusmuistia ja 128 kilo-
tavulla flash-muistia. Se toimii 280 MHz:n
00:08:53.201 --> 00:08:59.460
kellotaajuudella ja on aika tehokas mikro-
kontrolleri, mutta se häviää prosessori-
00:08:59.460 --> 00:09:03.860
tehossa NES- ja SNES-retrokonsoleille.
Tämä prosessori on todellakin vain mikro-
00:09:03.860 --> 00:09:09.260
kontrolleri, eikä se voi ajaa Linuxia tai
erityisen monimutkaisia ohjelmistoja.
00:09:09.260 --> 00:09:14.170
Koodia kirjoitetaan suoraan raudan
päälle. Laitteessa on raudalle koodattu
00:09:14.170 --> 00:09:20.580
laiteohjelmisto. Siitä oikealle
näette 1 megatavun SPI flash -muistin.
00:09:20.580 --> 00:09:26.180
Yhteensä tässä laitteessa on
n. 1,1 megatavua tallennustilaa.
00:09:26.180 --> 00:09:31.279
Useimmissa - tai oikeastaan kaikissa -
mikrokontrollereissa on debuggausportti.
00:09:31.279 --> 00:09:36.370
Jos katsot piirilevyä, voit nähdä
viisi liitintä, jotka eivät ole käytössä.
00:09:36.370 --> 00:09:40.980
Ja pari niistä käyttämättömistä
liittimistä on sijoitettu lähelle
00:09:40.980 --> 00:09:47.510
prosessoria. Se on todennäköistä, että
siinä on debuggausportti. Ja onneksi
00:09:47.510 --> 00:09:54.449
STM32:n tuotetietolomake on julkisesti
saatavilla. Ja voimme tarkistaa kytkennät
00:09:54.449 --> 00:09:59.050
ja tarkistaa yleismittarilla
onko nämä pinnit todellakin
00:09:59.050 --> 00:10:04.500
debuggausliittymä. Ja niinhän se oli.
Sitten löysimme SWD-debuggausliittymän,
00:10:04.500 --> 00:10:11.630
kuten myös VCC:n ja maan näistä
pinneistä. Tämä tarkoitti, että
00:10:11.630 --> 00:10:16.779
voimme käyttää debuggeria. Pystyimme
kytkeytymään laitteeseen esimerkiksi
00:10:16.779 --> 00:10:21.980
J-Linkillä tai ST-Linkillä. Ja koska
nämä liitännät ovat hyvin esillä,
00:10:21.980 --> 00:10:25.870
sinun ei tarvitse edes juottaa. Voit
vain liittää pari testipinniä ja
00:10:25.870 --> 00:10:32.600
kytkeä ne debuggeriisi. Seuraava
ongelma on, että useimmissa laitteissa
00:10:32.600 --> 00:10:36.900
debuggausliittymä lukitaan valmistus-
prosessin aikana. Tämä tehdään, jotta
00:10:36.900 --> 00:10:42.550
ihmiset kuten me emme voisi tehdä
laitteella mitä haluamme ja estääkseen
00:10:42.550 --> 00:10:47.450
meitä näkemästä laiteohjelmistoa,
ehkä uudelleenohjelmoimasta sitä jne.
00:10:47.450 --> 00:10:52.190
Joten minä olin utelias näkemään jos
voisin ottaa yhteyttä debuggausporttiin.
00:10:52.190 --> 00:10:56.090
Kun käynnistin J-Linkin ja yritin
ottaa yhteyttä, voimme nähdä sen
00:10:56.090 --> 00:11:01.230
onnistuvan. Mutta kun tutkit asiaa
tarkemmin, huomaat viestin jonka
00:11:01.230 --> 00:11:09.269
mukaan laite aktiivisesti lukusuojattu.
Tämä siksi, että STM32-sirussa on
00:11:09.269 --> 00:11:15.650
ominaisuus nimeltään RDP-suojaustaso,
readout protection level. Tämä on
00:11:15.650 --> 00:11:20.300
periaatteessa tietoturva-asetus
debuggausliittymälle ja siinä on kolme
00:11:20.300 --> 00:11:26.769
tasoa. Taso 0 tarkoittaa, että suojaus on
pois päältä. Tasolla 1 flash-muisti on
00:11:26.769 --> 00:11:31.839
suojattu ja me emme pysty
kopioimaan sen sisältöä. Kuitenkin,
00:11:31.839 --> 00:11:36.939
me voimme kopioida keskusmuistin sisällön
ja myös ajaa koodia keskusmuistissa. Ja
00:11:36.939 --> 00:11:42.240
sitten on myös taso 2, joka estää
kaikki debuggaustoiminnallisuudet.
00:11:42.240 --> 00:11:46.630
Vaikka siru olisi tasolla 2,
meidän ei pidä antaa periksi.
00:11:46.630 --> 00:11:51.589
Esimerkiksi esityksessämme "wallet.fail"
parin vuoden takaa, näytimme miten
00:11:51.589 --> 00:11:56.000
generoimalla virheitä ohitimme tason 2
suojauksen ja tiputimme sirun tasolle 1.
00:11:56.000 --> 00:12:00.820
Kuitenkin, Game & Watchin tapauksessa,
olimme onnekkaita ja liittymää ei oltu
00:12:00.820 --> 00:12:07.139
täysin estetty. Se oli tasolla 1 eli me
pystyimme kopioimaan keskusmuistin, mikä
00:12:07.139 --> 00:12:11.300
on hyvä aloituspiste, vaikka emme vielä
pystykään kopiomaan laiteohjelmistoa.
00:12:11.300 --> 00:12:17.010
Nyt kun saimme keskusmuistin laitteelta,
olin kiinnostunut sen sisällöstä.
00:12:17.010 --> 00:12:21.660
Yksi epäilyistäni oli, että se oli ehkä
emulaattori, joka toimii laitteella,
00:12:21.660 --> 00:12:29.000
lataa alkuperäisen Super Mario
Brothersin ROM:in keskusmuistiin.
00:12:29.000 --> 00:12:34.830
Ja minä ihmettelin jos voisin löytää
ROM:in keskusmuistin kopiosta.
00:12:34.830 --> 00:12:39.750
Ja minä avasin heksaeditoriin sen
keskusmuistin kopion ja alkuperäisen
00:12:39.750 --> 00:12:44.450
Super Mario Brothersin ROMin.
Yritin etsiä sen ROM:in osia
00:12:44.450 --> 00:12:49.411
keskusmuistin kopiosta. Ja kävi
ilmi, että kyllä, se NES-ROM
00:12:49.411 --> 00:12:55.380
ladataan keskusmuistiin ja aina
samaan osoitteeseen. Luultavasti
00:12:55.380 --> 00:13:00.289
se kopioidaan keskusmuistiin
käynnistyksen yhteydessä tai jotain.
00:13:00.289 --> 00:13:05.420
Ja tämä on kiva tietää, koska se kertoo
meille parikin asiaa. Ensiksikin
00:13:05.420 --> 00:13:09.790
tiedämme nyt, että debuggausportti
on toiminnassa, mutta valitettavasti
00:13:09.790 --> 00:13:16.319
vain RDP-tasolla 1 ja voimme kopioida vain
keskusmuistin. Ja me tiedämme myös, että
00:13:16.319 --> 00:13:21.259
NES:in ROM ladataan keskusmuistiin.
Siellä täytyy olla oikea NES-emulaattori.
00:13:21.259 --> 00:13:25.680
Ja jos me olemme onnekkaita, voimme
esimerkiksi korvata ROM:in laitteella
00:13:25.680 --> 00:13:29.840
toisella ROM:illa ja pelata siten
vaikka omaa NES-peliämme.
00:13:30.600 --> 00:13:33.460
pieni tauko
00:13:33.930 --> 00:13:37.010
Seuraavaksi oli aika
kopioida laitteen
00:13:37.010 --> 00:13:41.160
flash-muistisiru. Käytän tähän
laitetta nimeltä Mini Pro ja yhtä
00:13:41.160 --> 00:13:46.959
näistä hyödyllisistä SOIC-8 -siruista.
Voit kiinnittää nämä flash-muistisiruun
00:13:46.959 --> 00:13:52.240
ja kopioida sen sisällön. Varoitus:
laitteen flash-muistisiru toimii
00:13:52.240 --> 00:13:56.220
1,8 voltin jännitteellä. Haluat varmasti
varmistaa, että ohjelmointilaitteesi
00:13:56.220 --> 00:14:01.839
tukee 1,8 V:n jännitettä. Jos vahingossa
yrität lukea muistia 3,3 V:n jännitteellä,
00:14:01.839 --> 00:14:06.770
hajotat sen muistin. Usko pois -
se tapahtui yhdelle minun
00:14:06.770 --> 00:14:12.940
laitteistani. Nyt kun meillä on tämä
kopio flash-muistista, voimme analysoida
00:14:12.940 --> 00:14:17.319
sitä. Ensimmäiseksi tykkään katsoa
kopion entropiaa tai satunnaisuutta.
00:14:17.319 --> 00:14:23.350
Käyttämällä binwalkia optiolla
"-E", saamme hienon entropiakuvaajan.
00:14:23.350 --> 00:14:27.410
Tässä tapauksessa voitte nähdä, että
entropia on hyvin korkealla melkein koko
00:14:27.410 --> 00:14:32.899
sisällön osalta. Yleensä tämä
indikoi sitä, että muistin sisältö on
00:14:32.899 --> 00:14:37.240
kryptattu. Se voisi myös tarkoittaa
pakkausta, mutta jos se olisi pakattu,
00:14:37.240 --> 00:14:43.529
näkisimme siinä enemmän tiputuksia.
Tässä tapauksessa se on yhtä korkean
00:14:43.529 --> 00:14:48.830
entropian virtaa. Huomasimme myös, että
siinä ei ole minkäänlaisia toistoja, mikä
00:14:48.830 --> 00:14:53.350
kertoo meille, että todennäköisesti
kyseessä ei ole yksinkertainen XOR-salaus
00:14:53.350 --> 00:14:58.340
vaan pikemminkin AES tai vastaava.
Se, että flash-muisti on salakirjoitettu
00:14:58.340 --> 00:15:02.199
ei tarkoita, että meidän pitäisi antaa
periksi. Päinvastoin. Nyt tästä vasta
00:15:02.199 --> 00:15:06.829
tuleekin mielenkiintoista, koska tässä on
haaste joka ei ole ihan itsestään selvä.
00:15:06.829 --> 00:15:13.020
Yksi suurimmista kysymyksistäni oli:
onko flash-muistin sisältö varmistettu?
00:15:13.020 --> 00:15:18.160
Eli käynnistyykö tämä laite jos flash-
muistin sisältöä on muutettu? Jos se
00:15:18.160 --> 00:15:24.789
käynnistyisi, se avaisi useita
hyökkäysvektoreita, kuten pian näette.
00:15:24.789 --> 00:15:30.720
Varmistaakseni asian, kirjoitan
nollia satunnaisiin paikkoin muistissa.
00:15:30.720 --> 00:15:35.760
Niinpä laitoin niitä osoitteeseen 0,
vähän osoitteeseen 0x2000 jne.
00:15:35.760 --> 00:15:39.910
Ja sitten kokeilin käynnistyykö
laite vielä. Useimmilla flash-muistin
00:15:39.910 --> 00:15:44.370
muutoksilla se käynnistyi ihan OK.
Tämä kertoo meille, että vaikka
00:15:44.370 --> 00:15:48.599
flash-muistin sisältö on salattu, sitä ei
ole varmistettu, ei tarkistussummilla
00:15:48.599 --> 00:15:54.610
eikä muutenkaan. Joten me voimme ehkä
huijata laitteen hyväksymään muunnellun
00:15:54.610 --> 00:15:58.529
kopion flash-muistista. Tämä on tosi
tärkeä tieto, kuten pian huomaat.
00:15:58.529 --> 00:16:05.310
Seuraava epäilykseni oli, että ehkä
se NES-ROM, jonka näimme keskusmuistissa
00:16:05.310 --> 00:16:12.839
oli ladattu ulkoiselta flash-muistilta.
Ja selvitääkseni tämän, otin sen
00:16:12.839 --> 00:16:18.939
flash-muistin kopion ja lisäsin
siihen nollia eri kohtiin.
00:16:18.939 --> 00:16:24.550
Kirjoitin sen laitteelle, käynnistin sen,
kopioin keskusmuistin ja vertasin sitä
00:16:24.550 --> 00:16:29.620
NES-ROM:iin, jonka löysin keskus-
muistin kopiosta. Vertasin, ovatko
00:16:29.620 --> 00:16:35.399
ne identtisiä. Koska epäilykseni oli,
että voisin ehkä ylikirjoittaa
00:16:35.399 --> 00:16:41.519
muutaman tavun salatussa flash-muistissa
ja sitten muokata NES-ROM:ia. Sen jälkeen
00:16:41.519 --> 00:16:46.760
kun olin tehnyt sen, ehkä puoli tuntia
myöhemmin, minua onnisti ja sain
00:16:46.760 --> 00:16:51.399
muutettua neljä tavua flash-nuistissa ja
keskusmuistissa... Sori... ROM:issa,
00:16:51.399 --> 00:16:56.790
jonka latasin keskusmuistiin. Ja tämä
kertoo meille melkoisesti. Se tarkoittaa,
00:16:56.790 --> 00:17:04.450
että ROM ladataan keskusmuistiin flash-
muistilta, eikä sen sisältöä validoida.
00:17:04.450 --> 00:17:10.280
Ja mikä on myös tärkeää on se, että
muutimme neljä tavua flash-muistissa
00:17:10.280 --> 00:17:15.510
ja neljä tavua muuttui puretussa ROM:issa.
Tämä on tärkeää tietää, koska jos me
00:17:15.510 --> 00:17:19.740
katsomme mitä odotimme tapahtuvan flash-
muistin sisältöä muutettaessa, se olisi
00:17:19.740 --> 00:17:23.880
voinut päättyä eri lopputuloksiin. Ja
tässä meillä on SPI flash -muistin
00:17:23.880 --> 00:17:29.310
sisäsltö vasemmalla ja keskusmuistin
sisältö oikealla. Ja keskusmuistin
00:17:29.310 --> 00:17:35.410
on purettu versio SPI flash -muistin
sisällöstä. Sanotaan, että muutamme
00:17:35.410 --> 00:17:41.750
neljä tavua salatusta flash-kopiosta
nolliksi. Kuinka odottaisimme keskus-
00:17:41.750 --> 00:17:47.580
muistin sisällön muuttuvan jos,
esimerkiksi, 16 tavua keskusmuistista
00:17:47.580 --> 00:17:52.960
muuttuisi. Tämä tarkoittaisi, että
käytössä on ehkä salausalgoritmi
00:17:52.960 --> 00:17:57.650
kuten AES ECB-moodissa (Electronic
Codebook). Koska jos se on lohko-
00:17:57.650 --> 00:18:03.180
pohjainen salaus ja me muutamme
4 salattua tavua, koko puretun lohkon
00:18:03.180 --> 00:18:09.730
eli 16 tavun pitäisi muuttua. Toinen
mahdollisuus on, että muutamme 4
00:18:09.730 --> 00:18:16.160
tavua flash-muistissa ja kaikki niitä
seuraava data muuttuisi. Tässä
00:18:16.160 --> 00:18:21.830
tapauksessa käytössä olisi ehkä AES
CBC-moodissa (Chaining Cipher).
00:18:21.830 --> 00:18:27.600
Kuitenkin jos muutamme 4 tavua flash-
muistissa ja vain 4 tavua muuttuu
00:18:27.600 --> 00:18:33.510
keskusmuistissa, käytössä on ehkä
AES CTR-moodissa (Counter). Ja
00:18:33.510 --> 00:18:40.270
ymmärtääksesi tämän, otetaan parempi
näkymä siihen miten AES toimii
00:18:40.270 --> 00:18:45.930
CTR-moodissa. Se ottaa salaamattoman
tiedon ja XOR:aa sen AES-salausvirran
00:18:45.930 --> 00:18:53.211
kanssa, joka on generoitu avaimella,
noncella ja Counter-algoritmilla.
00:18:53.211 --> 00:18:57.370
Se AES-virta, jolla tietosi
XOR:ataan, on aina sama jos avain
00:18:57.370 --> 00:19:02.840
ja nonce ovat samat. Tämän takia on
huipputärkeää, että käyttäessäsi
00:19:02.840 --> 00:19:08.780
AES-CTR:ää, valitset aina uniikin noncen
jokaiseen salaukseen. Jos käytät samaa
00:19:08.780 --> 00:19:15.060
noncea kahdesti samankaltaisen datan
salaamiseen, lopputulos näyttää samalta.
00:19:15.060 --> 00:19:19.960
Salaamaton data XOR:ataan
AES-CTR -virralla ja niin saamme
00:19:19.960 --> 00:19:26.570
salatun datan. Jos tiedämme mitä
salaamaton data oli, eli keskusmuistiin
00:19:26.570 --> 00:19:32.270
ladattu ROM-tiedosto, ja meillä
on se salattu koodi, eli flash-muistin
00:19:32.270 --> 00:19:38.010
kopio, voimme suorittaa käänteisen
00:19:38.010 --> 00:19:44.580
operaation. Lopputuloksena meillä
on AES-CTR -virta, jolla flash-muisti
00:19:44.580 --> 00:19:52.050
salakirjoitettiin. Ja tämä tarkoittaa,
että voimme ottaa ROM-tiedoston, XOR:ata
00:19:52.050 --> 00:19:57.830
sen juuri selvittämällämme
AES-CTR -virralla ja generoida oman
00:19:57.830 --> 00:20:02.010
salatun flash-kopiomme, esimerkiksi
muunnellun ROM:in. Joten kirjoitin
00:20:02.010 --> 00:20:08.340
muutamia Python-skriptejä kokeillakseni
tätä. Ja jonkun ajan kuluttua minulla
00:20:08.340 --> 00:20:14.290
oli hakkeroitu Super Mario Brothers
alkuperäisen sijasta. Jeejee, hakkeroimme
00:20:14.290 --> 00:20:18.870
Nintendo Game & Watchin päivää ennen
virallista julkistusta. Ja voimme asentaa
00:20:18.870 --> 00:20:23.990
muokattuja Super Mario Brothers ROM:eja.
Löydät käyttämäni skriptit GitHubistani.
00:20:23.990 --> 00:20:28.260
Ne ovat tallennustilassa nimeltään
"Game & Watch Hacking". Olin todella
00:20:28.260 --> 00:20:33.570
innoissani, koska olin onnistunut ja olin
murtanut Nintendon konsolin päivää ennen
00:20:33.570 --> 00:20:37.961
virallista julkistusta.
Valitettavasti läpäistyäni kentän,
00:20:37.961 --> 00:20:43.350
Toad ei ollut yhtä innostunut. Hän kertoi
minulle, että valitettavasti laiteohjelmisto
00:20:43.350 --> 00:20:50.050
oli yhä toisessa linnassa. Niinpä heti
maanantaina yhdistin voimani
00:20:50.050 --> 00:20:54.790
Konrad Beckmannin kanssa. Hän on hakkeri
Ruotsista. Tutustuimme tapahtumassa.
00:20:54.790 --> 00:20:59.850
Me aloimme keskustelemaan ja heittelemään
ideoita puolin ja toisin. Lopulta
00:20:59.850 --> 00:21:05.620
me huomasimme, että keskusmuistissa on
erikoisalue nimeltään ITCM-RAM. Se on
00:21:05.620 --> 00:21:10.570
kiinteässä yhteydessä keskusmuistiin, jota
käytetään normaalisti korkean suoritus-
00:21:10.570 --> 00:21:15.121
kyvyn rutiineihin, kuten keskeytysten
käsittelijöihin. Se on hyvin nopea alue.
00:21:15.121 --> 00:21:22.160
Me käsitimme ettemme ole koskaan
tarkastelleet ITCM-muistialueen sisältöä.
00:21:22.160 --> 00:21:26.540
Joten me otimme siitä kopion käyttäen
debuggausporttia. Ja kävi ilmi, että
00:21:26.540 --> 00:21:33.020
tämä ITCM-muistialue pitää sisällään
ARM-koodia. Joten edelleen kysymys on:
00:21:33.020 --> 00:21:37.570
mistä tämä ARM-koodi tulee? Tuleeko se
ulkoisesta flash-muistista, kuten NES-ROM?
00:21:37.570 --> 00:21:45.741
Minä toistin toimenpiteen,
jonka teimme NES-ROM:ille.
00:21:45.741 --> 00:21:52.260
Laitoin nollia salatun flash-muistin
alkuun, käynnistin laitteen ja
00:21:52.260 --> 00:21:57.720
otin kopion ITCM-muistialueesta. Olin
onnekas heti ensimmäisellä yrittämällä,
00:21:57.720 --> 00:22:03.990
koska ITCM:n sisältö muuttui. Koska
ITCM:ssä on koodia, ei dataa.
00:22:03.990 --> 00:22:09.300
Aiemmin meillä oli ollut vain NES ROM,
joka oli vain dataa, mutta nyt meillä
00:22:09.300 --> 00:22:14.850
koodia. Se tarkoitti, että samalla XOR-
kikalla, jota käytimme aiemmin, voisimme
00:22:14.850 --> 00:22:21.530
laittaa ulkoiseen flash-muistiin koodia,
joka sitten ladattaisiin keskusmuistiin
00:22:21.530 --> 00:22:27.620
laitteen käynnistyessä. Ja koska se on
pysyvä menetelmä, voimme buutata
00:22:27.620 --> 00:22:32.520
laitteen ja ajaa sitä ilman debuggeria.
Mikä tahansa koodi, jonka me latasimme
00:22:32.520 --> 00:22:38.490
tälle ITCM-alueelle pystyi lukemaan
flash-muistia. Ja me ehkä voisimme
00:22:38.490 --> 00:22:43.280
kirjoittaa koodia jota laite-
ohjelmisto jotenkin kutsuisi ja
00:22:43.280 --> 00:22:49.540
kopioisi sen keskusmuistiin, josta
me voisimme hakea sen debuggerilla.
00:22:49.540 --> 00:22:57.560
Ongelma vain oli, että jos meillä
on oma pätkä koodia tällä
00:22:57.560 --> 00:23:04.750
ITCM-alueella, me emme tiedä mistä
osoiteesta ITCM:ssä ajetaan koodia.
00:23:04.750 --> 00:23:09.410
Emme tiedä hyppääkö laiteohjelmisto
muistipaikkaan 0 vai 200 vai mihin.
00:23:09.410 --> 00:23:14.270
Mutta on olemassa yksinkertainen kikka
oman koodinpätkän rakentamiseen, Se on
00:23:14.270 --> 00:23:19.230
nimeltään NOP-liuku. NOP, eli No OPeration,
on prosssorille annettava käsky joka ei
00:23:19.230 --> 00:23:25.100
tee mitään. Ja jos me täytämme suurimman
osan ITCM-muistista NOP-käskyillä ja
00:23:25.100 --> 00:23:31.700
sijoitamme oman koodimme niiden perään,
me saamme aikaan NOP-liu'un. Ja
00:23:31.700 --> 00:23:37.260
kun prosessori, jota kuvaa Mario, hyppää
satunnaiseen osoitteeseen tuossa liu'ussa,
00:23:37.260 --> 00:23:43.500
se ryhtyy suorittamaan NOP-käskyjä kunnes
kohtaa koodimme ja suorittaa sen.
00:23:43.500 --> 00:23:49.100
Näin vaikka Mario hyppää keskelle
NOP-liukua, hän päätyy aina
00:23:49.100 --> 00:23:54.920
meidän koodiimme. Konrad kirjoitti
tämän todella yksinkertaisen
00:23:54.920 --> 00:23:58.330
koodin, jossa on ainoastaan noin 10
käskyä, jotka ainoastaan kopioivat
00:23:58.330 --> 00:24:03.980
sisäisen flash-muistin keskusmuistiin,
josta me voimme hakea sen debuggerilla.
00:24:03.980 --> 00:24:08.280
Jeejee, todella yksinkertainen häkkäys.
Nyt meillä on kopio laiteohjelmistosta ja
00:24:08.280 --> 00:24:13.590
koko flash-muistista. Nyt
voimmekin ronkkia koko laitetta.
00:24:13.590 --> 00:24:17.700
Olemme julkaisseet työkalut, joilla
sinä voit tehdä saman. Jos haluat
00:24:17.700 --> 00:24:23.161
varmuuskopoida Nintendo Game & Watchin,
voit mennä GitHubiini ja ladata
00:24:23.161 --> 00:24:27.670
"Game & Watch backup" -säilön, jossa
on paljon tietoa varmuuskopion
00:24:27.670 --> 00:24:33.270
tekemisestä. Se tekee tarkistuksen
ja varmistaa tekemättä laitteestasi
00:24:33.270 --> 00:24:38.420
tiiliskiveä, että voit helposti
tehdä varmuuskopion laiteohjelmistosta,
00:24:38.420 --> 00:24:43.610
asentaa harrastelijaohjelmoijien koodia,
ja kuitenkin palauttamaan alkuperäisen.
00:24:43.610 --> 00:24:50.630
Meillä on mahtava tukiyhteisö Discordissa.
Jos ikinä tarvitse apua, luulen että
00:24:50.630 --> 00:24:55.270
sitä löytyy sieltä. Toistaiseksi meillä ei
ole vielä yhtään tiiliskiveksi muuttunutta
00:24:55.270 --> 00:25:02.200
Game & Watchia, joten koodi näyttää vakaalta.
Olin hyvin innoissani, että tämä haaste
00:25:02.200 --> 00:25:11.170
oli nyt ohi. Vai oliko se? Jos joskus
väität netissä murtaneesi onnistuneesti
00:25:11.170 --> 00:25:18.180
sulautetun laitteen, siihen on tasan
yksi vastaus: mutta voiko sillä ajaa
00:25:18.180 --> 00:25:23.610
Doomia? Kirjaimellisesti saamani
Twitter-viestit, YouTube-kommentit, jopa
00:25:23.610 --> 00:25:28.720
ystäväni spämmäsivät minua haasteella
saada Doom toimimaan laitteessa. Mutta
00:25:28.720 --> 00:25:34.390
sitä varten meidän pitäisi selvittää
koko laitteen salat. Meidän pitäisi
00:25:34.390 --> 00:25:40.070
luoda tapa kehittää omia ohjelmistoja
ja ladata niitä laitteeseen. Onneksi
00:25:40.070 --> 00:25:44.880
useimmat komponentit olivat hyvin
dokumentoituja ja siellä ei ollut
00:25:44.880 --> 00:25:50.040
mitään vaitiolovelvollisuuden alaisia
komponentteja. Esimerkiksi prosessorista
00:25:50.040 --> 00:25:56.890
on avoin käsikirja ja kirjasto.
Flash-muistisiru on hyvin tunnettu.
00:25:56.890 --> 00:26:00.440
Ja niin pois päin. Siellä on vain
pari tarkoitukseen suunniteltua
00:26:00.440 --> 00:26:06.280
komponenttia. Esimerkiksi laitteen LCD on
tarkoitukseen suunniteltu ja jouduimme
00:26:06.280 --> 00:26:12.690
tutkimaan SPI-väylässä näytölle menevää
liikennettä saadaksemme selville mm.
00:26:12.690 --> 00:26:19.160
miten näyttö alustetaan. Jonkin
ajan kuluttua meillä oli täysi
00:26:19.160 --> 00:26:24.540
laitteisto käytössä. Oli tuki LCD:lle,
audiolle, unitilalle, napeille ja
00:26:24.540 --> 00:26:29.210
vieläpä työkalut, joilla pystyit SWD-
debuggeria käyttäen kopioimaan ja
00:26:29.210 --> 00:26:33.820
uudelleenkirjoittamaan ulkoisen flash-
muistin. Kaikki löytyy GitHubistamme.
00:26:33.820 --> 00:26:38.520
Jos haluat nyt muokata omaa Game &
Watchiasi, kaikki mitä tarvitset on
00:26:38.520 --> 00:26:46.840
debuggaussovitin, kuten 3 dollaria maksava
ST-link tai J-Link. Tai oikea ST-Link.
00:26:46.840 --> 00:26:51.140
Ja sitten voitkin aloittaa. Olemme
julkaisseet projektipohjan, jolla kuka
00:26:51.140 --> 00:26:54.911
tahansa haluava voi aloittaa kehittämään
omia pelejään Game & Watchille.
00:26:54.911 --> 00:26:58.670
Se on yksinkertaista. On kuvapuskuri,
johon voit kirjoittaa. Kontrollit ovat
00:26:58.670 --> 00:27:04.470
yksinkertaisia jne. Ja kuten sanoin,
meillä on todella avulias yhteisö.
00:27:04.470 --> 00:27:10.000
Nyt kun meillä oli koko laitteisto
hallussa, voin viimein työstää Doomia.
00:27:10.000 --> 00:27:15.420
Aloitin tutkimalla muita Doomin sovituksia
STM32:lle. Ja löysin nimimerkin floppes
00:27:15.420 --> 00:27:22.010
kirjoittaman stm3doomin. Ongelma oli,
että stm32doom on suunniteltu laitteelle,
00:27:22.010 --> 00:27:28.340
jossa on 8 megatavua keskusmuistia ja
Doomin vaatimat tiedostot ulkoisella USB-
00:27:28.340 --> 00:27:37.630
asemalla. Tässä oli vain 1,3 MB keskus-
muistia, 128 kB flash-muistia ja 1 MB
00:27:37.630 --> 00:27:42.600
ulkoista flash-muistia. Meidän pitäisi
mahduttaa siihen kaikki kentät, koodi ja
00:27:42.600 --> 00:27:50.880
niin edelleen. Doomin kenttätieto
on tallennettu nk. WAD-tiedostoihin
00:27:50.880 --> 00:27:57.240
(WAD = Where's All my Data). Näissä
tiedostoissa on spritet, tekstuurit,
00:27:57.240 --> 00:28:03.230
kentät jne. WAD Doom 1:lle on
noin 4 megatavua kooltaan ja
00:28:03.230 --> 00:28:11.440
WAD Doom 2:lle on 40 megatavua kooltaan.
Mutta meillä on vain 1,1 megatavua tilaa.
00:28:11.440 --> 00:28:16.390
Lisäksi meidän on mahdutettava koodikin
sinne. Joten ilmeisesti meidän on löydettävä
00:28:16.390 --> 00:28:22.200
joku tosi pieni Doom-sovitus. Ja kuten
selvisi, on olemassa Mini-WAD. Se on
00:28:22.200 --> 00:28:27.680
minimaalinen Doom, jonka WAD-
tiedostosta on riisuttu kaikki
00:28:27.680 --> 00:28:34.240
hilavitkuttimet ja kaikki on korvattu
yksinkertaisilla ääriviivoilla jne.
00:28:34.240 --> 00:28:38.130
Ja vaikka se ei olekaan nätti, olin
aika varma, että saisin sen toimimaan,
00:28:38.130 --> 00:28:46.320
koska se tarvitsee vain 250 kilotavua
40 megatavun sijasta. Lisäksi aika
00:28:46.320 --> 00:28:51.300
monta asiaa Chocolate Doom -sovituksesta
piti muuttaa. Esimerkiksi minun piti
00:28:51.300 --> 00:28:56.150
poistaa kaikki tiedostoja käsittelevä
koodi ja korvata se omallani.
00:28:56.150 --> 00:29:01.230
Minun piti myös lisätä tuki Game &
Watchin LCD:lle ja napeille. Minun piti
00:29:01.230 --> 00:29:05.350
hankkiutua eroon monesta asiasta
saadakseni sen toimimaan suht' sujuvasti.
00:29:05.350 --> 00:29:10.630
Esimerkiksi pahamainen pyyhkimisefekti
oli pakko tiputtaa, kuten myös äänet.
00:29:10.630 --> 00:29:16.270
Seuraava ongelma oli, että kun sitä
käännettiin, se ei mahtunut keskusmuistiin
00:29:16.270 --> 00:29:22.820
ja kaatuili kaiken aikaa. Laitteella on
noin 1,3 megatavua keskusmuistia eri
00:29:22.820 --> 00:29:27.510
alueilla. Ja esimerkiksi kuvapuskuri,
jota selvästi tarvitsemme, vie siitä
00:29:27.510 --> 00:29:36.350
154 kilotavua. Sitten meillä on 160 kilotavua
alustettua dataa, 320 kilotavua alustamatonta
00:29:36.350 --> 00:29:42.000
dataa ja tonneittain dynaamisia varauksia,
joita Chocolate Doom tekee. Ja nämä
00:29:42.000 --> 00:29:46.610
dynaamiset varaukset olivat iso ongelma,
koska Chocolate Doomin lähdekoodi tekee
00:29:46.610 --> 00:29:52.480
paljon pieniä varauksia, joita käytetään
väliaikaiseen tiedonvarastointiin kunnes
00:29:52.480 --> 00:29:58.600
ne vapautetaan. Dynaaminen
muisti fragmentoituu pahasti
00:29:58.600 --> 00:30:02.710
äkkiä. Lopulta siellä ei ole yhtään
tilaa jäljellä esimerkiksi kentän
00:30:02.710 --> 00:30:09.791
alustamiseen. Ja korjatakseni tämän
otin Chocolate Doomin lähdekoodin
00:30:09.791 --> 00:30:15.110
ja muutin paljon dynaamisia varauksia
staattisiksi varauksiksi, josta
00:30:15.110 --> 00:30:22.030
seurasi se iso etu, että kääntäjän
virheilmoitukset tekivät enemmän järkeä.
00:30:22.030 --> 00:30:27.340
Koska se kertoi sinulle: "hei, tämä ja
tämä data ei mahdu keskusmuistiin".
00:30:27.340 --> 00:30:31.990
Lopulta useiden yritysten ja erehdysten
sekä kopioituani mahdollisimman monta
00:30:31.990 --> 00:30:39.400
alkuperäistä resurssia Mini-WAD:iin,
sain se toimimaan. Minulla oli Doom, joka
00:30:39.400 --> 00:30:45.030
toimi tässä Game & Watch -laitteessa
ja toivottavasti rauhoitti Internetin jumalat,
00:30:45.030 --> 00:30:49.750
jotka pakottivat minut tekemään sen.
Valitettavasti USB-portti ei ole fyysisesti
00:30:49.750 --> 00:30:55.690
kytketty prosessoriin ja siten ei ole
mahdollista hakkeroida laitetta
00:30:55.690 --> 00:31:00.390
liittämällä se tietokoneeseen.
Kuitenkin on aika helppo tehdä tämä
00:31:00.390 --> 00:31:06.790
käyttäen jotain näistä USB-debuggereista.
Eniten toivottu ohjelmistotyyppi
00:31:06.790 --> 00:31:12.870
oli selkeästi emulaattorit. Ja olen ylpeä
sanoessani, että tällä hetkellä meillä
00:31:12.870 --> 00:31:19.210
on suurehko kokoelma emulaattoreita, jotka
toimivat Nintendo Game & Watchilla. Ja se
00:31:19.210 --> 00:31:23.370
alkoi Konrad Beckmannin aloittamasta
Retro Go -projektista, joka on
00:31:23.370 --> 00:31:29.970
kokoelma emulaattoreita laitteelle nimeltä
Odroid Go. Odroid Go on pieni kannettava
00:31:29.970 --> 00:31:35.880
laite, jossa on samanlaiset kontrollit ja
kokorajoitukset kuin Game & Watchissa.
00:31:35.880 --> 00:31:40.630
Se oli aika siistiä sovittaa tätä koodia,
koska se raskas työ oli jo tehty.
00:31:40.630 --> 00:31:47.670
Retro Go sisältää emulaattorit
NES:ille, Gameboylle, Gameboy Colorille,
00:31:47.670 --> 00:31:52.770
jopa Sega Master Systemille
ja Sega Game Gearille.
00:31:52.770 --> 00:31:58.290
Pari päivää myöhemmin Konrad pystyi
esittelemään NES-emulaattoriaan
00:31:58.290 --> 00:32:02.960
ajamassa Zeldaa ja muita pelejä, kuten
Contraa, Nintendo Game & Watchilla.
00:32:02.960 --> 00:32:09.230
Tämä on superhauskaa. Aluksi meillä
oli vain perusemulaattori, jolla
00:32:09.230 --> 00:32:13.170
pystyi hädintuskin pelaamaan ja se
tiputti frameja. Meillä ei ollut
00:32:13.170 --> 00:32:18.290
nättiä skaalausta, VSynciä jne. Mutta
nyt useamman viikon jälkeen se on
00:32:18.290 --> 00:32:24.090
aika kiva laite käyttää ja pelata. Meillä
on myös Gameboy-emulaattori, jolla voit
00:32:24.090 --> 00:32:29.440
pelata Gameboy-suosikkejasi, kuten
Pokémonia, Super Mario Landia jne.
00:32:29.440 --> 00:32:35.160
Nintendo Game & Watchilla jos sinulla
vain sattui ROM:ien varmuuskopiot.
00:32:35.160 --> 00:32:38.650
Me kokeilimme erilaisia skaalaus-
algoritmeja hyödyntääkseemme näyttöä.
00:32:38.650 --> 00:32:43.310
Sinä voit vaihtaa
käytettyä skaalausalgoritmia
00:32:43.310 --> 00:32:48.160
omien mieltymystesi mukaan.
Voit vaihtaa jopa väripalettia
00:32:48.160 --> 00:32:54.450
peleille. Meillä on kiva peli-
valikko, joka antaa sinun
00:32:54.450 --> 00:32:59.240
pitää laitteella useampia ROM:eja
ja vaihtaa niiden välillä. Meillä on
00:32:59.240 --> 00:33:04.210
tuki tilan tallentamiselle, joten laite
tallentaa edistymisesi vaikka
00:33:04.210 --> 00:33:08.870
sammuttaisit lalitteen ja voit jatkaa
peliäsi vaikka akku tyhjenisi.
00:33:08.870 --> 00:33:14.380
Löydät lähdekoodin kaikkeen tämän
Konradin Retro Go -GitHub-säilöstä.
00:33:14.380 --> 00:33:20.710
Ja se todella mahtavaa. Muut
ihmiset kehittävät esimerkiksi
00:33:20.710 --> 00:33:25.430
emulaattorin CHIP-8:lle ja siinä on
kiva kokoelma pieniä arcade-pelejä
00:33:25.430 --> 00:33:31.271
ja se on todella kivaa ja helppoa
kehittää lisää sitä käyttäen.
00:33:31.271 --> 00:33:37.010
Joten kokeile sitä jos sinulla on
Game & Watch ja omatekoiset ohjelmat kiinnostavat.
00:33:37.010 --> 00:33:41.590
Tim Schuerwegen jopa työstää emulaattoria
alkuperäisille Game & Watch -peleille.
00:33:41.590 --> 00:33:45.920
Tämä on todella siistiä, koska se tekee
Nintendo Game & Watchista emulaattorin
00:33:45.920 --> 00:33:53.130
kaikille koskaan julkaistuille
Game & Watch -peleille.
00:33:53.130 --> 00:33:57.860
Ja mikä on todella mahtavaa minusta on se
miten yhteisö syntyi. Me olemme aika
00:33:57.860 --> 00:34:02.140
avoimia kehityksestämme Twitterissä
ja Konrad striimaa Twitchissä
00:34:02.140 --> 00:34:06.480
edistymisestään. Me avasimme Discord-
kanavan, jolle laitteen hakkeroinnista
00:34:06.480 --> 00:34:11.850
kiinnostuneet ihmiset voivat liittyä.
Ja oli mahtavaa nähdä mitä yhteisö
00:34:11.850 --> 00:34:16.720
sai aikaan. Esimerkiksi nyt meillä on
toimivat tallennuspäivitys, joka toimii
00:34:16.720 --> 00:34:21.179
sekä omatekoisten ohjelmien että
virallisen laiteohjelmiston kanssa.
00:34:21.179 --> 00:34:25.320
Yhden megatavun tallennustilan sijaan
voit saada 60 megatavua flash-muistia.
00:34:25.320 --> 00:34:30.549
Sitä varten sinun on korvattava vain yksi
ainoa siru. Se on aika helppo tehdä.
00:34:30.549 --> 00:34:35.690
Raudan täydellistä ymmärtämistä varten
Daniel Cuthbert ja Daniel Padilla ovat
00:34:35.690 --> 00:34:41.010
toimittaneet korkean resoluution röntgen-
kuvat, joista näkyy jokainen kytkentä,
00:34:41.010 --> 00:34:46.379
jopa PGA-osien. Mitään ei tarvitse
juottaa irti. Sitten Jake Little
00:34:46.379 --> 00:34:52.980
Upcycle Electronicsista jäljitti kuvista
ja yleismittarilla piirilevyn
00:34:52.980 --> 00:34:58.220
kaavion. Hän jopa loi
piirrustukset, joista selviää kaikki
00:34:58.220 --> 00:35:02.260
yksityiskohdat, joita tarvitset kun haluat
ohjelmoida jotain. Se oli todella hauskaa.
00:35:02.260 --> 00:35:07.099
Sander van der Wel esimerkiksi on luonut
oman piirilevynsä ja nyt on jopa
00:35:07.099 --> 00:35:13.220
projekteja, joissa pyritään korvaamaan
alkuperäinen piirilevy piirilevyllä,
00:35:13.220 --> 00:35:20.019
jossa on FPGA ja ESP32. Joten on todella
jännä nähdä mitä ihmiset saavat aikaan.
00:35:20.019 --> 00:35:24.819
Toivottavasti nautit tästä esityksestä ja
minä toivon, että näen sinut Discordissa
00:35:24.819 --> 00:35:35.019
jos haluat liittyä hauskanpitoon.
Ja kiitos kun olit mukana.
00:35:35.019 --> 00:35:41.329
Herald: Hei. Vau, se oli todella uskomaton
esitys. Kiitos paljon, Thomas.
00:35:41.329 --> 00:35:48.140
Kuten ilmoitimme alussa, otamme vastaan
kysymyksiä teiltä ja meillä onkin niitä
00:35:48.140 --> 00:35:54.450
jo muutama. Katsotaan saammeko käytyä
ne kaikki läpi. Ensimmäinen on:
00:35:54.450 --> 00:35:59.650
luitko artikkeleita Nintendosta
tarkkailemassa hakkereita? Yksityis-
00:35:59.650 --> 00:36:04.799
etsiviä ja sellaista. Oletko mitenkään
huolissasi tälläisesta?
00:36:04.799 --> 00:36:08.400
Thomas: Voi, mitä minun kameralleni
tapahtuu? Näyttää siltä kuin Luigi
00:36:08.400 --> 00:36:17.539
olisi sekoillut asetusteni kanssa. Joo,
olen lukenut nuo artikkelit, mutta
00:36:17.539 --> 00:36:22.210
tässä tapauksessa ei ole piratismi-
ongelmaa, eihän? En anna kenenkään
00:36:22.210 --> 00:36:26.940
pelata uusia pelejä. Jos haluaisit
kopioida Super Mario ROM:in, sinun
00:36:26.940 --> 00:36:32.160
olisi pitänyt tehdä se 30 vuotta sitten,
NES Classicilla tai Switchillä tai jollain
00:36:32.160 --> 00:36:37.240
niistä sadoista Nintendon siinä välissä
julkaisemista konsoleista. Joten en ole
00:36:37.240 --> 00:36:41.480
erityisen huolissani asiasta.
H: Luulen myös, että kohdeyleisön
00:36:41.480 --> 00:36:50.270
näkökulma näkyy täällä. Seuraavaan
kysymykseen, joka on: luuletko, että
00:36:50.270 --> 00:36:55.460
on olemassa syy siihen miksi
ulkoista flash-sirua käytetään?
00:36:55.460 --> 00:37:02.849
Thomas: Jep. STM32H7B0:n sisäinen
flash-muisti on suht' pieni. Se on
00:37:02.849 --> 00:37:08.450
vain 128 kilotavua. Ja he eivät olisi
mahduttaneet kaikkea sille, ei edes
00:37:08.450 --> 00:37:13.240
kuvapuskuria. Jopa kuvapuskurin
kuva on suurempi kuin sisäinen
00:37:13.240 --> 00:37:19.100
flash-muisti. Luulen, että se on syy
ja olen tyytyväinen, että he tekivät niin.
00:37:19.100 --> 00:37:26.730
H: Aivan. Onko salauksen purku tehty
koodilla vai onko se mikrokontrollerin
00:37:26.730 --> 00:37:30.460
ominaisuus?
T: Mikrokontrollerissa on
00:37:30.460 --> 00:37:36.160
integroitu ominaisuus nimeltään OFT-DEC.
Flash-muisti on suoraan mapattu muistiin
00:37:36.160 --> 00:37:41.109
ja sirussa on tämä OTF DEC -esitäyttö,
joka tarjoaa automaattisesti
00:37:41.109 --> 00:37:45.430
salakirjoituksen purun. Se tehdään
kaikki raudalla ja voit jopa hakea
00:37:45.430 --> 00:37:48.350
salausavaimet sieltä raudasta.
00:37:48.350 --> 00:37:57.910
Herald: OK, näppärää. Ja myös seuraava
kysymys liittyy siihen:
00:37:57.910 --> 00:38:03.520
onko mielestäsi Nintendon käyttämä salaus
siihen käytetyn vaivan arvoinen?
00:38:03.520 --> 00:38:07.430
Ikään kuin se olisi siellä antaakseen
valheellista turvallisuudentunnetta.
00:38:07.430 --> 00:38:12.709
Mitä sinä ajattelet siitä?
T: Ajattelen omasta näkökulmastani, että
00:38:12.709 --> 00:38:16.489
he valitsivat oikean salauksen, koska
sitä oli hauskaa takaisinmallintaa ja
00:38:16.489 --> 00:38:21.910
yrittää ohittaa. Se oli mahtava
haaste ja ajattelen, että he tekivät
00:38:21.910 --> 00:38:26.900
kaiken oikein. Mutta ajattelen myös, että
loppupeleissä se on yksinkertainen laite
00:38:26.900 --> 00:38:31.569
ja jos katsot mitä ihmiset rakentavat
sen päälle - pelejä ja kaikkea muuta -
00:38:31.569 --> 00:38:36.680
ajattelen, että he tekivät kaiken oikein.
Luultavasti se oli vain rutiinijuttu
00:38:36.680 --> 00:38:41.569
heille. "OK, me lukittiin JTAG."
Jep, mutta luulen että se on hauskaa,
00:38:41.569 --> 00:38:44.609
koska e ei avaa piratismiongelmaa.
00:38:44.609 --> 00:38:51.140
H: Jep. Yksi juttu liittyy NOP-
liukuun, jonka havainnollistit
00:38:51.140 --> 00:39:01.189
todella hyvin. Eikö aliohjelmien
alut olisivat olleet sopivia myös
00:39:01.189 --> 00:39:11.460
tämän tavoitteen saavuttamiseen? Kysyjä
sanoo, että rekisterien tallettamiseen
00:39:11.460 --> 00:39:20.640
liittyvät komennot ovat aika tunnistettavia.
Kuinka... Jep. T: Joo, todellakin. Datan
00:39:20.640 --> 00:39:25.019
löytämiseen ITCM-muistista ja sen
hyväksikäyttöön meni alle tunti aikaa.
00:39:25.019 --> 00:39:29.950
Joten jos me olisimme yrittäneet
takaisinmallintaa koodia, se olisi
00:39:29.950 --> 00:39:33.660
ollut enemmän työtä. Täysin mahdollista
eikä edes vaikeaa, mutta keskusmuistin
00:39:33.660 --> 00:39:38.559
täyttäminen NOP-käskyillä vei vain pari
minuuttia ja oli sekä helpoin että nopein
00:39:38.559 --> 00:39:45.420
tapa edetä ilman Ghidraa.
H: OK, siistiä, kiitos. Ja tämä on
00:39:45.420 --> 00:39:54.329
enemmän kommentti kuin kysymys. Hän sanoo,
että on outoa ettei ST:n AN5281 mainitse
00:39:54.329 --> 00:39:59.630
kertaakaan, että dataa ei verifioida
salauksen aikana. Minusta se on
00:39:59.630 --> 00:40:05.759
enemmän virhe ST:n kuin Nintendon
puolelta. Mitä ajattelet tästä?
00:40:05.759 --> 00:40:10.690
Thomas: Joo, minä olen jokseeenkin samaa
mieltä tästä. Vaikka sinulla ei olisi
00:40:10.690 --> 00:40:17.670
JTAG:ia, ARM:n Thumb-käsky
on 2-4 tavua ja olisi aika pieni
00:40:17.670 --> 00:40:21.859
tila bruteforcettaa mahdollisesti
mielenkiintoinen haarautumiskomento.
00:40:21.859 --> 00:40:28.009
Joten luulen, että se ei ole täydellistä,
mutta verifiointi on aika
00:40:28.009 --> 00:40:33.410
kallista laskentamielessä ja
minusta laiteohjelmiston pitäisi
00:40:33.410 --> 00:40:37.160
verifioida ulkoisen flash-muistin sisältö.
00:40:37.160 --> 00:40:44.109
H: OK, luulen, että kysymme vielä
kaksi kysymystä ennen kuin palaamme
00:40:44.109 --> 00:40:52.000
studioon. Kysymys AES-
salausavaimista... Saitteko
00:40:52.000 --> 00:40:57.349
niitä haltuunne?
Thomas: Kyllä saimme. Mutta se on
00:40:57.349 --> 00:41:01.700
ST:n sovellus, ja he tekevät jotain hullua
shiftausta avaimille, mutta luulen,
00:41:01.700 --> 00:41:07.400
että juuri tänään, vain tunti ennen
tätä esitystä yksi äijä... Sori, en
00:41:07.400 --> 00:41:12.650
tiedä, onko kyseessä äijä... Henkilö
Discordissa rakensi uudelleen salauksen.
00:41:12.650 --> 00:41:16.779
Mutta me, minä henkilökohtaisesti
en ollut ikinä kiinnostunut siitä,
00:41:16.779 --> 00:41:22.080
koska kun olet laskenut laitteen
RTP-tasolle 0, voit lukea mapatun
00:41:22.080 --> 00:41:24.740
flash-muistin ja saada salaamattoman
sisällön haltuusi.
00:41:24.740 --> 00:41:32.009
H: Aivan, kiitos. Ja viimeinen
kysymys LCD-kontrollerista. Käytetäänkö
00:41:32.009 --> 00:41:38.180
sitä kirjoittamalla pikseleitä SPI:n yli
vai onko siinä jotain ominaisuuksia,
00:41:38.180 --> 00:41:40.930
ehkä jopa tausta tai spritejä tai jotain
sellaista?
00:41:40.930 --> 00:41:46.809
T: LCD:ssä itsessään ei ole mitään
erikoisominaisuuksia. Siinä on SPI-väylä
00:41:46.809 --> 00:41:50.930
konfigurointiin ja sitten siinä on
rinnakaisliitäntä - joten se tarvitsee
00:41:50.930 --> 00:41:56.809
paljon pinnejä. Mutta siru itsessään
sisältää LTDC:n, joka on LCD-kontrolleri,
00:41:56.809 --> 00:42:00.769
joka tarjoaa kaksi tasoa alfasekoituksella
ja jotain perusikkunointia yms.
00:42:00.769 --> 00:42:06.630
H: OK, siistiä ja kiitos todella, todella
00:42:06.630 --> 00:42:11.799
paljon hienosta esityksestä ja hienosta
introsta. Ja nyt palaamme päästudioomme
00:42:11.799 --> 00:42:14.859
kiertoradalle. Kiitos todella paljon.
Takaisin kiertoradalle.
00:42:14.859 --> 00:42:17.977
rC3-loppumusiikkia
00:42:17.977 --> 00:42:46.000
Subtitles created by c3subtitles.de
in the year 2020. Join, and help us!
00:42:46.000 --> 00:42:56.000
Translated by Markus Aurala
(KYBS2004 course assignment at JYU.FI)