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)