Return to Video

An introduction to Firmware Analysis

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

Finnish subtitles

Revisions Compare revisions