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