ProHoster > Blog > Uprava > Obračanje in vdiranje zunanjega trdega diska Aigo s samošifriranjem. 1. del: Razstavljanje na dele
Obračanje in vdiranje zunanjega trdega diska Aigo s samošifriranjem. 1. del: Razstavljanje na dele
Obračanje in hekanje zunanjih samošifrirnih pogonov je moj stari hobi. V preteklosti sem imel priložnost vaditi z modeli Zalman VE-400, Zalman ZM-SHE500, Zalman ZM-VE500. Ravno pred kratkim mi je kolega prinesel še en eksponat: Patriot (Aigo) SK8671, ki je narejen po tipski zasnovi - LCD indikator in tipkovnica za vnos PIN kode. To je tisto, kar je prišlo iz tega …
Dostop do podatkov, shranjenih na disku, ki naj bi bil šifriran, se izvede po vnosu PIN kode. Nekaj uvodnih opomb o tej napravi:
Če želite spremeniti kodo PIN, morate pred odklepanjem pritisniti F1;
PIN koda mora vsebovati od 6 do 9 števk;
Po 15 nepravilnih poskusih je disk počiščen.
2. Arhitektura strojne opreme
Najprej napravo razčlenimo na dele, da razumemo, iz katerih komponent je sestavljena. Najbolj dolgočasno opravilo je odpiranje ohišja: veliko mikroskopskih vijakov in plastike. Ko odpremo ohišje, vidimo naslednje (bodite pozorni na petpolni konektor, ki sem ga spajkal):
2.1. Glavna plošča
Glavna plošča je precej preprosta:
Njegovi najpomembnejši deli (glej od zgoraj navzdol):
Krmilnik Jmicron JMS539 (specifikacijo) za USB-SATA (U1);
priključek USB 3 (J1).
Bliskovni pogon SPI shrani vdelano programsko opremo za JMS539 in nekatere nastavitve.
2.2. LCD indikatorska plošča
Na plošči LCD ni nič posebnega.
Samo:
LCD indikator neznanega izvora (verjetno z nastavljeno kitajsko pisavo); s sekvenčnim nadzorom;
Trakasti konektor za tipkovnico.
2.3. Plošča s tipkovnico
Pri pregledu tipkovnice se stvari obrnejo bolj zanimivo.
Tu na hrbtni strani vidimo trakasti konektor ter mikrokrmilnik Cypress CY8C21434 PSoC 1 (v nadaljevanju ga bomo preprosto imenovali PSoC).
CY8C21434 uporablja nabor navodil M8C (glejte dokumentacijo). Na [stran izdelka]( (http://www.cypress.com/part/cy8c21434-24ltxi) je označeno, da podpira tehnologijo CapSense (rešitev podjetja Cypress, za kapacitivne tipkovnice). Tukaj lahko vidite petpolni konektor, ki sem ga spajkal - to je standardni pristop za povezavo zunanjega programatorja prek vmesnika ISSP.
2.4. Gledam žice
Ugotovimo, kaj je tukaj povezano. Če želite to narediti, samo preizkusite žice z multimetrom:
Razlage za ta diagram, narisan na kolenu:
PSoC je opisan v tehnični specifikaciji;
naslednji priključek, tisti na desni, je vmesnik ISSP, ki po volji usode ustreza temu, kar o njem piše na internetu;
Skrajni desni priključek je priključek za trakasti priključek na tipkovnico;
Črni pravokotnik je risba konektorja CN1, namenjenega povezovanju glavne plošče z LCD ploščo. P11, P13 in P4 so priključeni na nožice PSoC 11, 13 in 4 na plošči LCD.
3. Zaporedje korakov napada
Zdaj, ko vemo, iz katerih komponent je sestavljen ta pogon, moramo: 1) zagotoviti, da je osnovna funkcija šifriranja dejansko prisotna; 2) ugotovite, kako se generirajo/shranjujejo šifrirni ključi; 3) poiščite, kje natančno bo preverjena koda PIN.
Da bi to naredil, sem naredil naslednje korake:
naredil izpis podatkov iz bliskovnega pogona SPI;
poskušal izpisati podatke iz bliskovnega pogona PSoC;
preveril, da komunikacija med Cypress PSoC in JMS539 dejansko vsebuje pritiske tipk;
Prepričal sem se, da pri spreminjanju gesla nič ni prepisano na bliskovnem pogonu SPI;
je bil prelen, da bi obrnil vdelano programsko opremo 8051 iz JMS539.
3.1. Izpis podatkov iz bliskovnega pogona SPI
Ta postopek je zelo preprost:
priključite sonde na noge bliskovnega pogona: CLK, MOSI, MISO in (neobvezno) EN;
»vohanje« komunikacije z vohalnikom z uporabo logičnega analizatorja (uporabil sem Saleae Logic Pro 16);
dekodiranje protokola SPI in izvoz rezultatov v CSV;
izkoristite decode_spi.rbda razčlenimo rezultate in pridobimo izpis.
Upoštevajte, da ta pristop še posebej dobro deluje v primeru krmilnika JMS539, saj ta krmilnik naloži vso vdelano programsko opremo z bliskovnega pogona v fazi inicializacije.
Ko sem vzel odlagališče iz bliskovnega pogona SPI, sem prišel do zaključka, da je njegova edina naloga shranjevanje vdelane programske opreme za krmilno napravo JMicron, ki je vgrajena v mikrokrmilnik 8051. Na žalost se je izpis bliskovnega pogona SPI izkazal za neuporabnega:
ko se koda PIN spremeni, izpis bliskovnega pogona ostane enak;
Po fazi inicializacije naprava ne dostopa do bliskovnega pogona SPI.
3.2. Vohanje komunikacij
To je eden od načinov, kako ugotoviti, kateri čip je odgovoren za preverjanje komunikacije glede časa/vsebine, ki vas zanima. Kot že vemo, je krmilnik USB-SATA povezan s Cypress PSoC LCD prek konektorja CN1 in dveh trakov. Zato priključimo sonde na tri ustrezne noge:
P4, splošni vhod/izhod;
P11, I2C SCL;
P13, I2C SDA.
Nato zaženemo logični analizator Saleae in na tipkovnici vnesemo: “123456~”. Kot rezultat vidimo naslednji diagram.
Na njem vidimo tri kanale za izmenjavo podatkov:
na kanalu P4 je več kratkih izbruhov;
na P11 in P13 - skoraj neprekinjena izmenjava podatkov.
Če približamo prvo konico na kanalu P4 (modri pravokotnik na prejšnji sliki), vidimo naslednje:
Tukaj lahko vidite, da je na P4 skoraj 70ms monotonega signala, ki se mi je sprva zdel v vlogi signala ure. Vendar sem po tem, ko sem nekaj časa preverjal svoje ugibanje, odkril, da to ni signal ure, ampak zvočni tok, ki se ob pritisku na tipke odda v visokotonec. Zato ta del signala sam po sebi ne vsebuje koristnih informacij za nas. Lahko pa se uporablja kot indikator, da vemo, kdaj PSoC zabeleži pritisk tipke.
Vendar pa je najnovejši zvočni tok P4 nekoliko drugačen: to je zvok za "neveljavno kodo PIN"!
Če se vrnemo na graf pritiskov tipk in povečamo zadnji graf zvočnega toka (spet glej modri pravokotnik), dobimo:
Tukaj vidimo monotone signale na P11. Torej izgleda, da je to signal ure. In P13 so podatki. Opazite, kako se vzorec spremeni po koncu piska. Zanimivo bi bilo videti, kaj se bo zgodilo tukaj.
Protokoli, ki delujejo z dvema žicama, so običajno SPI ali I2C, tehnična specifikacija na Cypressu pa navaja, da ti zatiči ustrezajo I2C, kar vidimo, da je res v našem primeru:
Nabor čipov USB-SATA nenehno preverja PSoC, da prebere stanje ključa, ki je privzeto »0«. Nato, ko pritisnete tipko "1", se spremeni v "1". Končni prenos takoj po pritisku na “~” je drugačen, če je vnesena napačna koda PIN. Nisem pa trenutno preveril, kaj se tam dejansko prenaša. Vendar sumim, da to verjetno ni šifrirni ključ. Kakor koli že, glejte naslednji razdelek, če želite razumeti, kako sem odstranil notranjo vdelano programsko opremo PSoC.