A külső öntitkosító meghajtók visszafejtése és feltörése régóta a hobbim. A múltban már dolgoztam olyan modellekkel, mint a Zalman VE-400, Zalman ZM-SHE500, Zalman ZM-VE500. Nemrégiben a kollégám hozott nekem egy újabb példányt: Patriot (Aigo) SK8671, amely tipikus dizájn alapján készült – LCD-kijelző és billentyűzet a PIN-kód beírásához. Itt van, ami ebből született...

1. Bevezetés

Tokat

Csomagolás
A lemezen tárolt, állítólag titkosított adatokhoz való hozzáférés a PIN-kód megadását követően lehetséges. Néhány megjegyzés erről a készülékről:
- A PIN-kód módosításához az F1-et kell nyomni a feloldás előtt;
- A PIN-kódnak 6 és 9 számjegy között kell lennie;
- 15 helytelen próbálkozás után a lemez törlődik.
2. Hardver architektúra
Először szét kell szednünk a készüléket, hogy megértsük, milyen alkatrészekből áll. A legunalmasabb rész a ház kinyitása: sok apró csavar és műanyag. A ház felnyitása után a következőket láthatjuk (figyeljen a nekem forrasztott ötpinű csatlakozóra):

2.1. Alaplap
Az alaplap meglehetősen egyszerű:

A legfigyelemreméltóbb részei (lásd fölülről lefelé):
- LCD-kijelző csatlakozó (CN1);
- hangszóró (SP1);
- Pm25LD010 () SPI-flash (U2);
- Jmicron JMS539 () USB-SATA vezérlő (U1);
- USB 3 csatlakozó (J1).
Az SPI flash tárolja a JMS539 firmware-jét és néhány beállítást.
2.2. LCD-kijelző panel
Az LCD panelen nincs semmi figyelemre méltó.


Csak:
- Ismeretlen eredetű LCD-kijelző (valószínűleg egy kínai betűtípus készlettel); soros vezérlés;
- szalagcsatlakozó a billentyűzet panelhez.
2.3. Billentyűzet panel
A billentyűzet panel megvizsgálásakor a helyzet érdekes fordulatot vesz.

Itt, a hátsó oldalon, látjuk a szalagcsatlakozót és a Cypress CY8C21434 – PSoC 1 mikrokontrollert (a továbbiakban PSoC-ként említjük)

A CY8C21434 M8C utasításkészletet használ (lásd. ). A [termékoldalon]( () azt mondják, hogy támogatja a (a Cypress megoldása, érintésérzékeny billentyűzetekhez). Itt látható az általam forrasztott ötpinű csatlakozó – ez a szabványos megközelítés a külső programozó csatlakoztatásához az ISSP interfészen keresztül.
2.4. Vizsgáljuk meg a vezetékeket
Nézzük meg, hogy mi van itt összekötve. Ehhez elegendő, ha multiméterrel átmérjük a vezetékeket:

Magyarázatok a vázlatos ábrához:
- A PSoC a műszaki specifikációban van leírva;
- a következő csatlakozó, ami jobbra van – ISSP interfész, ami az interneten leírtakkal megegyezik;
- a legjobb oldalon lévő csatlakozó – a billentyűzet táblájához csatlakozó sávkábel érintkezője;
- a fekete téglalap – a CN1 csatlakozó vázlata, amely a főlap és a LCD-tábla összekapcsolására szolgál. P11, P13 és P4 – a PSoC 11, 13 és 4 lábaival van összekötve a LCD-táblán.
3. A támadás lépései
Most, hogy tudjuk, hogy ezekből a komponensekből áll az eszköz, meg kell tennünk a következőket: 1) győződjünk meg arról, hogy a titkosítás alapvető funkciója valóban jelen van; 2) megtudni, hogyan generálják/tárolják a titkosítási kulcsokat; 3) kideríteni, hogy hol ellenőrzik a PIN-kódot.
Ehhez a következő lépéseket tettem:
- kiválasztottam az SPI flash memória adatait;
- megpróbáltam lekérni a PSoC flash memória adatait;
- meggyőződtem arról, hogy a Cypress PSoC és a JMS539 közötti adatcsere valójában tartalmazza a benyomott billentyűket;
- ellenőriztem, hogy a jelszó megváltoztatásakor az SPI flash memória nem ír felül semmit;
- túlságosan lusta voltam ahhoz, hogy visszafejlesszem a JMS539 8051 firmware-t.
3.1. Az SPI flash memória adatainak lekérdezése
Ez a folyamat nagyon egyszerű:
- csatlakoztassuk a szondákat a flash memória lábaihoz: CLK, MOSI, MISO és (opcionálisan) EN;
- a kommunikációk „meghallgatása” egy logikai elemző segítségével (én a következőt használtam: );
- dekódoljuk az SPI protokollt és exportáljuk az eredményeket CSV-be;
- használjuk a , hogy elemezzük az eredményeket és megkapjuk a dump-ot.
Vegye figyelembe, hogy ez a megközelítés a JMS539 vezérlő esetében különösen jól működik, mivel ez a vezérlő az inicializálás során az egész firmware-t betölti a flash memóriából.
$ decode_spi.rb boot_spi1.csv dump
0.039776 : WRITE DISABLE
0.039777 : JEDEC READ ID
0.039784 : ID 0x7f 0x9d 0x21
---------------------
0.039788 : READ @ 0x0
0x12,0x42,0x00,0xd3,0x22,0x00,
[...]
$ ls --size --block-size=1 dump
49152 dump
$ sha1sum dump
3d9db0dde7b4aadd2b7705a46b5d04e1a1f3b125 dumpMiután lekértem az SPI flash memória dumpját, arra a következtetésre jutottam, hogy az egyetlen feladata a JMicron vezérlő firmware-jének tárolása, amely 8051 mikrokontrollerbe van beépítve. Sajnos az SPI flash memória dumpjának lekérése haszontalannak bizonyult:
- a PIN-kód megváltoztatásakor a flash memória dump ugyanaz marad;
- az inicializálási szakasz után az eszköz nem lép kapcsolatba az SPI flash memóriával.
3.2. Kommunikációk átvizsgálása
Ez az egyik módja annak, hogy megtaláljuk, melyik chip felelős a kommunikációk ellenőrzéséért, az érdekes időszakok/kon텐츠 számára. Ahogy már tudjuk, a USB-SATA vezérlő a Cypress PSoC LCD-hez csatlakozik, a CN1 csatlakozón és két szalagon keresztül. Ezért csatlakoztatjuk a szondákat a megfelelő három lábra:
- P4, általános bemenet/kimenet;
- P11, I2C SCL;
- P13, I2C SDA.

Ezután elindítjuk a Saleae logikai analizátort, és a billentyűzeten beírjuk: "123456~". Az eredmény egy következő diagram.

Ezen láthatjuk a három adatátviteli csatornát:
- az P4-en néhány rövid impulzus;
- az P11-en és P13-on – majdnem folyamatos adatátvitel.
Az első impulzus felnagyításával P4-en (az előző ábra kék téglalapja), a következőt látjuk:

Itt látható, hogy P4-en majdnem 70 ms egyforma jel van, amelyről elsőre úgy tűnt, hogy szinkronjelként funkcionál. Azonban, miután egy kis időt eltöltöttem a sejtésem ellenőrzésével, felfedeztem, hogy ez nem szinkronjel, hanem audiofolyam, amely a gomb megnyomásakor szól a hangszórón. Így ez a jelző szakasz nem tartalmaz hasznos információt számunkra. Ugyanakkor indikátorként használható - hogy tudjuk, mikor rögzíti a PSoC a gomb megnyomását.
Azonban a P4 csatorna utolsó audiofolyama kissé eltér a többitől: ez a "rossz PIN-kód" hangja!
Visszatérve a gombnyomás diagramjához, a legutolsó audiofolyamtól (lásd újra a kék téglalapot) kinagyítva:

Itt egységes jeleket látunk P11-en. Tehát úgy tűnik, hogy ez a szinkronjel. És P13 – az adatok. Figyelje meg, hogyan változik a minta a hangjelzés végén. Érdekes lenne megnézni, mi történik itt.
A kétvezetékkel működő protokollok általában SPI vagy I2C, és a Cypress műszaki specifikációja azt írja, hogy ezek a lábak I2C-nek felelnek meg, ami láthatóan a mi esetünkben is helytálló:

A USB-SATA vezérlő folyamatosan lekérdezi a PSoC-ot, hogy olvassa a gomb állapotát, amely alapértelmezés szerint "0". Ezután, amikor a gomb "1" van megnyomva, az "1"-re változik. A végső átadás, közvetlenül a "~" megnyomása után, eltér, ha helytelen PIN-kódot adtak meg. Jelenleg azonban nem ellenőriztem, hogy valójában mi is kerül átadásra. De gyanítom, hogy valószínűleg nem titkosító kulcsról van szó. Mindenesetre nézd meg a következő részt, hogy megértsd, hogyan szedtem ki a belső PSoC firmware-t.
Forrás: habr.com
