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