Reversing and hacking external self-encrypting drives has been a long-standing hobby of mine. In the past, I have experimented with models such as Zalman VE-400, Zalman ZM-SHE500, and Zalman ZM-VE500. Recently, a colleague brought me another specimen: Patriot (Aigo) SK8671, which is built on a typical design – an LCD indicator and a keyboard for entering a PIN code. Here's what I discovered…

1. Úvod

Korpus

Packaging
Access to the data saved on the disk, which is allegedly encrypted, occurs after entering the PIN code. Here are a few introductory notes regarding this device:
- To change the PIN code, you must press F1 before unlocking;
- The PIN code must consist of 6 to 9 digits;
- After 15 incorrect attempts, the drive is wiped.
2. Hard Architecture
First, we dismantle the device into parts to understand what components it consists of. The most tedious task is opening the case: many microscopic screws and plastic. After opening the case, we see the following (notice the 5-pin connector I soldered):

2.1. Motherboard
The motherboard is quite simple:

Its most notable parts (see from top to bottom):
- connector for the LCD indicator (CN1);
- buzzer (SP1);
- Pm25LD010 () SPI flash chip (U2);
- Jmicron JMS539 controller () for USB-SATA (U1);
- USB 3 connector (J1).
The SPI flash chip stores the firmware for JMS539 and some settings.
2.2. LCD Indicator Board
There's nothing remarkable on the LCD board.


Just:
- an LCD indicator of unknown origin (probably from a Chinese font kit); controlled serially;
- a ribbon connector for the keyboard board.
2.3. Keyboard Board
Upon examining the keyboard board, things take a more interesting turn.

Here, on the back side, we see a ribbon connector, as well as the Cypress CY8C21434 – a PSoC 1 microcontroller (from now on, we will simply call it PSoC)

The CY8C21434 uses the M8C instruction set (see. ). On the [product page]( () it is stated that it supports the (Cypress solution for capacitive keyboards). Here, you can see the 5-pin connector I soldered – this is a standard approach for connecting an external programmer via the ISSP interface.
2.4. Podíváme se na kabely
Pojďme zjistit, co je s čím spojené. K tomu stačí otestovat kabely multimetr:

Vysvětlení k tomuto načrtnutému schématu:
- PSoC je popsán v technické specifikaci;
- další konektor, ten napravo – ISSP rozhraní, které je širší veřejnosti známo tak, jak je uvedeno na internetu;
- nejpravejší konektor – je to svorkovnice pro párové spojení s klávesnicí;
- černý obdélník – schéma konektoru CN1, určeného k propojení základní desky s LCD deskou. P11, P13 a P4 jsou připojeny k pinům PSoC 11, 13 a 4 na LCD desce.
3. Attack Steps Sequence
Nyní, když víme, z jakých komponentů se toto zařízení skládá, musíme: 1) ujistit se, že základní funkčnost šifrování je skutečně přítomna; 2) zjistit, jak jsou generovány/uloženy šifrovací klíče; 3) najít, kde se kontroluje PIN kód.
K tomu jsem provedl následující kroky:
- vyjmul jsem dump dat z SPI flash;
- pokoušel jsem se vyjmout dump dat z PSoC flash;
- ujistil jsem se, že výměna dat mezi Cypress PSoC a JMS539 skutečně obsahuje stisknuté klávesy;
- ujistil jsem se, že při změně hesla se na SPI flash nic nepřepisuje;
- byl jsem příliš líný na to, abych prováděl reverzní inženýrství 8051 firmwaru od JMS539.
3.1. Získání dumpu dat z SPI flash
Tento postup je velmi jednoduchý:
- připojit sondy k pinům flash: CLK, MOSI, MISO a (volitelně) EN;
- analyzovat komunikace se snifferem, pomocí logického analyzátoru (já použil );
- dešifrovat SPI protokol a exportovat výsledky do CSV;
- využít , aby se parser výstupy a získal dump.
Všimněte si, že tento přístup u JMS539 kontroleru funguje obzvláště dobře, protože tento kontroler během inicializace načítá z flash veškerý firmware.
$ 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 dumpPo získání dumpu ze SPI flash jsem dospěl k závěru, že její jedinou úlohou je uchovávat firmware pro řadič JMicron, který je integrován do 8051 mikrokontroléru. Bohužel získání dumpu ze SPI flash se ukázalo jako bezcenné:
- při změně PIN kódu zůstává dump flash stejný;
- po fázi inicializace zařízení na SPI flash neprovádí žádné dotazy.
3.2. Analyzujeme komunikace
Toto je jeden ze způsobů, jak zjistit, který čip odpovídá za kontrolu komunikací, pro specifický čas/obsah. Jak už víme, řadič USB-SATA je připojen k LCD Cypress PSoC prostřednictvím konektoru CN1 a dvou pásek. Proto připojujeme sondy k těmto třem odpovídajícím pinům:
- P4, obecný vstup/výstup;
- P11, I2C SCL;
- P13, I2C SDA.

Poté spustíme logický analyzátor Saleae a na klávesnici zadáme: “123456~”. Výsledkem je následující diagram.

Na něm můžeme vidět tři kanály přenosu dat:
- na kanálu P4 několik krátkých impulsů;
- na P11 a P13 – téměř nepřetržitý přenos dat.
Zvětšením prvního impulsu na kanálu P4 (modrý obdélník z předchozího obrázku) vidíme následující:

Zde je vidět, že na P4 je téměř 70 ms jednotného signálu, který se na první pohled zdál jako synchronizační signál. Po chvíli se mi však podařilo ověřit moji domněnku, že to není synchronizační signál, ale audio tok, který se přehrává na reproduktoru při stisknutí kláves. Tento úsek signálu tedy sám o sobě neobsahuje pro nás užitečné informace. Lze ho však použít jako indikátor, abychom věděli, kdy PSoC registruje stisk klávesy.
Avšak poslední audio tok na kanálu P4 se mírně liší od ostatních: je to zvuk pro „špatný pin kód“!
Když se vrátíme k diagramu stisknutí kláves, po zvětšení diagramu posledního audio toku (viz opět modrý obdélník) dostaneme:

Zde vidíme jednotné signály na P11. Takže se zdá, že to je synchronizační signál. A P13 – data. Všimněte si, jak se vzor mění po skončení zvukového signálu. Bylo by zajímavé vidět, co se zde děje.
Protokoly pracující se dvěma vodiči jsou obvykle SPI nebo I2C, a v technické specifikaci pro Cypress je uvedeno, že tyto piny odpovídají I2C, což je, jak vidíme, pravdivé i pro náš případ:

Čipset USB-SATA neustále skenuje PSoC – aby načítal stav tlačítka, které je ve výchozím nastavení „0“. Poté, když je stisknuto tlačítko „1“, změní se na „1“. Konečný přenos, ihned po stisknutí “~” se liší, pokud je zadán nesprávný PIN kód. Dosud jsem však neověřoval, co se tam skutečně přenáší. Ale podezřívám, že to těžko bude klíč k šifrování. Tak či onak, podívejte se na další část, abyste pochopili, jak jsem extrahoval interní firmware PSoC.
Zdroj: habr.com
