Aigo enkrĂŒpteeritud vĂ€listingimustes olevate mĂ€luseadmete tagasivaatamine ja hĂ€kkimine on olnud minu pikaajaline hobi. Varem olen uurinud selliseid mudeleid nagu Zalman VE-400, Zalman ZM-SHE500, Zalman ZM-VE500. Hiljuti tĂ”i kolleeg mulle veel ĂŒhe eksponaadi: Patriot (Aigo) SK8671, mis on ehitatud tĂŒĂŒpilise kujunduse jĂ€rgi â LCD-ekraan ja PIN-koodi sisestamiseks klaviatuur. Selline tulemus saiâŠ

1. Sissejuhatus

Korpus

Pakend
PÀÀs salvestatud andmetele, mis on vĂ€idetavalt krĂŒpteeritud, toimub pĂ€rast PIN-koodi sisestamist. MĂ”ned sissejuhatavad mĂ€rkused selle seadme kohta:
- PIN-koodi muutmiseks tuleb enne avamist vajutada F1;
- PIN-kood peab sisaldama 6 kuni 9 numbrit;
- PĂ€rast 15 vale katset kustutatakse ketas.
2. Riistvaraarhitektuur
Esiteks avame seadme osadeks, et mĂ”ista, millistest komponentidest see koosneb. KĂ”ige tĂŒĂŒtum tegevus on korpuse avamine: palju mikroskoopilisi kruvi ja plastikut. Korpuse avades nĂ€eme jĂ€rgmist (pange tĂ€hele minu poolt jootetud viiekontaktilist pesa):

2.1. Emaplaat
Emaplaat on ĂŒsna lihtne:

Selle silmapaistvamad osad (vt ĂŒlalt alla):
- LCD-ekraani pesa (CN1);
- kÔlar (SP1);
- Pm25LD010 () SPI-mÀlu (U2);
- Jmicron JMS539 () USB-SATA jaoks (U1);
- USB 3 pesa (J1).
SPI-mÀlu salvestab JMS539 jaoks tarkvara ja mÔned seaded.
2.2. LCD-ekraani plaat
LCD-plaadil ei ole midagi tÀhelepanuvÀÀrset.


Lihtsalt:
- Tundmatu pÀritolu LCD-ekraan (tÔenÀoliselt Hiina fondikomplektiga); jÀrjestikune juhtimine;
- lintĂŒhendus klaviatuuriplaadile.
2.3. Klaviatuuriplaat
Klaviatuuriplaadi vaatamisel muutub olukord huvitavamaks.

Siin, tagakĂŒljel, nĂ€eme lintĂŒhendust ja Cypress CY8C21434 â PSoC 1 mikrokontrolerit (edaspidi nimetame seda lihtsalt PSoC-iks)

CY8C21434 kasutab M8C kĂ€su komplekti (vt. ). [Tootearuandes]( () on mĂ€rgitud, et see toetab tehnoloogiat (Cypress'i lahendus puutetundlike klaviatuuride jaoks). Siin on nĂ€htav minu joodetud viie kontaktiga pistik â see on standardne lĂ€henemine vĂ€lise programmeerija ĂŒhendamiseks ISSP-liidese kaudu.
2.4. Vaata kaableid
Selgitame, mida siin kokku on ĂŒhendatud. Selleks on piisav, kui mÔÔta kaablite kontinentsiooniga multimeeteriga:

Selgitused sellele joonistatud skeemile:
- PSoC on kirjeldatud tehnilises spetsifikatsioonis;
- jĂ€rgmine pistik, mis on paremal â ISSP-liidese, mis mingil moel vastab sellele, mis sellest Internetis on kirjutatud;
- kĂ”ige parempoolne pistik â see on klemm lintĂŒhendajale klaviatuuriplaadiga;
- must ristkĂŒlik â CN1 pistiku joonis, mis on mĂ”eldud pĂ”hjaplaadi ĂŒhendamiseks LCD-plaat. P11, P13 ja P4 â on ĂŒhendatud PSoC-i jalgadele 11, 13 ja 4, LCD-plaat.
3. RĂŒnnaku sammude jĂ€rjestus
NĂŒĂŒd, kui teame, millistest komponentidest see mĂ€luseade koosneb, peame: 1) veenduma, et baasfunktsionaalsus krĂŒpteerimise jaoks on tĂ”eliselt olemas; 2) vĂ€lja selgitama, kuidas genereeritakse/salvestatakse krĂŒpteerimisvĂ”tmed; 3) leidma, kus tĂ€pselt kontrollitakse PIN-koodi.
Selleks tegin jÀrgmised sammud:
- vÔtsin SPI-mÀlukiibi andmeid dump'ida;
- ĂŒritasin PSoC-mĂ€lukiibi andmeid dump'ida;
- veendusin, et andmevahetus Cypress PSoC-i ja JMS539 vahel sisaldab tÔeliselt vajutatud klahve;
- veendusin, et parooli muutmise korral SPI-mĂ€lukiibi andmeid ei kirjutata ĂŒmber;
- olin liiga laisk, et ĂŒmber pöörata JMS539 8051 pĂŒsivara.
3.1. SPI-mÀlukiibi andmete dumping
See protseduur on vÀga lihtne:
- ĂŒhendage sondid mĂ€lukiibi jalgadele: CLK, MOSI, MISO ja (valikuline) EN;
- "nuusutades" suhtlemist snifferiga, kasutades loogikaanalĂŒsaatorit (kasutasin );
- dekodeerida SPI-protokolli ja eksportida tulemusi CSV formaati;
- kasutada , et analĂŒĂŒsida tulemusi ja saada dump.
Pange tĂ€hele, et see lĂ€henemine JMS539 kontrolleri puhul töötab eriliselt hĂ€sti, kuna see kontroller laadib algatamise etapis kogu pĂŒsivara mĂ€lukiibist.
$ 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 dumpSPI-flash'ilt mĂ€rkides jĂ”udsin jĂ€reldusele, et selle ainus ĂŒlesanne on salvestada JMicroni juhtimisseadme pĂŒsivara, mis on integreeritud 8051 mikrokontrollerisse. Kahjuks osutus SPI-flashi vĂ€ljajĂ”udmine kasutu:
- PIN-koodi muutmisel jÀÀb flash'i dump samaks;
- seadme SPI-flash'i juurde ei pöörduta algatustsĂŒkli jooksul.
3.2. Uurime kommunikatsioone
See on ĂŒks viise, kuidas leida, milline kiip vastutab, et kontrollida kommunikatsioone, huvitavaid aegu/sisu. Nagu juba teame, on USB-SATA kontroller ĂŒhendatud LCD Cypress PSoC-iga, lĂ€bi CN1 pesade ja kahe ribaga. SeetĂ”ttu ĂŒhendame sondid kolme vastava jalaga:
- P4, ĂŒldine sisse/t vĂ€lja;
- P11, I2C SCL;
- P13, I2C SDA.

SeejĂ€rel kĂ€ivitan loogilise analĂŒsaatori Saleae ja sisestan klaviatuuril: "123456~". Tulemuseks on jĂ€rgmine diagramm.

Sellelt vÔime nÀha kolme andmevahetuse kanalit:
- kanalil P4 mitu lĂŒhikest piiksumist;
- P11 ja P13 â peaaegu pidev andmevahetus.
Suurendades esimest piiksumist kanalil P4 (sinine ristkĂŒlik eelmisel joonisel), nĂ€eme jĂ€rgmist:

Siit nĂ€eme, et P4-l on peaaegu 70ms ĂŒhtlane signaal, mis tundus mulle algul sĂŒnkroone signalina. Kuid pĂ€rast mĂ”ningast aega oma oletuse kontrollimisel avastasin, et see ei ole sĂŒnkroone signaal, vaid helivoog, mis antakse vĂ€lja hÀÀlitsi, kui klahve vajutatakse. Seega ei sisalda see signaali osa meie jaoks kasulikku informatsiooni. Siiski saab seda kasutada indikaatorina â et teada hetke, mil PSoC registreerib klahvi vajutamist.
Kuid P4 kanali viimane helivoog erineb natuke teistest: see on heli «vale PIN-kood» jaoks!
Tagasi klahvide vajutamise diagrammi juurde, kui suurendame viimase helivooga diagrammi (vt uuesti sinine ristkĂŒlik), saame:

Siin nĂ€eme ĂŒhtlaseid signaale P11-l. Tundub, et see ongi sĂŒnkroone signaal. Ja P13 â andmed. Pange tĂ€hele, kuidas mustri muutub pĂ€rast helisignaali lĂ”ppu. Oleks huvitav nĂ€ha, mis siin toimub.
Protokollid, mis töötavad kahe juhtmega, on tavaliselt SPI vÔi I2C, ja Cypressi tehnilises spetsifikatsioonis öeldakse, et need kontaktid vastavad I2C-le, mis nagu nÀeme kehtib ka meie puhul:

USB-SATA chipset constantly polls the PSoC to read the state of the key, which is by default "0". Then, when the key "1" is pressed, it changes to "1". The final transmission, just after pressing â~â, differs if an incorrect PIN code is entered. However, at this point, I haven't checked what is actually transmitted there. But I suspect it's unlikely to be the encryption key. Anyway, see the next section to understand how I extracted the firmware dump from the PSoC.
Allikas: habr.com
