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)]