"Kulankhulana" ndi microcontroller kungatanthauze zinthu zosiyanasiyana: kuchokera ku "wogulitsa kwa wogulitsa" kuti agwirizane pogwiritsa ntchito serial protocol (mwachitsanzo, ICSP ya Microchip's PIC).
Cypress ili ndi protocol yakeyake ya izi, yotchedwa ISSP (in-system serial programming protocol), yomwe imafotokozedwa pang'ono specifications luso. Mtengo wa US7185162 imaperekanso zina. Palinso chofanana ndi OpenSource chotchedwa HSSP (tigwiritsa ntchito pakapita nthawi). ISSP imagwira ntchito motere:
yambitsaninso PSoC;
kutulutsa nambala yamatsenga ku pini ya data ya PSoC iyi; kulowa kunja mapulogalamu mumalowedwe;
tumizani malamulo, omwe ndi zingwe zazitali zotchedwa "vectors".
Zolemba za ISSP zimatanthauzira ma vector awa pamalamulo ochepa chabe:
Ma vector onse ali ndi kutalika kofanana: 22 bits. Zolemba za HSSP zili ndi zina zowonjezera pa ISSP: "Veta ya ISSP sichake koma kungotsatizana komwe kumayimira malangizo angapo."
5.2. Demystifying Vectors
Tiye tione zimene zikuchitika apa. Poyambirira, ndimaganiza kuti ma vector omwewo anali matembenuzidwe a M8C yaiwisi, koma nditayang'ana lingaliro ili, ndidapeza kuti ma opcode amachitidwewo sanagwirizane.
Kenako ndidatsegula google pa vector pamwambapa ndipo ndidawona izi Kafukufuku amene wolemba, ngakhale kuti sanafotokoze mwatsatanetsatane, amapereka malangizo othandiza: "Langizo lirilonse limayamba ndi zidutswa zitatu zomwe zimagwirizana ndi chimodzi mwa mamnemonics anayi (kuwerenga kuchokera ku RAM, kulemba ku RAM, kuwerenga kaundula, kulemba kaundula). Kenako pali ma adilesi 8, otsatiridwa ndi ma data 8 (werengani kapena lembani) ndipo pomaliza amasiya atatu. β
Kenako ndinatha kutola mfundo zothandiza kwambiri pagawo la Supervisory ROM (SROM). Buku laukadaulo. SROM ndi ROM yolimba kwambiri mu PSoC yomwe imapereka ntchito zofunikira (mofanana ndi Syscall) pamakhodi apulogalamu omwe akuyenda mu malo ogwiritsa ntchito:
00h: SWBootReset
01h: ReadBlock
02h: WriteBlock
03h: EraseBlock
06h: TableRead
07h: CheckSum
08h: Sinthani0
09h: Sinthani1
Poyerekeza mayina a vector ku ntchito za SROM, titha kupanga mapu osiyanasiyana omwe amathandizidwa ndi protocol iyi ku magawo omwe akuyembekezeredwa a SROM. Chifukwa cha izi, titha kudziwa magawo atatu oyamba a ma vector a ISSP:
100 => "mzere"
101 => "rdmem"
110 => "Zolakwika"
111 => "kubwerera"
Komabe, kumvetsetsa kwathunthu kwa njira za pa-chip kumatha kupezeka pokhapokha polumikizana mwachindunji ndi PSoC.
5.3. Kulumikizana ndi PSoC
Popeza Dirk Petrautsky ali kale kunyamula Khodi ya HSSP ya Cypress pa Arduino, ndidagwiritsa ntchito Arduino Uno kulumikizana ndi cholumikizira cha ISSP cha bolodi la kiyibodi.
Chonde dziwani kuti mkati mwa kafukufuku wanga, ndidasintha kachidindo ka Dirk pang'ono. Mutha kupeza zosintha zanga pa GitHub: apa ndi zolemba zofananira za Python zolankhulana ndi Arduino, m'malo anga cypress_psoc_tools.
Chifukwa chake, pogwiritsa ntchito Arduino, ndinayamba kugwiritsa ntchito ma vector "ovomerezeka" a "kulumikizana". Ndinayesa kuwerenga ROM yamkati pogwiritsa ntchito lamulo la VERIFY. Monga ndimayembekezera, sindinathe kuchita zimenezi. Mwinamwake chifukwa chakuti ma bits otetezera amawerengedwa amatsegulidwa mkati mwa flash drive.
Pogwiritsa ntchito vekitala iyi (onani read_security_data mu psoc.py), timapeza ma bits onse achitetezo mu SRAM pa 0x80, pomwe pali ma bits awiri pa block yotetezedwa.
Zotsatira zake zimakhala zokhumudwitsa: chirichonse chimatetezedwa mu "kulepheretsa kuwerenga ndi kulemba kunja" mode. Choncho, sitingathe kuwerenga chilichonse kuchokera pagalimoto, koma sitingathe kulemba chilichonse (mwachitsanzo, kukhazikitsa ROM dumper kumeneko). Ndipo njira yokhayo yoletsera chitetezo ndikuchotsa chip chonsecho. π
6. Kuukira koyamba (kolephera): ROMX
Komabe, titha kuyesa chinyengo chotsatirachi: popeza tili ndi kuthekera kochita ma opcode osagwirizana, bwanji osapanga ROMX, yomwe imagwiritsidwa ntchito powerenga flash memory? Njirayi ili ndi mwayi wabwino wopambana. Chifukwa ntchito ya ReadBlock yomwe imawerenga deta kuchokera ku SROM (yomwe imagwiritsidwa ntchito ndi ma vector) imayang'ana ngati imatchedwa ISSP. Komabe, opcode ya ROMX mwachidziwikire sangakhale ndi cheke chotere. Chifukwa chake nayi nambala ya Python (mutawonjezera makalasi othandizira ochepa ku code ya Arduino):
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
Tsoka ilo code iyi sikugwira ntchito. π Kapena m'malo mwake zimagwira ntchito, koma pazotulutsa timapeza ma opcode athu (0x28 0x30 0x40)! Sindikuganiza kuti magwiridwe antchito a chipangizocho ndi gawo lachitetezo chowerengera. Izi zili ngati chinyengo chaumisiri: pochita ma opcode akunja, basi ya ROM imasinthidwa kupita ku buffer kwakanthawi.
Ntchito yotsimikizira cheke. Imawerengera cheke cha 16-bit cha kuchuluka kwa midadada yodziwika ndi ogwiritsa ntchito mu flash bank imodzi, kuyambira paziro. BLOCKID parameter imagwiritsidwa ntchito kudutsa chiwerengero cha midadada yomwe idzagwiritsidwe ntchito powerengera cheke. Mtengo wa "1" umangowerengera cheke pa block zero; pomwe "0" idzapangitsa kuti cheke chonse cha midadada 256 ya banki ya flash iwerengedwe. Chekeni ya 16-bit imabwezedwa kudzera pa KEY1 ndi KEY2. Gawo la KEY1 limasunga ma 8 bits a cheke, ndipo gawo la KEY2 limasunga ma bits 8 apamwamba. Pazida zomwe zili ndi mabanki angapo a Flash, ntchito ya checksum imayitanidwa pa chilichonse padera. Nambala ya banki yomwe idzagwire nayo ntchito imayikidwa ndi kaundula wa FLS_PR1 (pokhazikitsa pang'ono momwemo molingana ndi banki yomwe mukufuna).
Dziwani kuti iyi ndi cheke chosavuta: ma byte amangowonjezeredwa chimodzi pambuyo pa chimzake; palibe zovuta za CRC. Kuphatikiza apo, podziwa kuti maziko a M8C ali ndi kaundula kakang'ono kwambiri, ndimaganiza kuti powerengera cheke, zikhalidwe zapakatikati zidzalembedwa pazosintha zomwezo zomwe pamapeto pake zidzatuluka: KEY1 (0xF8) / KEY2 ( 0xf9 pa.
Chifukwa chake m'malingaliro anga kuwukira kwanga kumawoneka motere:
Timalumikizana kudzera pa ISSP.
Timayamba kuwerengetsa cheke pogwiritsa ntchito vekita ya CHECKSUM-SETUP.
Timayambiranso purosesa pambuyo pa nthawi yodziwika T.
Timawerenga RAM kuti tipeze cheke C.
Bwerezani masitepe 3 ndi 4, ndikuwonjezera T pang'ono nthawi iliyonse.
Izi zikunenedwa, tili ndi vuto: popeza tikugwira ntchito ndi cheke chenicheni, null byte sisintha mtengo wowerengedwa. Komabe, popeza ndondomeko yonse yowerengera (8192 byte) imatenga masekondi a 0,1478 (ndi kusinthasintha pang'ono nthawi iliyonse yomwe ikuyendetsedwa), zomwe zimafanana ndi pafupifupi 18,04 ΞΌs pa byte, tingagwiritse ntchito nthawiyi kuti tiwone mtengo wa checksum pa nthawi yoyenera. Pakuthamanga koyamba, zonse zimawerengedwa mosavuta, chifukwa nthawi yowerengera nthawi zonse imakhala yofanana. Komabe, kutha kwa kutaya uku sikulondola kwenikweni chifukwa "zopatuka zazing'ono" pamayendedwe aliwonse zimawonjezera kuti zikhale zofunikira:
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
Ndiko kutaya 10 pakuchedwa kwa microsecond iliyonse. Nthawi yonse yogwiritsira ntchito kutaya ma byte onse 8192 a flash drive ndi pafupifupi maola 48.
7.3. Kumanganso bayinare kung'anima
Sindinamalize kulemba kachidindo kamene kangakonzenso kachidindo ka pulogalamu ya flash drive, poganizira zopatuka nthawi zonse. Komabe, ndabwezeretsa kale chiyambi cha code iyi. Kuti nditsimikizire kuti ndachichita bwino, ndidachichotsa pogwiritsa ntchito 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
Kenako ndidasintha nambala ya PIN kuchoka ku "123456" kukhala "1234567" ndikupeza:
Chifukwa chake, nambala ya PIN ndi zoyeserera zolakwika zikuwoneka kuti zasungidwa mu block No. 126.
7.5. Kutenga tayira chipika nambala 126
Block #126 iyenera kupezeka penapake mozungulira 125x64x18 = 144000ΞΌs, kuyambira koyambira kuwerengetsa cheke, pakutaya kwanga konse, ndipo zikuwoneka zomveka. Kenako, nditatha kusefa pamanja malo ambiri osavomerezeka (chifukwa cha kuchuluka kwa "zolakwika zazing'ono zanthawi"), ndidapeza ma byte awa (pa latency ya 145527 ΞΌs):
Ndizodziwikiratu kuti nambala ya PIN imasungidwa m'njira yosadziwika! Mfundozi, ndithudi, sizinalembedwe mu zizindikiro za ASCII, koma momwe zimakhalira, zimasonyeza zowerengedwa zomwe zatengedwa pa kiyibodi ya capacitive.
Pomaliza, ndidayesanso mayeso ena kuti ndipeze pomwe zida zoyeserera zoyipa zidasungidwa. Zotsatira zake ndi izi:
Popeza SROM mwina amawerenga alonda alonda kudzera pa ReadBlock system call, titha kuchita zomwezo anafotokoza pa blog ya Dmitry Nedospasov - kukhazikitsidwanso kwa kuwukira kwa Chris Gerlinski, adalengeza pamsonkhanowu. "REcon Brussels 2017".
Chinthu chinanso chosangalatsa chomwe chingachitike ndikuchotsa mlanduwo kuchokera ku chip: kutenga dambo la SRAM, kuzindikira mafoni osadziwika komanso zovuta.
9. Kutsiliza
Choncho, chitetezo cha galimotoyi chimasiya zambiri, chifukwa chimagwiritsa ntchito microcontroller yokhazikika (osati "youma") kusunga PIN code ... Komanso, sindinayang'ane (komabe) momwe zinthu zikuyendera ndi deta. kubisa pa chipangizo ichi!
Kodi mungapangire chiyani za Aigo? Nditasanthula mitundu ingapo ya ma drive osungidwa a HDD, mu 2015 ndidapanga ulaliki pa SyScan, momwe adawunikiranso zovuta zachitetezo cha ma drive angapo akunja a HDD, ndikupanga malingaliro pazomwe zingawongoleredwe. π