0:00:04.335,0:00:06.525 [Translated by Markus Kallatsa (KYBS2001 course assignment at JYU.FI)] 0:00:09.670,0:00:12.346 Minut onkin jo esitelty 0:00:12.346,0:00:14.175 Nimeni on Stefan Widmann 0:00:14.175,0:00:18.325 ja varmaan voin näyttää diaesitykseni? 0:00:26.215,0:00:28.979 Hei, diat? 0:00:34.489,0:00:39.528 naurua 0:00:39.528,0:00:42.149 Olen VGA:lla siinä. 0:00:47.599,0:00:50.122 huminaa 0:00:52.342,0:00:54.129 Niin... 0:00:57.899,0:01:00.098 [mutinaa] 0:01:10.578,0:01:17.191 Okei, sen aikaa kun odottelemme, että diani ilmestyvät jotenkin 0:01:17.191,0:01:19.270 Kuka on nähnyt uskomattoman puheen 0:01:19.270,0:01:22.314 Ciscon VoIP-puhelimien hakkeroinnista viime vuonna 0:01:22.314,0:01:25.599 joko livenä tai videolta? 0:01:25.599,0:01:28.034 Okei, jotkut teistä. 0:01:28.034,0:01:30.528 Kun mietimme tätä puhetta 0:01:30.528,0:01:34.945 Ciscon VoIP-puhelimissa on sulautettu 0:01:34.945,0:01:37.889 Linux-käyttöjärjestelmä, mutta niiden ei ainoastaan 0:01:37.889,0:01:41.889 tarvitse toimia Linux-käyttöjärjestelmän kanssa, vaan lisäksi 0:01:41.889,0:01:44.372 DSP:n laiteohjelmiston kanssa. 0:01:44.372,0:01:50.910 Joten haluan kertoa, että siinä ei ole ainoastaan yksi järjestelmä, 0:01:50.910,0:02:03.300 vaan useampia järjestelmiä. Useat alijärjestelmät sisältävät laiteohjelmiston 0:02:03.300,0:02:06.940 Diat olisivat kivoja, mutta voimme aloittaa ilman niitä. 0:02:06.940,0:02:09.899 Joten, mistä puhummekaan tänään? 0:02:09.899,0:02:15.497 Ensiksi, puhumme motivaatiosta ja siitä, miksi meidän tulisi analysoida laiteohjelmistoja. 0:02:15.497,0:02:25.545 Tämän jälkeen meidän tulisi olla pystyttävä tekemään sitä, joten meidän on tuotava esille joitain edellytyksiä 0:02:25.545,0:02:34.102 Sitten syvennymme aiheeseen, yritämme katsoa sitä, miten saamme laiteohjelmiston 0:02:34.102,0:02:41.191 miten voimme analysoida sitä ja miten voimme muokata sitä 0:02:41.191,0:02:54.001 Hmm. Angel: Olemme pahoillamme pienestä teknisestä ongelmasta, tutkimme sitä. Se on toiselle puheelle. Olen pahoillani. 0:02:54.001,0:02:58.029 [puhuu saksaa] 0:03:33.254,0:03:34.568 Hmm 0:03:37.658,0:03:43.174 Okei, joten voimme mennä ilman dioja, se käy. 0:03:43.174,0:03:48.902 Aloitetaan motivaatiosta, miksi haluamme tehdä laiteohjelmistoanalyysiä. 0:03:48.902,0:03:58.244 Kun puhuin asianajajani kanssa, ymmärsin, että minun täytyy siivota 90 % motivaatiodioistani. 0:03:58.244,0:04:06.568 Ja se mitä jää jäljelle, voi tehdä yhteentoimivuuden saavuttamiseksi. 0:04:06.568,0:04:10.110 naurua 0:04:10.110,0:04:14.791 Voit tehdä sen, jos haluat eroon virheistä, ja valmistaja 0:04:14.791,0:04:21.561 ei halua tai ei kykene. Ja eräs mielenkiintoinen seikka 0:04:21.561,0:04:29.240 keskustelussa on se, liittyen forensiikkaan, tuhansien laitteiden tutkiminen 0:04:29.240,0:04:35.730 päivittäisessä elämässä. Tekevätkö he vain sen, mitä täytyy tehdä? 0:04:43.230,0:04:48.030 Herald: Kyllä, mutta silti haemme videoenkelin korjaamaan ongelman. Meillä pitäisi 0:04:48.030,0:04:54.123 olla semmoinen täällä yhden minuutin sisällä. Edelleen, pahoittelut. 0:05:06.473,0:05:11.986 Meillä on nyt sertifioitu Powerpoint-asiantuntijamme Nick Farr lavalla 0:05:11.986,0:05:17.274 aplodit 0:05:17.274,0:05:20.114 Se kestää vain minuutteja nyt 0:06:06.331,0:06:10.764 Ehkä voimme jatkaa. Joten, kerron mitä edellytyksiä tulisi 0:06:10.764,0:06:19.194 olla, kun analysoinnissa lähtee liikkeelle. Sinulla tulisi vähintään olla hyvä tietämys 0:06:19.194,0:06:26.081 sulautettujen järjestelmien arkkitehtuurista. Sinun olisi pitänyt käsitellä oheislaitteita, 0:06:26.081,0:06:32.223 väyläliitäntöjä ja niin edelleen. Sinun pitäisi pystyä lukemaan 0:06:32.223,0:06:35.185 ja kirjoittamaan Assembler-koodia. Jotkut saattavat sanoa: 0:06:35.185,0:06:39.196 minulla on todellä hyvä purkuohjelma, mikä on hyvä, 0:06:39.196,0:06:45.518 jos se sopii sinulle, mutta, älä luota siihen, että saatavana on purkuohjelma, 0:06:45.518,0:06:49.191 joka sopii juuri kyseiseen arkkitehtuuriin, jonka parissa työskentelet 0:06:49.191,0:06:55.675 Erityisesti, jos työskentelet matalalla tasolla rekisteriasioiden parissa 0:06:55.675,0:07:03.664 Ja mielestäni, purkuohjelman tuotos hämmentää sinua enemmän kuin auttaa 0:07:03.664,0:07:12.542 Tulet purkamaan ehkä, C:n ajonaikaisia kirjastoja, jotka on optimoitu olemaan mahdollisimman pieniä 0:07:12.542,0:07:18.368 jotka voivat olla todella haastavia purkuohjelman tuotoksessa. 0:07:18.368,0:07:28.726 Jos haluat oppia käytännössä miten sulautetut järjestelmät toimivat, voi olla hyvä idea hommata 0:07:28.726,0:07:36.340 Arduino tai mikä vaan. Kirjoitat hieman C-koodia, työskentelet laitteistotasolla 0:07:36.340,0:07:45.497 Sitten vaan käännät sen ja katsot, miltä purettu näyttää. 0:07:45.497,0:07:55.767 On hyvä olla laitelukija tai ohjelmoija, kuten galib. Ongelma on siinä, että ne ovat kalliita. 0:07:55.767,0:08:03.931 Jos luulet, että teemme laiteohjelmistoanalyysiä, se voi olla arvokas sijoitus hakkeritilallesi 0:08:03.931,0:08:09.330 Ja viimeisenä mutta ei vähäisimpänä, mitä tarvitse eniten, on aikaa. 0:08:09.330,0:08:16.511 Aika, aika, aika. Se voi viedä tunteja, päiviä ilman edistystä, joten olkaa kärsivällisiä 0:08:20.951,0:08:26.560 naurua 0:08:29.680,0:08:35.888 Ketään vapaaehtoisia tekemään dioja tähän? 0:08:43.628,0:08:50.974 Vannon, että se toimi täydellisesti ulkoisella monitorillani 0:08:50.974,0:09:04.296 Joo? 0:09:04.296,0:09:08.305 Joten joudun hakemaan USB-tikkuni, odottakaa hetki. 0:09:08.305,0:09:52.524 Ei hätää, olemme joustavia [viheltää] 0:10:09.571,0:10:15.257 Onko täällä ketään, jolla olisi tietokonetta lähettyvillä? 0:10:15.257,0:10:19.803 Herald: Sillä välin kun selvitämme tätä, on hyvä hetki muistuttaa teitä kaikkia 0:10:19.803,0:10:27.505 että etsimme vieläkin joitain enkeleitä. Voisit olla videoenkeli, joille 0:10:27.505,0:10:32.699 on kova kysyntä juuri nyt. Tai voisit tehdä haluamiasi töitä. 0:10:32.699,0:10:38.189 Voit työskennellä yhdessä tai kahdessa vuorossa. Olisi arvostettavaa 0:10:38.189,0:10:49.230 koska tarvitsemme vapaaehtoisia tämän tapahtuman järjestämiseen. Myös, jos toit joitain juomia tänne, 0:10:49.230,0:10:54.262 voisi olla hienoa, jos voisit viedä ne pois mukanasi. Ja laittaa ne pieneen 0:10:54.262,0:11:01.991 säilytyskoteloon, joita on eri puolilla rakennusta. Luota minuun kun saatte valmiiksi, 0:11:01.991,0:11:10.768 voit tehdä tämän tiedotuksen. Onko kaikki kunnossa? Ei oikeastaan. 0:11:10.768,0:11:12.539 naurua 0:11:12.539,0:11:15.812 Näyttää hyvältä kannettavalla tietokoneella 0:11:15.812,0:11:19.184 Haluatko pitää lyhyen esittelyn uudesta Ubuntun työpöytäversiosta? 0:11:19.184,0:11:27.888 Koska en hommat tuota ollenkaan. 0:11:27.888,0:11:33.403 Joo, peilinäytöt 0:11:33.403,0:11:39.708 Neljästä kolmeen diaa 0:11:39.708,0:11:41.821 Nyt edistymme 0:11:41.821,0:11:45.502 aplodit 0:11:45.502,0:11:47.813 Nauttikaa puheesta! 0:11:47.813,0:11:51.747 Loistavaa, nyt diojen kanssa. 0:11:51.747,0:11:56.981 Pieni tiedotus, puheen lopuksi on 5 lisäminuuttia puhetta. 0:11:56.981,0:12:04.203 Tehdään niin. Unohtakaa keltaiset palkit. 0:12:04.203,0:12:07.805 naurua 0:12:07.805,0:12:18.308 Ei oikeasti. 0:12:18.308,0:12:26.333 Korkean tason laitteet. Paljon monimutkaisuutta. Kyllä! 0:12:28.563,0:12:31.121 Täydellistä, kiitos, ilman keltaisia palkkeja, kiitos. 0:12:31.121,0:12:41.750 Okei. Joten puhuimme ennakkotiedoista, joten syvennymme aiheisiin 0:12:41.750,0:12:49.849 Ensiksi, meidän täytyy hankkia laiteohjelmisto. Menemme ei-invasiivisesta invasiiviseen. 0:12:49.849,0:12:57.506 Koska ensimmäinen asia, jota haluamme yrittää, on päästä laiteohjelmistoon käsiksi avaamatta laitetta. 0:12:57.506,0:13:03.262 Yritämme ensiksi ladata puhtaan binäärin valmistajalta. 0:13:03.262,0:13:12.147 Tai joltakulta muulta, joka on purkanut binäärin ja laittanut sen internettiin. 0:13:12.147,0:13:19.440 Voit yrittää ladata käynnistyslevyn, USB, CD-ROM, käynnistysmuistitiedoston tai mitä vaan mitä valmistaja tarjoaa 0:13:19.440,0:13:25.640 ja purkaa sen, esimerkiksi, WinRARilla Windowsilla tai vaan liittää Linuxiin. 0:13:25.640,0:13:34.781 Hae tiedostoja nimeltä .bin, .hex, .s19, .mot kuten Motorola, .rom tai .raw. 0:13:34.781,0:13:42.439 Useimmiten binääri, joka tarkoittaa .bin, .rom 0:13:42.439,0:13:50.691 Ei-binääritiedostot tulisi muuntaa bin-tiedostoiksi, esimerkiksi muuntimien, kuten hex2bin avulla. 0:13:50.691,0:13:55.876 Jos tämä ei toimi, voimme ehkä saada päivitysohjelman valmistajalta 0:13:55.876,0:14:00.461 Tavallisesti ne ovat Windowsille tehtyjä .exe-tiedostoja. 0:14:00.461,0:14:07.429 On olemassa erilaisia päivitysohjelmiston tyyppejä. Ensinnäkin itsepurkavia arkistoja. 0:14:07.429,0:14:12.417 Se voi olla asennusohjelma myös, kuten Installshield tai mikä vain 0:14:12.417,0:14:18.973 Se olla päivitysohjelma, yksinkertainen .exe-tiedosto ilman asennuksia, ainoastaan sisältäen levykuvan. 0:14:18.973,0:14:25.493 Se saatta olla päivitysohjelma, joka lataa levykuvan tai se saattaa olli jokin muista 0:14:25.493,0:14:31.675 mutta pakattu suoritettavalla paketoijalla, kuten UPX tai PECompact. 0:14:31.675,0:14:33.487 Mennään hieman yksityiskohtiin. 0:14:33.487,0:14:43.000 Joten, jos se on itsepurkautuva arkistohaku allekirjoitukselle, kuten RARSFX tai PK. 0:14:43.000,0:14:53.440 Voit purkaa ne, esimerkiksi uudelleennimeämällä PK:n, joka sisältää .zip-tiedoston, jonka voit purkaa. 0:14:53.440,0:14:59.223 Jos se on asennusohjelma, kuten Installshield, on olemassa erikoispurkutyökaluja, mutta ongelma on siinä 0:14:59.223,0:15:06.153 että ne ovat vaikeakäyttöisiä ja erityisesti versiokohtaisia. Se saattaa toimia tai olla toimimatta. 0:15:06.153,0:15:10.994 Paras tapa on vain antaa sen asentaa ja hakea asennetuista tiedostoista 0:15:10.994,0:15:20.242 puhdasta levykuvaa tai päivitysohjelmaa. Jos se on päivitysohjelma, joka sisältää laiteohjelmiston levykuvan, 0:15:20.242,0:15:26.280 voimme hakea levykuvaa suoritettavasta tiedostosta käyttäen mieleistä heksaeditoriasi. 0:15:26.280,0:15:33.678 Ehkä päivitysohjelma kirjoittaa dataa tiedostoon, väliaikaiseen tiedostoon useimmiten ja poistaa 0:15:33.678,0:15:40.735 sen käytön jälkeen. Voit käyttää ProcessMonitoria, joka on kuten Strace, mutta Windowsilla. 0:15:40.735,0:15:45.903 ja voit katsoa mitä tiedostoja levyllä on kirjoitettu ja yrittää kaapata niitä 0:15:45.903,0:15:52.300 ennen kuin ne poistuvat. Ehkä päivitysohjelma vain tarkistaa laitettasi, joten se on 0:15:52.300,0:15:57.477 vain pieni latausohjelma. Tarkistamalla laitetyyppisi, vilkaise valmistajan ftp-sivua 0:15:57.477,0:16:02.519 ja lataako se levykuvaa, jos sellainen on saatavilla. 0:16:02.519,0:16:08.583 Jos se lataa levykuvaa tiedostoon, käytä ProcessMonitoria uudelleen. 0:16:08.583,0:16:19.289 Jos se lataa RAM-muistiin, sinun täytyy käyttää debuggeria ja dumpata se muistista. 0:16:19.289,0:16:27.297 Jos sinulla on pakattu päivitysohjelma, joka tietenkin on tehty säästämään tilaa. 0:16:27.297,0:16:36.520 Jos se on standardi UPX, voit ladata UPX:n ja käyttää "UPX -d":tä purkaaksesi sen. 0:16:36.520,0:16:44.145 Joskus valmistaja rikkoo UPX:n lisenssiä ja muokkaa UPX:ää poistamalla 0:16:44.145,0:16:51.504 olennaista tietoa tiedostosta, jotta siitä saadaan pakkauskelvoton. Joten sinun tarvitsee käyttää erityistä purkajaa. 0:16:51.504,0:17:00.730 Muut suoritettavat pakkaajat ovat useimmiten suunniteltu kompressoimattomiksi. 0:17:00.730,0:17:05.377 Tällöin tarvitse erikoispurkajaa myöskin. 0:17:05.377,0:17:12.243 Eräs haaste voi tulla siinä, jos päivitysohjelma sisältää kompressoituja levykuvia. 0:17:12.243,0:17:20.714 Ne ovat tavallaisesti purettu ennen kuin levykuva on kirjoitettu laitteelle, joten voimme vain katsoa 0:17:20.714,0:17:27.245 prosessimuistia debuggerin avulla ja dumpata sen. 0:17:27.245,0:17:34.205 Haasteellisempaa on se, kun laiteohjelmisto lähetetään kompressoitavaksi laitteelle 0:17:34.205,0:17:40.827 Joten täytyy käyttää invasiivisia tekniikoita, joista puhun myöhemmin 0:17:40.827,0:17:47.752 On hyvä laitaa nuuskija valmiiksi, kun ensimmäisen kerran yhdistät laitteen PC-tietokoneeseesi. 0:17:47.752,0:17:56.230 Ehkä laitteen mukana tuleva lempi-bloatware haluaa päivittää sen välittömästi 0:17:56.230,0:18:04.257 Mitä voit tehdä nuuskiaksesi siirtoja? Windows XP:llä, pahoittelut vain XP:llä, 0:18:04.257,0:18:14.313 on TraceSPTI, fantastinen työkalu SPTI SCSI PassThrough Interfacen jäljittämiseen. 0:18:14.313,0:18:22.573 Mietit SCSI:tä? Minulla ei ole pelkästään SCSI-laitteita, mutta kommunikoinnista suurin osa on tehty käyttäen 0:18:22.573,0:18:33.240 tätä prokollaa Windowsilla. Tunnistaaksesi S/ATA USB -laitteita, etenkin, jos ne ovat ATAPI, 0:18:33.240,0:18:39.042 Linux-puolella voit käyttää Wiresharkia jäljittääksesi kommunikaation, koska Wireshark 0:18:39.042,0:18:47.308 Linuxilla voi jäljittää ja nuuskia USBia. On myös muita työkaluja, kuten Bushound ja niin edelleen 0:18:47.308,0:18:54.752 katsoaaksesi väylien kommunikaatiota. Ongelma on siinä, että ne ovat tavallisesti erittäin kalliita. 0:18:54.752,0:19:00.767 Ongelma nuuskiessasi päivityssiirtoa ja rekonstruktoroidessa levykuvaa on se, 0:19:00.767,0:19:13.610 että se on kuin pulmapeli. Et tiedä miten levykuva buildataan ja miten se tehdään oikein. 0:19:13.610,0:19:20.643 Jos sinulla ei ole laiteohjelmistoa vielä, se voi mennä invasiiviseksi nyt. 0:19:20.643,0:19:26.891 Etsimme sarjaliitäntöjä, joskus niihin pääsee käsiksi laitetta avaamatta, 0:19:26.891,0:19:33.542 joskus ei. Onko meillä sulautettu Linux-järjestelmä? Kyllä, voimme etsiä sarjakonsolia. 0:19:33.542,0:19:42.221 Ehkä meidän täytyy käyttää JTAGia. 27C3:ssa oli hyvä puhe JTAGista, sarjamuotoisesta flashista ja niin edelleen, 0:19:42.221,0:19:47.511 joten laitan linkin tähän. 0:19:47.511,0:19:53.195 Ei siis vieläkään laiteohjelmistoa? Hae ruuvimeisseli, mitätöidään takuut. 0:19:53.195,0:19:58.555 Avaamme laitteen ja etsimme muistilaitteita PCB:stä. 0:19:58.555,0:20:07.385 Jos sinulla on todella vanha laite, kohtaat ehkä EPROMseja tai jopa PROMseja, 27-kymppisiä 0:20:07.385,0:20:15.233 Jos se on vähän uudempi, saatat nähdä EEPROMseja ja flashia. 28, 29, 39, 49 jotain ja 0:20:15.233,0:20:25.947 isoja 48-pinnisiä flash-laitteita, esimerkiksi useille eri nimillä 0:20:25.947,0:20:35.507 Mukava nähdä, että sarjamuistit, ne 8-pinniset laitteet 25..., joskus 24... 0:20:35.507,0:20:42.989 ovat hiljattain tulossa standardiksi. Niistä on helppo poistaa juotos ja uudelleenjuottaa 0:20:42.989,0:20:51.679 ja saatavilla on todella halpoja lukijoita ja ohjelmoijia. Mutta pyydän, vaikka jotkut sanovat, että voimme 0:20:51.679,0:21:02.327 tehdä sen järjestelmässä ilman sirun juottamista, älkää tehkö niin. Se voi johtaa todella suuriin ongelmiin. 0:21:02.327,0:21:07.632 Jotta asia olisi hieman vaikemapi, laiteohjelmisto voi olla sisällytettynä sirun sisäisiin muisteihin. 0:21:07.632,0:21:17.143 Voit käyttää omaa ohjelmointirajapintoja laiteohjelmiston lukemiseen, JTAGIa totta kai. 0:21:17.143,0:21:24.389 Joissain laitteissa käynnistyslatausohjelmat ovat naamioidussa ROM-muistissa. Voit yrittää käyttää niitä. 0:21:24.389,0:21:29.623 Jos mikään näistä lähestymistavoista ei onnistu, voit yrittää mikroluotausta. 0:21:29.623,0:21:38.320 Viime vuoden kongressissa oli puhe matalakustanteisten sirujen mikroluotauksesta, olen 0:21:38.320,0:21:46.960 liittänyt linkin tähän. Joten ihan vain siksi, että täydellisyyden vuoksi olen maininnut CPLD:t ja FPGA:t. 0:21:46.960,0:21:53.855 Tiedätte, että CPLD:t on rakennettu käyttäen sisäisiä EEPROMeja 0:21:53.855,0:22:04.111 FPGA:t, kenttäohjelmoitavilla porttiryhmillä on sisäinen SRAM ja ulkoinen sarjakonfiguraatio-flash. 0:22:04.111,0:22:12.411 Joitain vuosia sitten niitä markkinoitiin takaisinmallinnus-kestävinä. Ehkä. 0:22:12.411,0:22:22.960 Huomenna on puhe, samaan aikaan uskoisin Saal 2:ssa, FPGA:iden lähemmästä tarkastelusta. 0:22:22.960,0:22:29.130 Onneksi olkoon, olemme tehneet sen, meillä on laiteohjelmistomme, täydellistä. 0:22:29.130,0:22:33.658 Mitä sitten seuraavaksi, meidän täytyy analysoida se. 0:22:33.658,0:22:40.302 Ongelma on siinä, mitä prosessoria käytetään. Emme tiedä mitä purkuohjelmaa käytämme. 0:22:40.302,0:22:45.530 Meidän täytyy etsiä netistä tietolehtisiä, jotta saisimme mitä tahansa tietoa. 0:22:45.530,0:22:57.622 Voimmeko selvittää mikä prosessori on käytössä? Ongelma usein on, ettei tietolehtisiä löydy. 0:22:57.622,0:23:08.378 Valmistaja sanoo, että jost ostat miljoona laitetta vuodessa ja allekirjoitat NDA:n, niin saat tietolehtiset. 0:23:08.378,0:23:16.716 Tällöin sinun täytyy olla todella kärsivällinen. Nyt se menee kokeilemiseksi ja erehtymiseksi eri purkuohjelmien kokeilussa. 0:23:16.716,0:23:24.297 Voit käyttää tiettyjä purkuohjelmia, mutta ne on rakennettu ainoastaan yhdelle arkkitehtuurille. 0:23:24.297,0:23:29.756 Voit käyttää hyvää työkalua, Interactive Disassembleria, IDAa. Siitä on olemassa freeware-versio. 0:23:29.756,0:23:37.902 Lisäsin linkin mukaan tämän puheen linkkiosioon, mutta freeware sisältää ainoastaan pienen joukon arkkitehtuureja. 0:23:37.902,0:23:46.423 Jos haluat kokonaisen paketin, se tulee todella kalliiksi. Mutta on myös toinen työkalu, josta itse todella pidän. 0:23:46.423,0:23:55.050 Se on ODA, the Online Disassembler, tukee noin kolmeakymmentä arkkitehtuuria, ja se on ilmainen. 0:23:55.050,0:24:01.477 Voit ladata binääritiedostoja, ladata koodia ja kokeilla eri arkkitehtuureja, 0:24:01.477,0:24:07.504 ja selvittää, mikä voisi olla se oikea, ja teemme sen nyt. 0:24:07.504,0:24:12.350 Olen valmistellut jotain binäärikoodia. 0:24:12.350,0:24:17.521 Tiedän mille arkkitehtuurille se on kirjoitettu, koska tein itse sen. 0:24:17.521,0:24:24.537 Laitan koodin Online Disassembleriin ja valitsen eri arkkitehtuureja, 0:24:24.537,0:24:28.283 ja katsotaan miltä purku näyttää. 0:24:28.283,0:24:36.501 Aloitetaan entisestä Hitachista, nykyinen Renesas, H8S. Toivottavasti pystytte lukemaan tätä. 0:24:36.501,0:24:41.538 Ottakaa aikaa ja nostakaa kätenne ylös, jos luulette, että se on kelvollinen purku ja 0:24:41.538,0:24:48.299 olemme löytäneet arkkitehtuurimme. 0:24:48.299,0:24:53.334 Näen yhden käden. 0:24:53.334,0:24:59.589 Okei, valitettavasti joudun tuottamaan pettymyksen, se ei ole kelvollinen purku. Näemme sen toiselta riviltä. 0:24:59.589,0:25:06.223 Purkuohjelma ei kyennyt purkamaan dataa ja se on vain määrittelemätön käsky. 0:25:06.223,0:25:12.875 Koodissa on useita .word-sanoja. Se ei ole H8S. 0:25:12.875,0:25:22.251 Yritetään MIPSiä. Taas ottakaa aikaa ja nostakaa käsi ylös, jos luulette, että se on kelvollinen. 0:25:22.251,0:25:27.206 naurua taas? 0:25:27.206,0:25:39.480 Se on kelvoton myöskin. Näemme sen toiselta riviltä, koska siellä on dword, jota ei ole purettu. 0:25:39.480,0:25:50.690 Miten Panasonic MN103 perhe? Sama käsi taas? Oi, näen toisenkin käden. 0:25:50.690,0:25:57.127 Ok, useita käsiä nyt. OK, kiitos. 0:25:57.127,0:26:01.220 Ongelma on, ettei se ole validi. Joudun tuottamaan teille pettymyksen. 0:26:01.220,0:26:06.786 Tässä tapauksessa ongelma on siinä, että se näyttää todella hyvältä, mutta joudutte kaivamaan syvemmälle. 0:26:06.786,0:26:14.020 Teidän täytyy katsoa, ovatko kaikki aliohjelmat oikein. Onko niissä mitään järkeä? 0:26:14.020,0:26:17.270 Onko aliohjelmakutsuja ollenkaan ja niin edelleen. 0:26:17.270,0:26:23.144 Tulette huomaamaan jotain todella outoa. Viimeinen yritys. 0:26:23.144,0:26:28.533 Miten Texas Instruments MSP430? 0:26:28.533,0:26:33.258 Ja taas, nostakaa kätenne ylös. 0:26:33.258,0:26:40.895 Okei? Joo, tällä kertaa se on MSP430! 0:26:40.895,0:26:48.172 Löysimme arkkitehtuurimme, täydellistä, heureka, bingo, meillä on se. 0:26:48.172,0:26:56.770 Mitä seuraavaksi? Tiedoston siirtymä, ladatun ohjelmistotiedoston arvo 0:26:56.770,0:27:04.850 ei usein ole osoiteavaruuden siirtymä. Tää ei ole ongelma, kun arkkitehtuuri 0:27:04.850,0:27:12.030 käyttää suhteellista osoitteistoa. Suhteellinen osoitteisto tarkoittaa, että meillä on rekisterisisältöä ja mitä vain 0:27:12.030,0:27:20.130 haluamme käyttää perustuu jonkin rekisterin sisältöön. Sijainnista riippumaton koodi. 0:27:20.130,0:27:27.468 Mutta ongelmana on nyt absoluuttisen osoitteiston käyttäminen, ja jopa arkkitehtuurit, 0:27:27.468,0:27:36.617 jotka tukevat suhteellista osoitteistoa sisältää jonkin verran absoluuttista osoitteistoa jossain osassa osoitteita. 0:27:36.617,0:27:40.893 Emme tiedä, missä on sisäänkäynti. Mistä meidän tulisi aloittaa? 0:27:40.893,0:27:47.551 Keskeytysvektorit saatetaan dekoodata kokonaan väärin, aliohjelmakutsuissa ei ole mitään järkeä. 0:27:47.551,0:27:54.376 Ne osoittavat meidän laiteohjelmistomme ulkopuolelle, esimerkiksi tai keskelle käskyjä. 0:27:54.376,0:28:01.227 Joten kuorman siirto on siis löydettävä. 0:28:01.227,0:28:08.909 Näytän teille metodin, jota kutsun "kutsun etäisyyshauksi". 0:28:08.909,0:28:15.572 Valitsemelle lähellä olevia aliohjelmaosoitteita ja päätämme, käytämmekö niistä 0:28:15.572,0:28:21.959 edeltäviä palautuskäskyjä aliohjelmien edessä vai funktion alussa olevaa 0:28:21.959,0:28:31.319 syöttöjärjestystä. Rakennamme hakumerkkijonon sisältäen villikortin, ja sitten haemme 0:28:31.319,0:28:36.284 Teemme sen yhdessä, olen valmistellut esimerkin 0:28:36.284,0:28:45.771 Tämä on 8051 koodi. 8051:n ydin on todella vanha, se on 8-bittinen ohjain, mutta laajalti käytetty kentällä, 0:28:45.771,0:28:53.654 koska se on halpa ja voit tehdä sillä mitä haluat. 0:28:53.654,0:29:01.725 Vasemmassa sarakkeessa näemme esimerkkimme osoitteet, 0x00:sta 0x13:een heksaan. 0:29:01.725,0:29:13.430 Näemme neljä aliohjelmaa, ensimmäinen juurialiohjelmana kutsuen kolmea muuta aliohjelmaa. 0:29:13.430,0:29:23.443 Näemme, että ensimmäinen kutsu 0x100:aan on esimerkkimme ulkopuolella, meillä ei ole 0x100:aa tässä esimerkissä. 0:29:23.443,0:29:30.472 Joten otamme kolme aliohjelmaosoitetta ja lajittelemme ne järjestykseen. 0:29:30.472,0:29:40.678 Näin ollen, meillä on 0x100, 0x103 ja 0x107. Laskemme erotuksen saadaksemme selville aliohjelmien pituuden. 0:29:40.678,0:29:53.443 Saamme 3 tavua ja 4 tavua. Nyt katsomme, miten aliohjelmat on rakennettu tässä tiettyssä arkkitehtuurissa. 0:29:53.443,0:30:01.818 x86:lla usein löydätte sen, ei 64-bittisillä alustoilla, mutta 32- ja 16-bittisillä alustoilla. 0:30:01.818,0:30:11.500 Löydätte pinokehyksen syöttöjärjestyksen jokaisesta funktiosta, kuten "push bp" tai "push ebp 0x55" 0:30:11.500,0:30:15.229 Voitte siis laukaista sen. 0:30:15.229,0:30:24.548 8051:llä se ei ole mahdollista. Katsokaa osoitetta 0x0A. Se on 0xE0. 0:30:24.548,0:30:28.530 Katsokaa osoitetta 0x0D, se on 44, ja 0x11 on 7B. 0:30:28.530,0:30:32.108 Ne eivät vastaa toisiaan, se ei auta meitä. 0:30:32.108,0:30:39.690 Tarkastellaan siis edellisiä palautuksia ja kyllä, edessä on palautuksia 0:30:39.690,0:30:45.483 jokaisessa aliohjelmassa.[br]Joten otamme 0x22:n [ret] ankkuriksemme. 0:30:45.483,0:30:51.259 Hakumerkkijonomme näyttää tältä;[br]Aloitamme 0x22:sta, meillä on 0:30:51.259,0:30:56.823 aliohjelma, jonka pituus on kolme tavua,[br]joten meillä on 0x22 [ret], kaksi villikorttia ja 0:30:56.823,0:31:04.483 uudelleen palautus. Toinen osa hakumerkkijonosta koodaa toisen 0:31:04.483,0:31:13.244 aliohjelman neljällä tavulla. Joten meillä on villikortti,[br]villikortti, villikortti ja uudelleen palautus [0x22] 0:31:13.244,0:31:22.383 Tässä yksinkertaisessa esimerkissä saimme vain yhden osuman,[br]täydellistä. Saimme osuman osoitteessa 0x09. 0:31:22.383,0:31:27.888 Mutta emme halua palautuksen osoitetta,[br]vaan haluamme aliohjelman osoitteen 0:31:27.888,0:31:33.447 joten emme käytä 0x09:ä, vaan käytämme 0x0A:ta 0:31:33.447,0:31:40.662 Otamme alkuperäisen kohdeosoitteen 0x0100,[br]puramme 0x0A 0:31:40.662,0:31:49.411 ja saamme koodiesimerkkimme perusosoitteen,[br]joka on 0xF6 0:31:49.411,0:31:58.392 Jos sovellamme tätä äskettäin havaittua kuorman siirtoa koodiin ja muutamme siirtymää 0:31:58.392,0:32:06.430 aloittaen nyt 0x00F6:sta vasemmassa sarakkeessa[br]näemme, että kaikki kolme aliohjelmaa nyt täsmäävät. 0:32:06.430,0:32:14.706 Kutsu 0x0100:aan, kutsu 0x0107:aan[br]ja kutsu 0x013:een. 0:32:14.706,0:32:22.706 Ok, mielestäni tämä oli vaikea, joten[br]toistetaan se, mitä olemme jo tehneet 0:32:22.706,0:32:30.647 Olemme saaneet levykuvamme, olemme[br]onnistuneesti löytäneet prosessoriarkkitehtuurin, 0:32:30.647,0:32:35.143 olemme löytäneet purkuohjelman, jolla[br]puramme laiteohjelmiston, 0:32:35.143,0:32:43.746 ja toivottavasti löytäneet alkuperäinen[br]kuoram siirtymän. Joten mitä seuraavaksi 0:32:43.746,0:32:49.358 Ehkä kysymys herää, onko laitteella[br]lisälaiteohjelmistoa? 0:32:49.358,0:32:56.254 Näen hyppyjä ja kutsuja tietämämme laiteohjelmiston[br]ulkopuolelle, vaikka juuri säädimme 0:32:56.254,0:33:02.446 kuorman siirtymää. Onko siru sisäinen?[br]Näemme sen kuvasta, ehkä 0:33:02.446,0:33:10.387 meillä on ainoastaan laiteohjelmiston osa A.[br]Ja ehkä se käyttää kirjastoa tai sirun sisäistä osaa B. 0:33:10.387,0:33:18.900 Joten meidän täytyy katsoa, mitä voimme tehdä[br]käyttäen laiteohjelmiston muutosta. 0:33:18.900,0:33:26.843 Nyt kun tämä on tehty, voimme aloittaa[br]koodin normaalin takaisinmallinnuksen. 0:33:26.843,0:33:31.537 Haemme merkkijonoja, haemme viittauksia[br]merkkijonoihin, 0:33:31.537,0:33:39.353 mutta koska olemme todella matalla sulautetussa[br]järjestelmässä, voimme ehkä hakea hyvin erikoistuneita, 0:33:39.353,0:33:48.580 dataviittauksia ja operandeja. Hae USB-kuvauskenttiä,[br]jotka olet poiminut /lib/lsusb-ohjelmalla 0:33:48.580,0:33:55.228 Katso USB-magiaa, kuten USBC ja USBS,[br]tiedät, että näitä kahta dwordia käytetään 0:33:55.228,0:34:03.727 USB-kommunikoinnissa. Katso IDEa, SATAa ja[br]ATAPI ID merkkijonoja ja sano samalla: 0:34:03.727,0:34:15.761 "Olen OCZ SSD -laite" esimerkiksi. Kun[br]olet nuuskinut laitekommunikointia 0:34:15.761,0:34:21.920 olet jo löytänyt joitain tyypillisiä tietolohkoja.[br]Voit yrittää etsiä niitä [binääristä] 0:34:21.920,0:34:28.145 Viimeisenä, muttei vähäisimpänä, laite on ehkä antanut joitain virhekoodeja, ja voit etsiä merkkijonoja 0:34:28.145,0:34:33.887 tai operandeja opkoodeissa. 0:34:33.887,0:34:38.954 On todella mielenkiintoista löytää piilotettuja[br]laiteohjelmistopäivitysjonoja, koska 0:34:38.954,0:34:47.220 ne voivat sallia ei-invasiivisen muokkaamisen.[br]Esimerkiksi hae sirun pyyhkimis- ja 0:34:47.220,0:34:51.870 ohjelmointikomentoja, voit poimia asianmukaisia[br]komentoja tietolehtisestä 0:34:51.870,0:35:01.519 jos käytettävissä on jokin ulkoinen muistilaite.[br]Olemme tehneet analyysin ja olemme 0:35:01.519,0:35:07.917 oppineet paljon laitteesta.[br]Nyt aiomme mukauttaa sitä. 0:35:07.917,0:35:14.320 Ensiksi, meidän täytyy miettiä. Jos[br]aiomme muuttaa laiteohjelmistoa, meidän pitää 0:35:14.320,0:35:19.687 valmistautua muuraamaan laitteemme. 0:35:19.687,0:35:25.042 Valmistajat toteuttavat useita eheystarkistuksia,[br]ja miksi he tekevät niin? 0:35:25.042,0:35:34.766 Sen takia, koska laiteohjelmisto tallennetaan flashiin,[br]joka on altis vanhenemiselle, varsinkin, jos siihen liittyy lämpöä. 0:35:34.766,0:35:42.409 He tekevät tarkistussummia. On olemassa ohjelmistopohjaisia[br]tarkissumman laskentamenetelmiä, CRC esimerkiksi. 0:35:42.409,0:35:48.537 On olemassa jopa laitteistopohjaisia tarkistussumia, joissa[br]jokin HW-oheislaite tekee työn puolestamme. 0:35:48.537,0:35:57.179 Koodissa näkyy siis alku- ja loppusiirtymä,[br]sekä polynomi, jos olet onnekas. 0:35:57.179,0:36:03.656 Se voi myös olla kovakoodattuna oheislaitteeseen,[br]jotta en näkisi mitään. 0:36:03.656,0:36:13.168 Se voi olla yhdistelmä molempia, pelkästään[br]käynnistyksen yhteidessä tai syklisesti taustalla. 0:36:13.168,0:36:18.739 Mitä meidän on tehtävä muuttaaksemme laiteohjelmistoa?[br]Joko korjata nämä tarkistussummat, 0:36:18.739,0:36:26.140 tai korjata ne tarkistussumma-algoritmit,[br]jotta ne eivät käynnisty. 0:36:26.140,0:36:32.309 Mitkä ovat muutostyömme tavoitteet, tietysti[br]kuulimme sen motivaatio-osassa. 0:36:32.309,0:36:44.751 Olemme korjaamassa virheitä, ja ehkäpä virheet[br]sisältyvät sirun toiseen osaan, jota meillä ei 0:36:44.751,0:36:51.369 ole tällä hetkellä. Ehkä meidän täytyy dumpata[br]lisämuistialueita. 0:36:51.369,0:37:02.249 Sitä he tekivät Cisco VoIP -hakkeroinnissa.[br]He yrittivät löytää memcpy-rutiinin ja käyttää sitä. 0:37:02.249,0:37:08.551 Jos et löydä memcpy-rutiinia, voit ehkä[br]totetuttaa oman version. Miksei? 0:37:08.551,0:37:15.892 Voitte dumpata koodia toisilta muistialueilta[br]ulostulopuskureille. 0:37:15.892,0:37:20.427 Jos sinulla ei ole tilaa ulkoisella muistilaitteella,[br]mikset ohjelmoisi sitä laitteelle 0:37:20.427,0:37:29.918 ja lukisi sitä laitteelta. Se voi olla todella[br]mielenkiintoista kerätä lisää laitteen sisäistä tietoa. 0:37:29.918,0:37:36.561 Esimerkiksi RAM-dumpin kanssa, koska[br]staattista analyysiä tehdessä, mietit aina 0:37:36.561,0:37:48.435 mitä RAMissa on tässä ja tuossa osoitetteessa.[br]Nyt kun olemme mukauttaneet laiteohjelmistoa, 0:37:48.435,0:37:53.960 voimme pistää sen takaisin laitteeseen. Esimerkiksi[br]käyttämällä alkuperäistä päivitysohjelmistoa. 0:37:53.960,0:37:58.437 Se saattaa sisältää jotain tarkistussumman tarkastuksia,[br]ken tietää. 0:37:58.437,0:38:06.598 Voimme yrittää uudelleenohjelmoida sen mahdollisesti[br]saatavilla olevaan muistilaitteeseen, tai prosessoriin. 0:38:06.598,0:38:14.163 Tämä voi olla tehty käyttäen sarjaliitäntää,[br]joko JTAGia tai oheislaitteita. 0:38:14.163,0:38:17.967 Siinäpä se. Kiitos paljon. 0:38:17.967,0:38:25.766 aplodit 0:38:25.766,0:38:36.093 Angel: Jos teillä on kysymyksiä, järjestäytykää tilassa[br]olevien mikrofonien eteen, täällä on neljä niitä. 0:38:42.573,0:38:47.125 Onko mitään kysymyksiä? Mikrofoni 1 kiitos; 0:38:47.125,0:38:54.427 Kysymys: Ei ole kysymys, vaan vinkki. Jos tarvitset jotain binääridumppia tai vastaavaa tiedostoylijäämää Windowsille 0:38:54.427,0:39:06.456 voit kieltää poisto-oikeuden, joten asennus- tai päivitysohjelmisto ei[br]pysty poistamaan sen väliaikaisia tiedostoja. 0:39:06.456,0:39:08.858 Joten ne jäävät laitteelle uudelleenohjelmoinnin jälkeen. 0:39:08.858,0:39:10.733 A: Onko sinulla vinkkiä, mitä käyttää siinä tapauksessa? 0:39:10.733,0:39:11.723 Q: Anteeksi? 0:39:11.723,0:39:14.262 A: Onko sinulla vinkkiä siitä, onko tähän olemassa[br]erikoistyökalua? 0:39:14.262,0:39:18.902 Q: Se ei ole välttämätön, se on Windowsissa[br]sisäänrakennettuna valmiiksi. 0:39:18.902,0:39:20.422 A: OK 0:39:20.422,0:39:26.622 Q: Ja en tiedä sanaa. 0:39:26.622,0:39:27.506 A: OK 0:39:27.506,0:39:34.288 Q: Mutta voit peruuttaa oikeudet kokonaan hakemistosta,[br]poistamiseen on olemassa oma erikoisoikeus. 0:39:34.288,0:39:37.407 A: OK, kiitos. 0:39:37.407,0:39:42.603 Angel: Onko enää lisää kysymyksiä? 0:39:46.603,0:39:50.631 Angel: Ei näytä siltä. Antakaa lämpimät suosionosoitukset[br]puhujallemme Stefan Widmannille. 0:39:50.631,0:39:54.821 aplodit[br]A: Päällä [mikrofoni 2] 0:39:54.821,0:39:57.465 Angel: On vielä yksi kysymys... Ei? 0:39:57.465,0:39:59.546 A: OK 0:39:59.546,0:40:02.878 Angel: Kun poistutte, ottakaa... 0:40:02.878,0:40:11.092 [Translated by Markus Kallatsa (KYBS2001 course assignment at JYU.FI)]