Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

Molweni nonke.

Thina, uViktor Antipov kunye no-Ilya Aleshin, namhlanje siya kuthetha ngamava ethu asebenza kunye nezixhobo ze-USB ngePython PyUSB kunye nomncinci malunga nobunjineli obubuyisela emuva.

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

ukubuzwa

Ngo-2019, ummiselo kaRhulumente we-Russian Federation No. ngokunxulumene nemveliso yecuba” yaqalisa ukusebenza.
Olu xwebhu lucacisa ukuba ukusukela nge-1 kaJulayi 2019, abavelisi kufuneka babhale ipakethe nganye yecuba. Kwaye abasasazi ngokuthe ngqo kufuneka bafumane ezi mveliso ngokuqhutywa koxwebhu lokudluliselwa kwehlabathi (UDD). Iivenkile, nazo, kufuneka zibhalise ukuthengiswa kweemveliso ezibhalwe ngerejista yemali.

Kwakhona, ukusukela nge-1 kaJulayi, 2020, ukuhanjiswa kweemveliso zecuba ezingabhalwanga akuvumelekanga. Oku kuthetha ukuba zonke iipakethi zecuba kufuneka ziphawulwe ngebhakhowudi ekhethekileyo yeDathamatrix. Ngaphezu koko - ingongoma ebalulekileyo - kwavela ukuba i-Datamatrix ayiyi kuba yinto eqhelekileyo, kodwa inverse. Oko kukuthi, hayi ikhowudi emnyama kumhlophe, kodwa ngokuphambeneyo.

Sivavanye iiskena zethu, kwaye kwafumaniseka ukuba uninzi lwazo lufuna ukuphinda lukhanyiselwe/ luphinde luqeqeshwe, kungenjalo alunakukwazi ukusebenza ngokwesiqhelo ngale bhakhowudi. Olu tshintsho lweziganeko luye lwasiqinisekisa ukuba sinentloko ebuhlungu, kuba inkampani yethu ineevenkile ezininzi ezithe saa kumhlaba omkhulu. Amashumi aliqela amawaka eerejista zemali - kunye nexesha elincinci kakhulu.

Kwakuza kwenziwa ntoni? Zimbini iinketho. Okokuqala: iinjineli ezikwisiza zikhanyisa kwakhona kwaye zihlengahlengise iiskena. Okwesibini: sisebenza ukude kwaye, ngokukhethekileyo, sigquma iiskena ezininzi ngexesha elinye.

Inketho yokuqala, ngokucacileyo, yayingafanelekanga kuthi: kuya kufuneka sichithe imali kwiinjineli zokutyelela, kwaye kulo mzekelo kuya kuba nzima ukulawula nokulungelelanisa inkqubo. Kodwa eyona nto ibalulekileyo kukuba abantu bangasebenza, oko kukuthi, sinokufumana iimpazamo ezininzi kwaye, kunokwenzeka, singawufikeleli umhla obekiweyo.

Inketho yesibini ilungile kumntu wonke, ukuba ayikho into enye. Abanye abathengisi babengenazo izixhobo ezidanyazayo ezikude ebesizifuna kuzo zonke iinkqubo zokusebenza ezifunekayo. Kwaye njengoko amaxesha ayephelile, kwafuneka ndicinge ngentloko yam.

Okulandelayo, siya kukuxelela indlela esiphuhlise ngayo izixhobo zokuskena ngesandla kwi-Debian 9.x OS (zonke iirejista zethu zemali zikwiDebian).

Sombulula iqhina: indlela yokudanyazisa iskena

Iingxelo zikaVictor Antipov.

Usetyenziso olusemthethweni olunikezelwe ngumthengisi lusebenza phantsi kweWindows, kwaye kuphela nge-IE. Isixhobo sinokudanyaza kwaye siqwalasele iskena.

Ekubeni inkqubo yethu ekujoliswe kuyo yi-Debian, sifake iseva ye-usb-redirector kwi-Debian kunye ne-usb-redirector client kwi-Windows. Sisebenzisa i-usb-redirector utility, sathumela iskena ukusuka kumatshini weLinux ukuya kumatshini weWindows.

Into eluncedo evela kumthengisi weWindows yabona iskena kwaye yade yasibaneka ngokuqhelekileyo. Ngaloo ndlela, senze isigqibo sokuqala: akukho nto ixhomekeke kwi-OS, ngumcimbi weprotocol ekhanyayo.

KULUNGILE. Sibalekise ukukhanya kumatshini weWindows, kwaye sasusa inkunkuma kumatshini weLinux.

Sifake inkunkuma kwi-WireShark kwaye ... saba lusizi (ndizakushiya ezinye zeenkcukacha zokulahla, azinamdla).

Isibonise ntoni ukulahla:

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

Iidilesi ze-0000-0030, ngokugweba nge-Wireshark, zinkcukacha zenkonzo ye-USB.

Sasinomdla kwinxalenye 0040-0070.

Akukho nto yayicacile kwisakhelo esinye sothumelo ngaphandle koonobumba be-MOCFT. Aba balinganiswa bajike baba ngabalinganiswa kwifayile ye-firmware, kunye nabalinganiswa abaseleyo kude kube sekupheleni kwesakhelo (ifayile ye-firmware iphawuliwe):

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

Yintoni iisimboli fd 3e 02 01 fe yayithetha, mna ngokwam, njengo-Ilya, ndandingazi.

Ndajonga kwisakhelo esilandelayo (ulwazi lwenkonzo lususiwe apha, ifayile ye-firmware iphawulwe):

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

Yintoni eyacacayo? Ukuba ii-byte ezimbini zokuqala luhlobo oluthile lokuhlala rhoqo. Zonke iibhloko ezilandelayo zikuqinisekisile oku, kodwa ngaphambi kokuphela kwebhloko yothumelo:

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

Esi sakhelo sasisithukuthezi, kuba into etshintshileyo yayitshintshile (igqanyisiwe) kwaye, ngokungaqhelekanga, kwakukho inxalenye yefayile. Ubungakanani beebhayithi ezigqithiselweyo zefayile zibonise ukuba i-1024 bytes idluliselwe. Andizange ndiphinde ndiyazi ukuba ii-bytes eziseleyo zithetha ukuthini.

Okokuqala, njengesidlaliso esidala se-BBS, ndiye ndaphonononga iiprothokholi zosulelo olusemgangathweni. Akukho protocol idluliselwe 1024 bytes. Ndiqale ukufunda ihardware kwaye ndadibana neprotocol ye-1K Xmodem. Kwavumela ukuhanjiswa kwe-1024, kodwa nge-caveat: ekuqaleni kuphela i-128, kwaye kuphela ukuba akukho ziphoso, iprotocol yandisa inani leebhayithi ezithunyelwayo. Ndakhawuleza ndanokudluliselwa kwe-1024 bytes. Ndigqibe ekubeni ndifunde iiprothokholi zothumelo, kwaye ngokukodwa i-X-modem.

Kwakukho iinguqu ezimbini zemodem.

Okokuqala, ifomathi yephakheji ye-XMODEM enenkxaso ye-CRC8 (i-XMODEM yoqobo):

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

Okwesibini, ifomathi yepakethe yeXMODEM enenkxaso yeCRC16 (XmodemCRC):

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

Kubonakala kufana, ngaphandle kwe-SOH, inombolo yephakheji kunye ne-CRC kunye nobude bephakheji.

Ndajonga ekuqaleni kwebhloko yesibini yothumelo (kwaye kwakhona ndabona ifayile ye-firmware, kodwa sele ifakwe ngaphakathi nge-1024 bytes):

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

Ndabona i-header eqhelekileyo fd 3e 02, kodwa ii-byte ezimbini ezilandelayo sele zitshintshile: kwaba 01 fe, kwaye yaba 02 fd. Emva koko ndaqaphela ukuba ibhloko yesibini ngoku yayinombolo ye-02 kwaye ngaloo ndlela yaqondwa: phambi kwam kwakukho inani lebhloko yothumelo. Isixhobo sokuqala se-1024 ngu-01, okwesibini ngu-02, okwesithathu ngu-03 njalo njalo (kodwa kwi-hex, kunjalo). Kodwa kuthetha ukuthini ukutshintsha ukusuka kwi-fe ukuya kwi-fd? Amehlo abona ukuncipha ngo-1, ingqondo yakhumbuza ukuba abadwelisi babala ukusuka ku-0, kungekhona 1. Kodwa ke kutheni ibhloko yokuqala ye-1, kwaye ingekho i-0? Andikayifumani impendulo yalo mbuzo. Kodwa ndaqonda ukuba ibhloko yesibini ibalwa njani. Ibhloko yesibini ayikho ngaphezu kwe-FF - (minus) inani lebhloko yokuqala. Ngaloo ndlela, ibhloko yesibini yonyulwa njenge = 02 (FF-02) = 02 FD. Ukufundwa kwendawo yokulahla kwaqinisekisa uqikelelo lwam.

Emva koko lo mfanekiso ulandelayo wothumelo waqala ukuvela:

Ukuqala kosasazo
fd 3e 02 – Qala
01 FE – ikhawuntara yothumelo
Ukudluliselwa (iibhloko ezingama-34, iibhayithi ezingama-1024 zigqithiselwe)
fd 3e 1024 bytes yedatha (yahlulwe kwiibhloko ze-30 byte).
Ukuphela kosulelo
fd 25

Idatha eseleyo kufuneka ilungelelaniswe ne-1024 bytes.

Ingaba isakhelo sokuphela sosasazo lwebhloko sijongeka njani:

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

fd 25 – uphawu lokuphelisa usulelo lwebhloko. Okulandelayo 2f 52 - yonke ifayile ukuya kuthi ga kwi-1024 bytes ngobukhulu. I-2f 52, ngokugweba ngeprotocol, yi-16-bit CRC checksum.

Ngenxa yamaxesha amandulo, ndenze inkqubo kwi-C ekhupha i-1024 bytes kwifayile kwaye yabala i-16-bit CRC. Ukuqaliswa kwenkqubo kubonise ukuba oku akusiyo i-16-bit CRC. Stupor kwakhona - malunga neentsuku ezintathu. Ngalo lonke eli xesha bendizama ukuqonda ukuba inokuba yintoni na, ukuba akuyiyo itshekhi. Ngelixa ndifunda iisayithi zolwimi lwesiNgesi, ndiye ndafumanisa ukuba i-X-modem isebenzisa eyakho i-checksum calculation - CRC-CCITT (XModem). Khange ndifumane nakuphi na ukuphunyezwa kwe-C kolu balo, kodwa ndifumene indawo ebale le checksum kwi-intanethi. Emva kokuhambisa i-1024 bytes yefayile yam kwiphepha lewebhu, isayithi indibonise itshekhi ehambelana ngokupheleleyo ne-checksum esuka kwifayile.

Uxolo! Iqhina lokugqibela lasonjululwa, ngoku bendifuna ukuzenzela eyam i-firmware. Emva koko, ndadlulisela ulwazi lwam (kwaye lwahlala kuphela entlokweni yam) ku-Ilya, oqhelene nesixhobo esinamandla sePython.

Ukwenza inkqubo

U-Ilya Aleshin uxela.

Emva kokuba ndifumene imiyalelo efanelekileyo, “ndonwabe” kakhulu.

Ndiqale ngaphi? Injalo, kwasekuqaleni.  Ukusuka ekuthatheni indawo yokulahla kwizibuko le-USB.

Qalisa i-USB-pcap https://desowin.org/usbpcap/tour.html

Khetha i-port apho isixhobo sidibaniswe kunye nefayile apho siya kugcina ukulahla.

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

Siqhagamshela iskena kumatshini apho isoftware yemveli ye-EZConfigScanning yeeWindows ifakelwe.

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

Kuyo sifumana into yokuthumela imiyalelo kwisixhobo. Kodwa kuthekani ngamaqela? Ndingazifumana phi?
Xa inkqubo iqala, isixhobo sivotelwa ngokuzenzekelayo (siya kukubona oku kamva kancinci). Kwaye kwakukho iibhakhowudi zoqeqesho ezivela kumaxwebhu ezixhobo ezisemthethweni. UKUSILELA. Eli liqela lethu.

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

Idatha eyimfuneko ifunyenwe. Vula i-dump.pcap nge-wireshark.

Vimba xa uqalisa i-EZConfigScanning. Iindawo ekufuneka uzinike ingqalelo ziphawulwe ngombala obomvu.

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

Ndithe ndakubona konke oku, ndaphelelwa ngamandla. Akucaci ukuba kugrunjwe phi ngokulandelayo.

Ukungqubanisa ingqondo okuncinci kwaye-kwaye-kwaye... Heke! Kwindawo yokulahla phandle - oku in, kwaye in oku phandle.

Ndijonge ukuba yintoni i-URB_INTERRUPT. Ndafumanisa ukuba le yindlela yokudlulisa idatha. Kwaye kukho iindlela ezi-4 ezinjalo: ukulawula, ukuphazamisa, isochronous, ubuninzi. Unokufunda ngazo ngokwahlukeneyo.

Kwaye iidilesi zesiphelo kwi-interface yesixhobo se-USB zinokufumaneka ngomyalelo we-"lsusb -v" okanye usebenzisa i-pyusb.

Ngoku kufuneka sifumane zonke izixhobo kunye nale VID. Unokukhangela ngokuthe ngqo nge-VID:PID.

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

Ijongeka ngolu hlobo:

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

Ke, sinolwazi oluyimfuneko: imiyalelo ye-P_INFO. okanye DEFALT, idilesi apho ibhalwe khona imiyalelo endpoint=03 kunye nendawo yokufumana impendulo endpoint=86. Ekuphela kwento eseleyo kukuguqula imiyalelo ibe yihex.

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

Kuba sele sisifumene isixhobo, masiyiqhawule kwi kernel...

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

...kwaye ubhalele kwisiphelo ngedilesi 0x03,

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

... kwaye emva koko ufunde impendulo kwisiphelo kunye nedilesi 0x86.

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

Impendulo eyakhiwe:

P_INFOfmt: 1
mode: app
app-present: 1
boot-present: 1
hw-sn: 18072B44CA
hw-rev: 0x20
cbl: 4
app-sw-rev: CP000116BBA
boot-sw-rev: CP000014BAD
flash: 3
app-m_name: Voyager 1450g
boot-m_name: Voyager 1450g
app-p_name: 1450g
boot-p_name: 1450g
boot-time: 16:56:02
boot-date: Oct 16 2014
app-time: 08:49:30
app-date: Mar 25 2019
app-compat: 289
boot-compat: 288
csum: 0x6986

Sibona le datha kwi-dump.pcap.

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

Kakhulu! Guqula inkqubo yebarcodes ibe yihex. Yiyo loo nto, umsebenzi woqeqesho ulungile.

Kuthekani nge-firmware? Yonke into ibonakala ifana, kodwa kukho i-nuance.

Emva kokulahla ngokupheleleyo inkqubo edanyazayo, siye sayiqonda kakuhle into esasijongene nayo. Nali inqaku malunga ne-XMODEM, ebiluncedo kakhulu ekuqondeni ukuba kwenzeka njani olu nxibelelwano, nangona ngokwemiqathango ngokubanzi: http://microsin.net/adminstuff/others/xmodem-protocol-overview.html Ndincoma ukuyifunda.

Ukujonga kwindawo yokulahla, unokubona ukuba ubungakanani besakhelo yi-1024, kunye nobukhulu bedatha ye-URB ngama-64.

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

Ke ngoko - 1024/64 - sifumana imigca ye-16 kwibhloko, funda ifayile ye-firmware umlingiswa we-1 ngexesha kwaye wenze ibhloko. Ukuncedisa umgca we-1 kwibhloko enamagama akhethekileyo fd3e02 + inombolo yebhloko.
Imigca ye-14 elandelayo yongezwa nge-fd25 +, usebenzisa i-XMODEM.calc_crc () sibala i-checksum yebhloko yonke (kuthathe ixesha elide ukuqonda ukuba "FF - 1" yi-CSUM) kunye nokugqibela, umgca we-16 wongezwa. kunye fd3e.

Kuya kubonakala ngathi yiyo, funda ifayile ye-firmware, ubethe iibhloko, ukhuphe iskena kwi-kernel kwaye uyithumele kwisixhobo. Kodwa akukho lula ngolo hlobo. Iskena kufuneka sitshintshelwe kwimowudi ye-firmware,
отправив ему NEWAPP = ‘\xfd\x0a\x16\x4e\x2c\x4e\x45\x57\x41\x50\x50\x0d’.
Lisukaphi eli qela?? Ukusuka kwindawo yokulahla.

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

Kodwa asikwazi ukuthumela ibhloko epheleleyo kwiskena ngenxa yomda we-64:

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

Ewe, iskena kwimowudi edanyazayo NEWAPP ayamkeli i-hex. Ngoko ke, kuya kufuneka uguqulele umgca ngamnye bytes_array

[253, 10, 22, 78, 44, 78, 69, 87, 65, 80, 80, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

Kwaye ke thumela le datha kwiskena.

Sifumana impendulo:

[2, 1, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

Ukuba ujonga inqaku malunga ne-XMODEM, kuya kucaca: idatha yamkelwe.

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

Emva kokuba zonke iibhloko zikhutshiwe, sigqibezela ugqithiselo END_TRANSFER = 'xfdx01x04'.

Ewe, ekubeni ezi bloko zingathwali naluphi na ulwazi kubantu abaqhelekileyo, siya kufaka i-firmware kwimodi efihliweyo ngokungagqibekanga. Kwaye ukuba kunokwenzeka, siya kuququzelela ibha yenkqubela phambili nge-tqdm.

Umsebenzi womphuhlisi, okanye indlela esidanyaze ngayo izikena eziphathwa ngesandla ngaphandle komthengisi

Ngokwenyani, ke ngumcimbi wezinto ezincinci. Konke okuseleyo kukusonga isisombululo kwizikripthi zokuphindaphinda ubuninzi ngexesha elichazwe ngokucacileyo, ukuze ungacothi inkqubo yomsebenzi ekuphumeni, kwaye ungeze ukugawulwa kwemithi.

Isiphumo

Emva kokuchitha ixesha elininzi kunye nomzamo kunye neenwele ezintlokweni zethu, sakwazi ukuphuhlisa izisombululo esizidingayo, kwaye sadibana nomhla wokugqibela. Kwangaxeshanye, iiskena ngoku ziphinde zahluzwa kwaye ziphinde ziqeqeshwe kwindawo ephakathi, silawula ngokucacileyo yonke inkqubo. Inkampani igcine ixesha kunye nemali, kwaye siye safumana amava axabisekileyo kwizixhobo zobunjineli eziguqukayo zolu hlobo.

umthombo: www.habr.com