1 00:00:04,335 --> 00:00:06,525 [Translated by Markus Kallatsa (KYBS2001 course assignment at JYU.FI)] 2 00:00:09,670 --> 00:00:12,346 Minut onkin jo esitelty 3 00:00:12,346 --> 00:00:14,175 Nimeni on Stefan Widmann 4 00:00:14,175 --> 00:00:18,325 ja varmaan voin näyttää diaesitykseni? 5 00:00:26,215 --> 00:00:28,979 Hei, diat? 6 00:00:34,489 --> 00:00:39,528 naurua 7 00:00:39,528 --> 00:00:42,149 Olen VGA:lla siinä. 8 00:00:47,599 --> 00:00:50,122 huminaa 9 00:00:52,342 --> 00:00:54,129 Niin... 10 00:00:57,899 --> 00:01:00,098 [mutinaa] 11 00:01:10,578 --> 00:01:17,191 Okei, sen aikaa kun odottelemme, että diani ilmestyvät jotenkin 12 00:01:17,191 --> 00:01:19,270 Kuka on nähnyt uskomattoman puheen 13 00:01:19,270 --> 00:01:22,314 Ciscon VoIP-puhelimien hakkeroinnista viime vuonna 14 00:01:22,314 --> 00:01:25,599 joko livenä tai videolta? 15 00:01:25,599 --> 00:01:28,034 Okei, jotkut teistä. 16 00:01:28,034 --> 00:01:30,528 Kun mietimme tätä puhetta 17 00:01:30,528 --> 00:01:34,945 Ciscon VoIP-puhelimissa on sulautettu 18 00:01:34,945 --> 00:01:37,889 Linux-käyttöjärjestelmä, mutta niiden ei ainoastaan 19 00:01:37,889 --> 00:01:41,889 tarvitse toimia Linux-käyttöjärjestelmän kanssa, vaan lisäksi 20 00:01:41,889 --> 00:01:44,372 DSP:n laiteohjelmiston kanssa. 21 00:01:44,372 --> 00:01:50,910 Joten haluan kertoa, että siinä ei ole ainoastaan yksi järjestelmä, 22 00:01:50,910 --> 00:02:03,300 vaan useampia järjestelmiä. Useat alijärjestelmät sisältävät laiteohjelmiston 23 00:02:03,300 --> 00:02:06,940 Diat olisivat kivoja, mutta voimme aloittaa ilman niitä. 24 00:02:06,940 --> 00:02:09,899 Joten, mistä puhummekaan tänään? 25 00:02:09,899 --> 00:02:15,497 Ensiksi, puhumme motivaatiosta ja siitä, miksi meidän tulisi analysoida laiteohjelmistoja. 26 00:02:15,497 --> 00: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ä 27 00:02:25,545 --> 00:02:34,102 Sitten syvennymme aiheeseen, yritämme katsoa sitä, miten saamme laiteohjelmiston 28 00:02:34,102 --> 00:02:41,191 miten voimme analysoida sitä ja miten voimme muokata sitä 29 00:02:41,191 --> 00:02:54,001 Hmm. Angel: Olemme pahoillamme pienestä teknisestä ongelmasta, tutkimme sitä. Se on toiselle puheelle. Olen pahoillani. 30 00:02:54,001 --> 00:02:58,029 [puhuu saksaa] 31 00:03:33,254 --> 00:03:34,568 Hmm 32 00:03:37,658 --> 00:03:43,174 Okei, joten voimme mennä ilman dioja, se käy. 33 00:03:43,174 --> 00:03:48,902 Aloitetaan motivaatiosta, miksi haluamme tehdä laiteohjelmistoanalyysiä. 34 00:03:48,902 --> 00:03:58,244 Kun puhuin asianajajani kanssa, ymmärsin, että minun täytyy siivota 90 % motivaatiodioistani. 35 00:03:58,244 --> 00:04:06,568 Ja se mitä jää jäljelle, voi tehdä yhteentoimivuuden saavuttamiseksi. 36 00:04:06,568 --> 00:04:10,110 naurua 37 00:04:10,110 --> 00:04:14,791 Voit tehdä sen, jos haluat eroon virheistä, ja valmistaja 38 00:04:14,791 --> 00:04:21,561 ei halua tai ei kykene. Ja eräs mielenkiintoinen seikka 39 00:04:21,561 --> 00:04:29,240 keskustelussa on se, liittyen forensiikkaan, tuhansien laitteiden tutkiminen 40 00:04:29,240 --> 00:04:35,730 päivittäisessä elämässä. Tekevätkö he vain sen, mitä täytyy tehdä? 41 00:04:43,230 --> 00:04:48,030 Herald: Kyllä, mutta silti haemme videoenkelin korjaamaan ongelman. Meillä pitäisi 42 00:04:48,030 --> 00:04:54,123 olla semmoinen täällä yhden minuutin sisällä. Edelleen, pahoittelut. 43 00:05:06,473 --> 00:05:11,986 Meillä on nyt sertifioitu Powerpoint-asiantuntijamme Nick Farr lavalla 44 00:05:11,986 --> 00:05:17,274 aplodit 45 00:05:17,274 --> 00:05:20,114 Se kestää vain minuutteja nyt 46 00:06:06,331 --> 00:06:10,764 Ehkä voimme jatkaa. Joten, kerron mitä edellytyksiä tulisi 47 00:06:10,764 --> 00:06:19,194 olla, kun analysoinnissa lähtee liikkeelle. Sinulla tulisi vähintään olla hyvä tietämys 48 00:06:19,194 --> 00:06:26,081 sulautettujen järjestelmien arkkitehtuurista. Sinun olisi pitänyt käsitellä oheislaitteita, 49 00:06:26,081 --> 00:06:32,223 väyläliitäntöjä ja niin edelleen. Sinun pitäisi pystyä lukemaan 50 00:06:32,223 --> 00:06:35,185 ja kirjoittamaan Assembler-koodia. Jotkut saattavat sanoa: 51 00:06:35,185 --> 00:06:39,196 minulla on todellä hyvä purkuohjelma, mikä on hyvä, 52 00:06:39,196 --> 00:06:45,518 jos se sopii sinulle, mutta, älä luota siihen, että saatavana on purkuohjelma, 53 00:06:45,518 --> 00:06:49,191 joka sopii juuri kyseiseen arkkitehtuuriin, jonka parissa työskentelet 54 00:06:49,191 --> 00:06:55,675 Erityisesti, jos työskentelet matalalla tasolla rekisteriasioiden parissa 55 00:06:55,675 --> 00:07:03,664 Ja mielestäni, purkuohjelman tuotos hämmentää sinua enemmän kuin auttaa 56 00:07:03,664 --> 00:07:12,542 Tulet purkamaan ehkä, C:n ajonaikaisia kirjastoja, jotka on optimoitu olemaan mahdollisimman pieniä 57 00:07:12,542 --> 00:07:18,368 jotka voivat olla todella haastavia purkuohjelman tuotoksessa. 58 00:07:18,368 --> 00:07:28,726 Jos haluat oppia käytännössä miten sulautetut järjestelmät toimivat, voi olla hyvä idea hommata 59 00:07:28,726 --> 00:07:36,340 Arduino tai mikä vaan. Kirjoitat hieman C-koodia, työskentelet laitteistotasolla 60 00:07:36,340 --> 00:07:45,497 Sitten vaan käännät sen ja katsot, miltä purettu näyttää. 61 00:07:45,497 --> 00:07:55,767 On hyvä olla laitelukija tai ohjelmoija, kuten galib. Ongelma on siinä, että ne ovat kalliita. 62 00:07:55,767 --> 00:08:03,931 Jos luulet, että teemme laiteohjelmistoanalyysiä, se voi olla arvokas sijoitus hakkeritilallesi 63 00:08:03,931 --> 00:08:09,330 Ja viimeisenä mutta ei vähäisimpänä, mitä tarvitse eniten, on aikaa. 64 00:08:09,330 --> 00:08:16,511 Aika, aika, aika. Se voi viedä tunteja, päiviä ilman edistystä, joten olkaa kärsivällisiä 65 00:08:20,951 --> 00:08:26,560 naurua 66 00:08:29,680 --> 00:08:35,888 Ketään vapaaehtoisia tekemään dioja tähän? 67 00:08:43,628 --> 00:08:50,974 Vannon, että se toimi täydellisesti ulkoisella monitorillani 68 00:08:50,974 --> 00:09:04,296 Joo? 69 00:09:04,296 --> 00:09:08,305 Joten joudun hakemaan USB-tikkuni, odottakaa hetki. 70 00:09:08,305 --> 00:09:52,524 Ei hätää, olemme joustavia [viheltää] 71 00:10:09,571 --> 00:10:15,257 Onko täällä ketään, jolla olisi tietokonetta lähettyvillä? 72 00:10:15,257 --> 00:10:19,803 Herald: Sillä välin kun selvitämme tätä, on hyvä hetki muistuttaa teitä kaikkia 73 00:10:19,803 --> 00:10:27,505 että etsimme vieläkin joitain enkeleitä. Voisit olla videoenkeli, joille 74 00:10:27,505 --> 00:10:32,699 on kova kysyntä juuri nyt. Tai voisit tehdä haluamiasi töitä. 75 00:10:32,699 --> 00:10:38,189 Voit työskennellä yhdessä tai kahdessa vuorossa. Olisi arvostettavaa 76 00:10:38,189 --> 00:10:49,230 koska tarvitsemme vapaaehtoisia tämän tapahtuman järjestämiseen. Myös, jos toit joitain juomia tänne, 77 00:10:49,230 --> 00:10:54,262 voisi olla hienoa, jos voisit viedä ne pois mukanasi. Ja laittaa ne pieneen 78 00:10:54,262 --> 00:11:01,991 säilytyskoteloon, joita on eri puolilla rakennusta. Luota minuun kun saatte valmiiksi, 79 00:11:01,991 --> 00:11:10,768 voit tehdä tämän tiedotuksen. Onko kaikki kunnossa? Ei oikeastaan. 80 00:11:10,768 --> 00:11:12,539 naurua 81 00:11:12,539 --> 00:11:15,812 Näyttää hyvältä kannettavalla tietokoneella 82 00:11:15,812 --> 00:11:19,184 Haluatko pitää lyhyen esittelyn uudesta Ubuntun työpöytäversiosta? 83 00:11:19,184 --> 00:11:27,888 Koska en hommat tuota ollenkaan. 84 00:11:27,888 --> 00:11:33,403 Joo, peilinäytöt 85 00:11:33,403 --> 00:11:39,708 Neljästä kolmeen diaa 86 00:11:39,708 --> 00:11:41,821 Nyt edistymme 87 00:11:41,821 --> 00:11:45,502 aplodit 88 00:11:45,502 --> 00:11:47,813 Nauttikaa puheesta! 89 00:11:47,813 --> 00:11:51,747 Loistavaa, nyt diojen kanssa. 90 00:11:51,747 --> 00:11:56,981 Pieni tiedotus, puheen lopuksi on 5 lisäminuuttia puhetta. 91 00:11:56,981 --> 00:12:04,203 Tehdään niin. Unohtakaa keltaiset palkit. 92 00:12:04,203 --> 00:12:07,805 naurua 93 00:12:07,805 --> 00:12:18,308 Ei oikeasti. 94 00:12:18,308 --> 00:12:26,333 Korkean tason laitteet. Paljon monimutkaisuutta. Kyllä! 95 00:12:28,563 --> 00:12:31,121 Täydellistä, kiitos, ilman keltaisia palkkeja, kiitos. 96 00:12:31,121 --> 00:12:41,750 Okei. Joten puhuimme ennakkotiedoista, joten syvennymme aiheisiin 97 00:12:41,750 --> 00:12:49,849 Ensiksi, meidän täytyy hankkia laiteohjelmisto. Menemme ei-invasiivisesta invasiiviseen. 98 00:12:49,849 --> 00:12:57,506 Koska ensimmäinen asia, jota haluamme yrittää, on päästä laiteohjelmistoon käsiksi avaamatta laitetta. 99 00:12:57,506 --> 00:13:03,262 Yritämme ensiksi ladata puhtaan binäärin valmistajalta. 100 00:13:03,262 --> 00:13:12,147 Tai joltakulta muulta, joka on purkanut binäärin ja laittanut sen internettiin. 101 00:13:12,147 --> 00:13:19,440 Voit yrittää ladata käynnistyslevyn, USB, CD-ROM, käynnistysmuistitiedoston tai mitä vaan mitä valmistaja tarjoaa 102 00:13:19,440 --> 00:13:25,640 ja purkaa sen, esimerkiksi, WinRARilla Windowsilla tai vaan liittää Linuxiin. 103 00:13:25,640 --> 00:13:34,781 Hae tiedostoja nimeltä .bin, .hex, .s19, .mot kuten Motorola, .rom tai .raw. 104 00:13:34,781 --> 00:13:42,439 Useimmiten binääri, joka tarkoittaa .bin, .rom 105 00:13:42,439 --> 00:13:50,691 Ei-binääritiedostot tulisi muuntaa bin-tiedostoiksi, esimerkiksi muuntimien, kuten hex2bin avulla. 106 00:13:50,691 --> 00:13:55,876 Jos tämä ei toimi, voimme ehkä saada päivitysohjelman valmistajalta 107 00:13:55,876 --> 00:14:00,461 Tavallisesti ne ovat Windowsille tehtyjä .exe-tiedostoja. 108 00:14:00,461 --> 00:14:07,429 On olemassa erilaisia päivitysohjelmiston tyyppejä. Ensinnäkin itsepurkavia arkistoja. 109 00:14:07,429 --> 00:14:12,417 Se voi olla asennusohjelma myös, kuten Installshield tai mikä vain 110 00:14:12,417 --> 00:14:18,973 Se olla päivitysohjelma, yksinkertainen .exe-tiedosto ilman asennuksia, ainoastaan sisältäen levykuvan. 111 00:14:18,973 --> 00:14:25,493 Se saatta olla päivitysohjelma, joka lataa levykuvan tai se saattaa olli jokin muista 112 00:14:25,493 --> 00:14:31,675 mutta pakattu suoritettavalla paketoijalla, kuten UPX tai PECompact. 113 00:14:31,675 --> 00:14:33,487 Mennään hieman yksityiskohtiin. 114 00:14:33,487 --> 00:14:43,000 Joten, jos se on itsepurkautuva arkistohaku allekirjoitukselle, kuten RARSFX tai PK. 115 00:14:43,000 --> 00:14:53,440 Voit purkaa ne, esimerkiksi uudelleennimeämällä PK:n, joka sisältää .zip-tiedoston, jonka voit purkaa. 116 00:14:53,440 --> 00:14:59,223 Jos se on asennusohjelma, kuten Installshield, on olemassa erikoispurkutyökaluja, mutta ongelma on siinä 117 00:14:59,223 --> 00:15:06,153 että ne ovat vaikeakäyttöisiä ja erityisesti versiokohtaisia. Se saattaa toimia tai olla toimimatta. 118 00:15:06,153 --> 00:15:10,994 Paras tapa on vain antaa sen asentaa ja hakea asennetuista tiedostoista 119 00:15:10,994 --> 00:15:20,242 puhdasta levykuvaa tai päivitysohjelmaa. Jos se on päivitysohjelma, joka sisältää laiteohjelmiston levykuvan, 120 00:15:20,242 --> 00:15:26,280 voimme hakea levykuvaa suoritettavasta tiedostosta käyttäen mieleistä heksaeditoriasi. 121 00:15:26,280 --> 00:15:33,678 Ehkä päivitysohjelma kirjoittaa dataa tiedostoon, väliaikaiseen tiedostoon useimmiten ja poistaa 122 00:15:33,678 --> 00:15:40,735 sen käytön jälkeen. Voit käyttää ProcessMonitoria, joka on kuten Strace, mutta Windowsilla. 123 00:15:40,735 --> 00:15:45,903 ja voit katsoa mitä tiedostoja levyllä on kirjoitettu ja yrittää kaapata niitä 124 00:15:45,903 --> 00:15:52,300 ennen kuin ne poistuvat. Ehkä päivitysohjelma vain tarkistaa laitettasi, joten se on 125 00:15:52,300 --> 00:15:57,477 vain pieni latausohjelma. Tarkistamalla laitetyyppisi, vilkaise valmistajan ftp-sivua 126 00:15:57,477 --> 00:16:02,519 ja lataako se levykuvaa, jos sellainen on saatavilla. 127 00:16:02,519 --> 00:16:08,583 Jos se lataa levykuvaa tiedostoon, käytä ProcessMonitoria uudelleen. 128 00:16:08,583 --> 00:16:19,289 Jos se lataa RAM-muistiin, sinun täytyy käyttää debuggeria ja dumpata se muistista. 129 00:16:19,289 --> 00:16:27,297 Jos sinulla on pakattu päivitysohjelma, joka tietenkin on tehty säästämään tilaa. 130 00:16:27,297 --> 00:16:36,520 Jos se on standardi UPX, voit ladata UPX:n ja käyttää "UPX -d":tä purkaaksesi sen. 131 00:16:36,520 --> 00:16:44,145 Joskus valmistaja rikkoo UPX:n lisenssiä ja muokkaa UPX:ää poistamalla 132 00:16:44,145 --> 00:16:51,504 olennaista tietoa tiedostosta, jotta siitä saadaan pakkauskelvoton. Joten sinun tarvitsee käyttää erityistä purkajaa. 133 00:16:51,504 --> 00:17:00,730 Muut suoritettavat pakkaajat ovat useimmiten suunniteltu kompressoimattomiksi. 134 00:17:00,730 --> 00:17:05,377 Tällöin tarvitse erikoispurkajaa myöskin. 135 00:17:05,377 --> 00:17:12,243 Eräs haaste voi tulla siinä, jos päivitysohjelma sisältää kompressoituja levykuvia. 136 00:17:12,243 --> 00:17:20,714 Ne ovat tavallaisesti purettu ennen kuin levykuva on kirjoitettu laitteelle, joten voimme vain katsoa 137 00:17:20,714 --> 00:17:27,245 prosessimuistia debuggerin avulla ja dumpata sen. 138 00:17:27,245 --> 00:17:34,205 Haasteellisempaa on se, kun laiteohjelmisto lähetetään kompressoitavaksi laitteelle 139 00:17:34,205 --> 00:17:40,827 Joten täytyy käyttää invasiivisia tekniikoita, joista puhun myöhemmin 140 00:17:40,827 --> 00:17:47,752 On hyvä laitaa nuuskija valmiiksi, kun ensimmäisen kerran yhdistät laitteen PC-tietokoneeseesi. 141 00:17:47,752 --> 00:17:56,230 Ehkä laitteen mukana tuleva lempi-bloatware haluaa päivittää sen välittömästi 142 00:17:56,230 --> 00:18:04,257 Mitä voit tehdä nuuskiaksesi siirtoja? Windows XP:llä, pahoittelut vain XP:llä, 143 00:18:04,257 --> 00:18:14,313 on TraceSPTI, fantastinen työkalu SPTI SCSI PassThrough Interfacen jäljittämiseen. 144 00:18:14,313 --> 00:18:22,573 Mietit SCSI:tä? Minulla ei ole pelkästään SCSI-laitteita, mutta kommunikoinnista suurin osa on tehty käyttäen 145 00:18:22,573 --> 00:18:33,240 tätä prokollaa Windowsilla. Tunnistaaksesi S/ATA USB -laitteita, etenkin, jos ne ovat ATAPI, 146 00:18:33,240 --> 00:18:39,042 Linux-puolella voit käyttää Wiresharkia jäljittääksesi kommunikaation, koska Wireshark 147 00:18:39,042 --> 00:18:47,308 Linuxilla voi jäljittää ja nuuskia USBia. On myös muita työkaluja, kuten Bushound ja niin edelleen 148 00:18:47,308 --> 00:18:54,752 katsoaaksesi väylien kommunikaatiota. Ongelma on siinä, että ne ovat tavallisesti erittäin kalliita. 149 00:18:54,752 --> 00:19:00,767 Ongelma nuuskiessasi päivityssiirtoa ja rekonstruktoroidessa levykuvaa on se, 150 00:19:00,767 --> 00:19:13,610 että se on kuin pulmapeli. Et tiedä miten levykuva buildataan ja miten se tehdään oikein. 151 00:19:13,610 --> 00:19:20,643 Jos sinulla ei ole laiteohjelmistoa vielä, se voi mennä invasiiviseksi nyt. 152 00:19:20,643 --> 00:19:26,891 Etsimme sarjaliitäntöjä, joskus niihin pääsee käsiksi laitetta avaamatta, 153 00:19:26,891 --> 00:19:33,542 joskus ei. Onko meillä sulautettu Linux-järjestelmä? Kyllä, voimme etsiä sarjakonsolia. 154 00:19:33,542 --> 00:19:42,221 Ehkä meidän täytyy käyttää JTAGia. 27C3:ssa oli hyvä puhe JTAGista, sarjamuotoisesta flashista ja niin edelleen, 155 00:19:42,221 --> 00:19:47,511 joten laitan linkin tähän. 156 00:19:47,511 --> 00:19:53,195 Ei siis vieläkään laiteohjelmistoa? Hae ruuvimeisseli, mitätöidään takuut. 157 00:19:53,195 --> 00:19:58,555 Avaamme laitteen ja etsimme muistilaitteita PCB:stä. 158 00:19:58,555 --> 00:20:07,385 Jos sinulla on todella vanha laite, kohtaat ehkä EPROMseja tai jopa PROMseja, 27-kymppisiä 159 00:20:07,385 --> 00:20:15,233 Jos se on vähän uudempi, saatat nähdä EEPROMseja ja flashia. 28, 29, 39, 49 jotain ja 160 00:20:15,233 --> 00:20:25,947 isoja 48-pinnisiä flash-laitteita, esimerkiksi useille eri nimillä 161 00:20:25,947 --> 00:20:35,507 Mukava nähdä, että sarjamuistit, ne 8-pinniset laitteet 25..., joskus 24... 162 00:20:35,507 --> 00:20:42,989 ovat hiljattain tulossa standardiksi. Niistä on helppo poistaa juotos ja uudelleenjuottaa 163 00:20:42,989 --> 00:20:51,679 ja saatavilla on todella halpoja lukijoita ja ohjelmoijia. Mutta pyydän, vaikka jotkut sanovat, että voimme 164 00:20:51,679 --> 00:21:02,327 tehdä sen järjestelmässä ilman sirun juottamista, älkää tehkö niin. Se voi johtaa todella suuriin ongelmiin. 165 00:21:02,327 --> 00:21:07,632 Jotta asia olisi hieman vaikemapi, laiteohjelmisto voi olla sisällytettynä sirun sisäisiin muisteihin. 166 00:21:07,632 --> 00:21:17,143 Voit käyttää omaa ohjelmointirajapintoja laiteohjelmiston lukemiseen, JTAGIa totta kai. 167 00:21:17,143 --> 00:21:24,389 Joissain laitteissa käynnistyslatausohjelmat ovat naamioidussa ROM-muistissa. Voit yrittää käyttää niitä. 168 00:21:24,389 --> 00:21:29,623 Jos mikään näistä lähestymistavoista ei onnistu, voit yrittää mikroluotausta. 169 00:21:29,623 --> 00:21:38,320 Viime vuoden kongressissa oli puhe matalakustanteisten sirujen mikroluotauksesta, olen 170 00:21:38,320 --> 00:21:46,960 liittänyt linkin tähän. Joten ihan vain siksi, että täydellisyyden vuoksi olen maininnut CPLD:t ja FPGA:t. 171 00:21:46,960 --> 00:21:53,855 Tiedätte, että CPLD:t on rakennettu käyttäen sisäisiä EEPROMeja 172 00:21:53,855 --> 00:22:04,111 FPGA:t, kenttäohjelmoitavilla porttiryhmillä on sisäinen SRAM ja ulkoinen sarjakonfiguraatio-flash. 173 00:22:04,111 --> 00:22:12,411 Joitain vuosia sitten niitä markkinoitiin takaisinmallinnus-kestävinä. Ehkä. 174 00:22:12,411 --> 00:22:22,960 Huomenna on puhe, samaan aikaan uskoisin Saal 2:ssa, FPGA:iden lähemmästä tarkastelusta. 175 00:22:22,960 --> 00:22:29,130 Onneksi olkoon, olemme tehneet sen, meillä on laiteohjelmistomme, täydellistä. 176 00:22:29,130 --> 00:22:33,658 Mitä sitten seuraavaksi, meidän täytyy analysoida se. 177 00:22:33,658 --> 00:22:40,302 Ongelma on siinä, mitä prosessoria käytetään. Emme tiedä mitä purkuohjelmaa käytämme. 178 00:22:40,302 --> 00:22:45,530 Meidän täytyy etsiä netistä tietolehtisiä, jotta saisimme mitä tahansa tietoa. 179 00:22:45,530 --> 00:22:57,622 Voimmeko selvittää mikä prosessori on käytössä? Ongelma usein on, ettei tietolehtisiä löydy. 180 00:22:57,622 --> 00:23:08,378 Valmistaja sanoo, että jost ostat miljoona laitetta vuodessa ja allekirjoitat NDA:n, niin saat tietolehtiset. 181 00:23:08,378 --> 00:23:16,716 Tällöin sinun täytyy olla todella kärsivällinen. Nyt se menee kokeilemiseksi ja erehtymiseksi eri purkuohjelmien kokeilussa. 182 00:23:16,716 --> 00:23:24,297 Voit käyttää tiettyjä purkuohjelmia, mutta ne on rakennettu ainoastaan yhdelle arkkitehtuurille. 183 00:23:24,297 --> 00:23:29,756 Voit käyttää hyvää työkalua, Interactive Disassembleria, IDAa. Siitä on olemassa freeware-versio. 184 00:23:29,756 --> 00:23:37,902 Lisäsin linkin mukaan tämän puheen linkkiosioon, mutta freeware sisältää ainoastaan pienen joukon arkkitehtuureja. 185 00:23:37,902 --> 00:23:46,423 Jos haluat kokonaisen paketin, se tulee todella kalliiksi. Mutta on myös toinen työkalu, josta itse todella pidän. 186 00:23:46,423 --> 00:23:55,050 Se on ODA, the Online Disassembler, tukee noin kolmeakymmentä arkkitehtuuria, ja se on ilmainen. 187 00:23:55,050 --> 00:24:01,477 Voit ladata binääritiedostoja, ladata koodia ja kokeilla eri arkkitehtuureja, 188 00:24:01,477 --> 00:24:07,504 ja selvittää, mikä voisi olla se oikea, ja teemme sen nyt. 189 00:24:07,504 --> 00:24:12,350 Olen valmistellut jotain binäärikoodia. 190 00:24:12,350 --> 00:24:17,521 Tiedän mille arkkitehtuurille se on kirjoitettu, koska tein itse sen. 191 00:24:17,521 --> 00:24:24,537 Laitan koodin Online Disassembleriin ja valitsen eri arkkitehtuureja, 192 00:24:24,537 --> 00:24:28,283 ja katsotaan miltä purku näyttää. 193 00:24:28,283 --> 00:24:36,501 Aloitetaan entisestä Hitachista, nykyinen Renesas, H8S. Toivottavasti pystytte lukemaan tätä. 194 00:24:36,501 --> 00:24:41,538 Ottakaa aikaa ja nostakaa kätenne ylös, jos luulette, että se on kelvollinen purku ja 195 00:24:41,538 --> 00:24:48,299 olemme löytäneet arkkitehtuurimme. 196 00:24:48,299 --> 00:24:53,334 Näen yhden käden. 197 00:24:53,334 --> 00:24:59,589 Okei, valitettavasti joudun tuottamaan pettymyksen, se ei ole kelvollinen purku. Näemme sen toiselta riviltä. 198 00:24:59,589 --> 00:25:06,223 Purkuohjelma ei kyennyt purkamaan dataa ja se on vain määrittelemätön käsky. 199 00:25:06,223 --> 00:25:12,875 Koodissa on useita .word-sanoja. Se ei ole H8S. 200 00:25:12,875 --> 00:25:22,251 Yritetään MIPSiä. Taas ottakaa aikaa ja nostakaa käsi ylös, jos luulette, että se on kelvollinen. 201 00:25:22,251 --> 00:25:27,206 naurua taas? 202 00:25:27,206 --> 00:25:39,480 Se on kelvoton myöskin. Näemme sen toiselta riviltä, koska siellä on dword, jota ei ole purettu. 203 00:25:39,480 --> 00:25:50,690 Miten Panasonic MN103 perhe? Sama käsi taas? Oi, näen toisenkin käden. 204 00:25:50,690 --> 00:25:57,127 Ok, useita käsiä nyt. OK, kiitos. 205 00:25:57,127 --> 00:26:01,220 Ongelma on, ettei se ole validi. Joudun tuottamaan teille pettymyksen. 206 00:26:01,220 --> 00:26:06,786 Tässä tapauksessa ongelma on siinä, että se näyttää todella hyvältä, mutta joudutte kaivamaan syvemmälle. 207 00:26:06,786 --> 00:26:14,020 Teidän täytyy katsoa, ovatko kaikki aliohjelmat oikein. Onko niissä mitään järkeä? 208 00:26:14,020 --> 00:26:17,270 Onko aliohjelmakutsuja ollenkaan ja niin edelleen. 209 00:26:17,270 --> 00:26:23,144 Tulette huomaamaan jotain todella outoa. Viimeinen yritys. 210 00:26:23,144 --> 00:26:28,533 Miten Texas Instruments MSP430? 211 00:26:28,533 --> 00:26:33,258 Ja taas, nostakaa kätenne ylös. 212 00:26:33,258 --> 00:26:40,895 Okei? Joo, tällä kertaa se on MSP430! 213 00:26:40,895 --> 00:26:48,172 Löysimme arkkitehtuurimme, täydellistä, heureka, bingo, meillä on se. 214 00:26:48,172 --> 00:26:56,770 Mitä seuraavaksi? Tiedoston siirtymä, ladatun ohjelmistotiedoston arvo 215 00:26:56,770 --> 00:27:04,850 ei usein ole osoiteavaruuden siirtymä. Tää ei ole ongelma, kun arkkitehtuuri 216 00:27:04,850 --> 00:27:12,030 käyttää suhteellista osoitteistoa. Suhteellinen osoitteisto tarkoittaa, että meillä on rekisterisisältöä ja mitä vain 217 00:27:12,030 --> 00:27:20,130 haluamme käyttää perustuu jonkin rekisterin sisältöön. Sijainnista riippumaton koodi. 218 00:27:20,130 --> 00:27:27,468 Mutta ongelmana on nyt absoluuttisen osoitteiston käyttäminen, ja jopa arkkitehtuurit, 219 00:27:27,468 --> 00:27:36,617 jotka tukevat suhteellista osoitteistoa sisältää jonkin verran absoluuttista osoitteistoa jossain osassa osoitteita. 220 00:27:36,617 --> 00:27:40,893 Emme tiedä, missä on sisäänkäynti. Mistä meidän tulisi aloittaa? 221 00:27:40,893 --> 00:27:47,551 Keskeytysvektorit saatetaan dekoodata kokonaan väärin, aliohjelmakutsuissa ei ole mitään järkeä. 222 00:27:47,551 --> 00:27:54,376 Ne osoittavat meidän laiteohjelmistomme ulkopuolelle, esimerkiksi tai keskelle käskyjä. 223 00:27:54,376 --> 00:28:01,227 Joten kuorman siirto on siis löydettävä. 224 00:28:01,227 --> 00:28:08,909 Näytän teille metodin, jota kutsun "kutsun etäisyyshauksi". 225 00:28:08,909 --> 00:28:15,572 Valitsemelle lähellä olevia aliohjelmaosoitteita ja päätämme, käytämmekö niistä 226 00:28:15,572 --> 00:28:21,959 edeltäviä palautuskäskyjä aliohjelmien edessä vai funktion alussa olevaa 227 00:28:21,959 --> 00:28:31,319 syöttöjärjestystä. Rakennamme hakumerkkijonon sisältäen villikortin, ja sitten haemme 228 00:28:31,319 --> 00:28:36,284 Teemme sen yhdessä, olen valmistellut esimerkin 229 00:28:36,284 --> 00: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ä, 230 00:28:45,771 --> 00:28:53,654 koska se on halpa ja voit tehdä sillä mitä haluat. 231 00:28:53,654 --> 00:29:01,725 Vasemmassa sarakkeessa näemme esimerkkimme osoitteet, 0x00:sta 0x13:een heksaan. 232 00:29:01,725 --> 00:29:13,430 Näemme neljä aliohjelmaa, ensimmäinen juurialiohjelmana kutsuen kolmea muuta aliohjelmaa. 233 00:29:13,430 --> 00:29:23,443 Näemme, että ensimmäinen kutsu 0x100:aan on esimerkkimme ulkopuolella, meillä ei ole 0x100:aa tässä esimerkissä. 234 00:29:23,443 --> 00:29:30,472 Joten otamme kolme aliohjelmaosoitetta ja lajittelemme ne järjestykseen. 235 00:29:30,472 --> 00:29:40,678 Näin ollen, meillä on 0x100, 0x103 ja 0x107. Laskemme erotuksen saadaksemme selville aliohjelmien pituuden. 236 00:29:40,678 --> 00:29:53,443 Saamme 3 tavua ja 4 tavua. Nyt katsomme, miten aliohjelmat on rakennettu tässä tiettyssä arkkitehtuurissa. 237 00:29:53,443 --> 00:30:01,818 x86:lla usein löydätte sen, ei 64-bittisillä alustoilla, mutta 32- ja 16-bittisillä alustoilla. 238 00:30:01,818 --> 00:30:11,500 Löydätte pinokehyksen syöttöjärjestyksen jokaisesta funktiosta, kuten "push bp" tai "push ebp 0x55" 239 00:30:11,500 --> 00:30:15,229 Voitte siis laukaista sen. 240 00:30:15,229 --> 00:30:24,548 8051:llä se ei ole mahdollista. Katsokaa osoitetta 0x0A. Se on 0xE0. 241 00:30:24,548 --> 00:30:28,530 Katsokaa osoitetta 0x0D, se on 44, ja 0x11 on 7B. 242 00:30:28,530 --> 00:30:32,108 Ne eivät vastaa toisiaan, se ei auta meitä. 243 00:30:32,108 --> 00:30:39,690 Tarkastellaan siis edellisiä palautuksia ja kyllä, edessä on palautuksia 244 00:30:39,690 --> 00:30:45,483 jokaisessa aliohjelmassa. Joten otamme 0x22:n [ret] ankkuriksemme. 245 00:30:45,483 --> 00:30:51,259 Hakumerkkijonomme näyttää tältä; Aloitamme 0x22:sta, meillä on 246 00:30:51,259 --> 00:30:56,823 aliohjelma, jonka pituus on kolme tavua, joten meillä on 0x22 [ret], kaksi villikorttia ja 247 00:30:56,823 --> 00:31:04,483 uudelleen palautus. Toinen osa hakumerkkijonosta koodaa toisen 248 00:31:04,483 --> 00:31:13,244 aliohjelman neljällä tavulla. Joten meillä on villikortti, villikortti, villikortti ja uudelleen palautus [0x22] 249 00:31:13,244 --> 00:31:22,383 Tässä yksinkertaisessa esimerkissä saimme vain yhden osuman, täydellistä. Saimme osuman osoitteessa 0x09. 250 00:31:22,383 --> 00:31:27,888 Mutta emme halua palautuksen osoitetta, vaan haluamme aliohjelman osoitteen 251 00:31:27,888 --> 00:31:33,447 joten emme käytä 0x09:ä, vaan käytämme 0x0A:ta 252 00:31:33,447 --> 00:31:40,662 Otamme alkuperäisen kohdeosoitteen 0x0100, puramme 0x0A 253 00:31:40,662 --> 00:31:49,411 ja saamme koodiesimerkkimme perusosoitteen, joka on 0xF6 254 00:31:49,411 --> 00:31:58,392 Jos sovellamme tätä äskettäin havaittua kuorman siirtoa koodiin ja muutamme siirtymää 255 00:31:58,392 --> 00:32:06,430 aloittaen nyt 0x00F6:sta vasemmassa sarakkeessa näemme, että kaikki kolme aliohjelmaa nyt täsmäävät. 256 00:32:06,430 --> 00:32:14,706 Kutsu 0x0100:aan, kutsu 0x0107:aan ja kutsu 0x013:een. 257 00:32:14,706 --> 00:32:22,706 Ok, mielestäni tämä oli vaikea, joten toistetaan se, mitä olemme jo tehneet 258 00:32:22,706 --> 00:32:30,647 Olemme saaneet levykuvamme, olemme onnistuneesti löytäneet prosessoriarkkitehtuurin, 259 00:32:30,647 --> 00:32:35,143 olemme löytäneet purkuohjelman, jolla puramme laiteohjelmiston, 260 00:32:35,143 --> 00:32:43,746 ja toivottavasti löytäneet alkuperäinen kuoram siirtymän. Joten mitä seuraavaksi 261 00:32:43,746 --> 00:32:49,358 Ehkä kysymys herää, onko laitteella lisälaiteohjelmistoa? 262 00:32:49,358 --> 00:32:56,254 Näen hyppyjä ja kutsuja tietämämme laiteohjelmiston ulkopuolelle, vaikka juuri säädimme 263 00:32:56,254 --> 00:33:02,446 kuorman siirtymää. Onko siru sisäinen? Näemme sen kuvasta, ehkä 264 00:33:02,446 --> 00:33:10,387 meillä on ainoastaan laiteohjelmiston osa A. Ja ehkä se käyttää kirjastoa tai sirun sisäistä osaa B. 265 00:33:10,387 --> 00:33:18,900 Joten meidän täytyy katsoa, mitä voimme tehdä käyttäen laiteohjelmiston muutosta. 266 00:33:18,900 --> 00:33:26,843 Nyt kun tämä on tehty, voimme aloittaa koodin normaalin takaisinmallinnuksen. 267 00:33:26,843 --> 00:33:31,537 Haemme merkkijonoja, haemme viittauksia merkkijonoihin, 268 00:33:31,537 --> 00:33:39,353 mutta koska olemme todella matalla sulautetussa järjestelmässä, voimme ehkä hakea hyvin erikoistuneita, 269 00:33:39,353 --> 00:33:48,580 dataviittauksia ja operandeja. Hae USB-kuvauskenttiä, jotka olet poiminut /lib/lsusb-ohjelmalla 270 00:33:48,580 --> 00:33:55,228 Katso USB-magiaa, kuten USBC ja USBS, tiedät, että näitä kahta dwordia käytetään 271 00:33:55,228 --> 00:34:03,727 USB-kommunikoinnissa. Katso IDEa, SATAa ja ATAPI ID merkkijonoja ja sano samalla: 272 00:34:03,727 --> 00:34:15,761 "Olen OCZ SSD -laite" esimerkiksi. Kun olet nuuskinut laitekommunikointia 273 00:34:15,761 --> 00:34:21,920 olet jo löytänyt joitain tyypillisiä tietolohkoja. Voit yrittää etsiä niitä [binääristä] 274 00:34:21,920 --> 00:34:28,145 Viimeisenä, muttei vähäisimpänä, laite on ehkä antanut joitain virhekoodeja, ja voit etsiä merkkijonoja 275 00:34:28,145 --> 00:34:33,887 tai operandeja opkoodeissa. 276 00:34:33,887 --> 00:34:38,954 On todella mielenkiintoista löytää piilotettuja laiteohjelmistopäivitysjonoja, koska 277 00:34:38,954 --> 00:34:47,220 ne voivat sallia ei-invasiivisen muokkaamisen. Esimerkiksi hae sirun pyyhkimis- ja 278 00:34:47,220 --> 00:34:51,870 ohjelmointikomentoja, voit poimia asianmukaisia komentoja tietolehtisestä 279 00:34:51,870 --> 00:35:01,519 jos käytettävissä on jokin ulkoinen muistilaite. Olemme tehneet analyysin ja olemme 280 00:35:01,519 --> 00:35:07,917 oppineet paljon laitteesta. Nyt aiomme mukauttaa sitä. 281 00:35:07,917 --> 00:35:14,320 Ensiksi, meidän täytyy miettiä. Jos aiomme muuttaa laiteohjelmistoa, meidän pitää 282 00:35:14,320 --> 00:35:19,687 valmistautua muuraamaan laitteemme. 283 00:35:19,687 --> 00:35:25,042 Valmistajat toteuttavat useita eheystarkistuksia, ja miksi he tekevät niin? 284 00:35:25,042 --> 00:35:34,766 Sen takia, koska laiteohjelmisto tallennetaan flashiin, joka on altis vanhenemiselle, varsinkin, jos siihen liittyy lämpöä. 285 00:35:34,766 --> 00:35:42,409 He tekevät tarkistussummia. On olemassa ohjelmistopohjaisia tarkissumman laskentamenetelmiä, CRC esimerkiksi. 286 00:35:42,409 --> 00:35:48,537 On olemassa jopa laitteistopohjaisia tarkistussumia, joissa jokin HW-oheislaite tekee työn puolestamme. 287 00:35:48,537 --> 00:35:57,179 Koodissa näkyy siis alku- ja loppusiirtymä, sekä polynomi, jos olet onnekas. 288 00:35:57,179 --> 00:36:03,656 Se voi myös olla kovakoodattuna oheislaitteeseen, jotta en näkisi mitään. 289 00:36:03,656 --> 00:36:13,168 Se voi olla yhdistelmä molempia, pelkästään käynnistyksen yhteidessä tai syklisesti taustalla. 290 00:36:13,168 --> 00:36:18,739 Mitä meidän on tehtävä muuttaaksemme laiteohjelmistoa? Joko korjata nämä tarkistussummat, 291 00:36:18,739 --> 00:36:26,140 tai korjata ne tarkistussumma-algoritmit, jotta ne eivät käynnisty. 292 00:36:26,140 --> 00:36:32,309 Mitkä ovat muutostyömme tavoitteet, tietysti kuulimme sen motivaatio-osassa. 293 00:36:32,309 --> 00:36:44,751 Olemme korjaamassa virheitä, ja ehkäpä virheet sisältyvät sirun toiseen osaan, jota meillä ei 294 00:36:44,751 --> 00:36:51,369 ole tällä hetkellä. Ehkä meidän täytyy dumpata lisämuistialueita. 295 00:36:51,369 --> 00:37:02,249 Sitä he tekivät Cisco VoIP -hakkeroinnissa. He yrittivät löytää memcpy-rutiinin ja käyttää sitä. 296 00:37:02,249 --> 00:37:08,551 Jos et löydä memcpy-rutiinia, voit ehkä totetuttaa oman version. Miksei? 297 00:37:08,551 --> 00:37:15,892 Voitte dumpata koodia toisilta muistialueilta ulostulopuskureille. 298 00:37:15,892 --> 00:37:20,427 Jos sinulla ei ole tilaa ulkoisella muistilaitteella, mikset ohjelmoisi sitä laitteelle 299 00:37:20,427 --> 00:37:29,918 ja lukisi sitä laitteelta. Se voi olla todella mielenkiintoista kerätä lisää laitteen sisäistä tietoa. 300 00:37:29,918 --> 00:37:36,561 Esimerkiksi RAM-dumpin kanssa, koska staattista analyysiä tehdessä, mietit aina 301 00:37:36,561 --> 00:37:48,435 mitä RAMissa on tässä ja tuossa osoitetteessa. Nyt kun olemme mukauttaneet laiteohjelmistoa, 302 00:37:48,435 --> 00:37:53,960 voimme pistää sen takaisin laitteeseen. Esimerkiksi käyttämällä alkuperäistä päivitysohjelmistoa. 303 00:37:53,960 --> 00:37:58,437 Se saattaa sisältää jotain tarkistussumman tarkastuksia, ken tietää. 304 00:37:58,437 --> 00:38:06,598 Voimme yrittää uudelleenohjelmoida sen mahdollisesti saatavilla olevaan muistilaitteeseen, tai prosessoriin. 305 00:38:06,598 --> 00:38:14,163 Tämä voi olla tehty käyttäen sarjaliitäntää, joko JTAGia tai oheislaitteita. 306 00:38:14,163 --> 00:38:17,967 Siinäpä se. Kiitos paljon. 307 00:38:17,967 --> 00:38:25,766 aplodit 308 00:38:25,766 --> 00:38:36,093 Angel: Jos teillä on kysymyksiä, järjestäytykää tilassa olevien mikrofonien eteen, täällä on neljä niitä. 309 00:38:42,573 --> 00:38:47,125 Onko mitään kysymyksiä? Mikrofoni 1 kiitos; 310 00:38:47,125 --> 00:38:54,427 Kysymys: Ei ole kysymys, vaan vinkki. Jos tarvitset jotain binääridumppia tai vastaavaa tiedostoylijäämää Windowsille 311 00:38:54,427 --> 00:39:06,456 voit kieltää poisto-oikeuden, joten asennus- tai päivitysohjelmisto ei pysty poistamaan sen väliaikaisia tiedostoja. 312 00:39:06,456 --> 00:39:08,858 Joten ne jäävät laitteelle uudelleenohjelmoinnin jälkeen. 313 00:39:08,858 --> 00:39:10,733 A: Onko sinulla vinkkiä, mitä käyttää siinä tapauksessa? 314 00:39:10,733 --> 00:39:11,723 Q: Anteeksi? 315 00:39:11,723 --> 00:39:14,262 A: Onko sinulla vinkkiä siitä, onko tähän olemassa erikoistyökalua? 316 00:39:14,262 --> 00:39:18,902 Q: Se ei ole välttämätön, se on Windowsissa sisäänrakennettuna valmiiksi. 317 00:39:18,902 --> 00:39:20,422 A: OK 318 00:39:20,422 --> 00:39:26,622 Q: Ja en tiedä sanaa. 319 00:39:26,622 --> 00:39:27,506 A: OK 320 00:39:27,506 --> 00:39:34,288 Q: Mutta voit peruuttaa oikeudet kokonaan hakemistosta, poistamiseen on olemassa oma erikoisoikeus. 321 00:39:34,288 --> 00:39:37,407 A: OK, kiitos. 322 00:39:37,407 --> 00:39:42,603 Angel: Onko enää lisää kysymyksiä? 323 00:39:46,603 --> 00:39:50,631 Angel: Ei näytä siltä. Antakaa lämpimät suosionosoitukset puhujallemme Stefan Widmannille. 324 00:39:50,631 --> 00:39:54,821 aplodit A: Päällä [mikrofoni 2] 325 00:39:54,821 --> 00:39:57,465 Angel: On vielä yksi kysymys... Ei? 326 00:39:57,465 --> 00:39:59,546 A: OK 327 00:39:59,546 --> 00:40:02,878 Angel: Kun poistutte, ottakaa... 328 00:40:02,878 --> 00:40:11,092 [Translated by Markus Kallatsa (KYBS2001 course assignment at JYU.FI)]